You need to enable JavaScript to run this app. 在SGE集群运行Ray Tune出现Redis启动后无raylet注册报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

在SGE集群运行Ray Tune出现Redis启动后无raylet注册报错如何解决?

问题原因与修复方案

报错根因

该报错本质是Ray头节点的Redis服务启动成功,但负责执行任务的Raylet进程没有正常注册到Redis,核心是现有脚本的IP地址提取逻辑错误、Ray启动参数缺失、SGE集群网络适配三类问题导致的。

具体修复步骤

  • 首先修正作业脚本里的IP提取逻辑,你用printf '%q'会对输出内容做转义,导致提取到的IP地址带转义字符无法正常使用,改用直接从SGE环境变量取计算节点IP的方式,同时给Ray头节点启动明确指定网卡、资源参数,避免自动识别错误:
redis_password="5241590000000000"
port="6379"

# 取SGE分配的计算节点真实IP,避免Ray默认绑定lo回环网卡
node_ip=$(hostname -i | awk '{print $1}')

# 启动Ray头节点时明确指定IP、资源配额,$NSLOTS是SGE自带的申请CPU核数变量
ray start --head --node-ip-address=$node_ip --port $port --redis-password=$redis_password --num-cpus=$NSLOTS &
sleep 10 # 等待Ray所有组件完全启动,避免提前连接失败
ray_address=$node_ip":"$port

# 执行Python脚本
python synthetic_geno_nn_cls.py $trainfile $testfile $ray_address $redis_password

注:如果作业申请了GPU资源,可以在ray start参数里加上--num-gpus=你申请的GPU卡数

  • 其次修正Python代码里的Ray初始化逻辑,增加超时、临时目录配置,避免服务未就绪、多作业临时目录冲突的问题:
import sys
import os
import ray

train_f = sys.argv[1]
test_f = sys.argv[2]
ray_address = sys.argv[3]
redis_password = sys.argv[4]

ray.init(
    address=ray_address,
    _redis_password=redis_password,
    ignore_reinit_error=True,
    _temp_dir="/tmp/ray_" + str(os.getpid()) # 隔离不同作业的临时目录
)
  • 如果你是单节点作业(整个任务只跑在一个SGE计算节点上),可以进一步简化配置:去掉作业脚本里手动启动Ray的步骤,Python代码直接自动初始化即可:
# 单节点场景下无需提前启动Ray,直接初始化即可
ray.init(
    num_cpus=int(os.environ.get("NSLOTS", 4)),
    # num_gpus=你申请的GPU数量,
    _temp_dir="/tmp/ray_" + str(os.getpid())
)

额外排查点

如果修改后仍报错,可以在作业脚本启动Python代码前加一行ray status,输出Ray的服务状态,确认raylet是否已经完成注册。

内容的提问来源于stack exchange,提问作者Dom Byrne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:33:03