You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SageMaker运行Ray RLlib设num_workers=7报The actor died错误如何解决?

解决方案

核心原因说明

8核CPU环境下设置num_workers=7属于资源超配:Ray的主训练进程(Driver)本身需要占用至少1核,加上SageMaker环境自带的系统后台进程也会占用部分资源,所有CPU核心被占满后会出现调度阻塞,再叠加你配置的批次采样量较大,多worker并行时内存占用飙升,会触发系统OOM Killer主动杀掉worker进程,最终抛出actor意外死亡的报错。

具体修复步骤

  • 调整worker数量配置
    不要使用num_cpus - 1的极限配置,8核环境下建议将num_workers调整为46,预留23核给Driver进程和系统任务使用,避免资源占满。同时可以在config中新增num_cpus_per_worker: 1参数,显式限制每个worker的CPU配额,避免资源抢占。
"config": {
    # 原有配置保留
    "num_workers": 5,
    "num_cpus_per_worker": 1,
}
  • 降低采样批次大小,避免内存溢出
    你当前配置的train_batch_size=100000、sgd_minibatch_size=32768数值过大,多worker并行时每个worker都要缓存采样数据,长时间运行后内存占用会持续升高触发OOM。建议先下调参数测试:
"config": {
    # 原有配置保留
    "train_batch_size": 30000,
    "sgd_minibatch_size": 8192,
}
  • 修复环境注册的序列化问题
    你当前使用lambda匿名函数注册环境,多worker进程启动时需要序列化/反序列化环境创建逻辑,lambda的闭包特性很容易导致反序列化失败,worker启动失败直接崩溃。替换为显式的命名函数即可:
# 把lambda换成显式函数定义
def env_creator(env_config):
    return create_env(env_config)

class MyLauncher(SageMakerRayLauncher):
    def register_env_creator(self):
        register_env(
            "RiveRL-v1",
            env_creator
        )
    # 其余代码保留
  • 新增容错配置
    在rllib config中新增worker自动重建配置,避免单次worker崩溃直接终止训练:
"config": {
    # 原有配置保留
    "ignore_worker_failures": True,
    "recreate_failed_workers": True,
    "max_failures": 3,
}
  • 升级Ray版本(可选)
    你当前使用的Python3.6对应的Ray版本较低,旧版本Ray存在较多worker泄漏、异常崩溃的已知bug,如果上述配置调整后仍有报错,可以升级到兼容sagemaker_rl的最新稳定Ray版本。

如果以上调整都无法满足你的性能要求,建议更换更高配置的SageMaker CPU实例,比如16核的ml.c5.4xlarge,获得更多的CPU和内存资源支持更高的worker数。


内容的提问来源于stack exchange,提问作者Amir Reza SH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:48:02