Prhub

#7040 [ci, trainer] fix: Fix ci AssertionError for the environment variable CUDA_DEVICE_MAX_CONNECTIONS

原始 PR 作者 pengnuoheng 合并时间 2026-07-16 12:17 文件变更 1 提交数 1 评论 2 代码增减 +14 / -0

执行摘要

修复 Ascend MindSpeed 引擎缺少 CUDA_DEVICE_MAX_CONNECTIONS 环境变量导致的断言错误

PR 关联的 CI 任务(E2E Ascend testing for RL training scenarios of LLM models using MindSpeed_LLM engine)触发了 AssertionError:'Using tensor model parallelism or context parallelism require setting the environment variable CUDA_DEVICE_MAX_CONNECTIONS to 1'。PR body 中明确引用该错误作为修复原因。

此 PR 结构清晰、改动最小,值得合并。关注点在于:(1)后续是否应增加针对 mindspeed 策略的测试;(2)_uses_megatron 函数是否应被泛化或重构,以统一处理多个引擎的策略检测。推荐在后续重构中考虑统一策略注册机制。

讨论亮点

审阅者 wuxibin89 提出关键问题:“Does NPU also affect by CUDA_DEVICE_MAX_CONNECTIONS?” 作者 pengnuoheng 回复确认,并附上 CI 日志链接作为证据,表明 MindSpeed 引擎的 Megatron-LM 在 Tensor/Context parallelism 场景下强制要求该变量为 "1"。除此之外无其他讨论。

实现拆解

  1. 新增策略检测函数:在 verl/trainer/constants_ppo.py 中添加 _uses_mindspeed(config) 函数,通过 OmegaConf 检查配置中 actor_rollout_ref.actor.strategy 或 critic.strategy 是否为 "mindspeed",返回布尔值。该函数结构与已有的 _uses_megatron 完全一致。
  2. 运行时环境调整:在 get_ppo_ray_runtime_env 函数中,在已有 Megatron 条件设置 CUDA_DEVICE_MAX_CONNECTIONS=1 之后,增加对 MindSpeed 策略的同样设置。无论 GPU 计算能力如何(不再依赖 _is_hopper_or_ampere 条件),只要检测到 _uses_mindspeed(config) 为真,就设定该环境变量。
  3. 配置不变:PPO_RAY_RUNTIME_ENV 字典本身未被修改,MindSpeed 专用环境变量通过运行时函数动态注入,保持了模块化。
  4. 无测试配套变更:本次改动仅涉及源码,未新增或修改测试文件。
文件 模块 状态 重要度
verl/trainer/constants_ppo.py 训练器配置 modified 6.01

关键符号

_uses_mindspeed get_ppo_ray_runtime_env

关键源码片段

verl/trainer/constants_ppo.py core-logic

该文件定义了 PPO Ray 运行时环境字典和关键的环境配置函数 get_ppo_ray_runtime_env。本次变更新增了 _uses_mindspeed 函数用于检测 mindspeed 策略,并在运行时环境中无条件设置 CUDA_DEVICE_MAX_CONNECTIONS=1,修复 CI 断言错误。

# 新增策略检测函数:判断配置是否使用 MindSpeed 引擎
# 结构与 _uses_megatron 完全一致,用于在运行时动态注入环境变量
def _uses_mindspeed(config) -> bool:
    """Return True if any trainable engine in the config uses the mindspeed strategy."""
    if config is None:
        return False
    from omegaconf import OmegaConf
​
    for key in ("actor_rollout_ref.actor.strategy", "critic.strategy"):
        if OmegaConf.select(config, key, default=None) == "mindspeed":
            return True
    return False
​
# 在运行时环境设置函数中,mindspeed 策略也需要设置 CUDA_DEVICE_MAX_CONNECTIONS=1
# 注意:不同于 Megatron 的条件(仅 Hopper/Ampere 架构),mindspeed 无条件设置
# 这是因为 Ascend NPU 上的 Megatron-LM 强制要求该变量为 "1"(参见 PR 评论中的 CI 日志)
def get_ppo_ray_runtime_env(config=None):
    # ... 之前的代码 ...
    if _is_hopper_or_ampere and _uses_megatron(config):
        runtime_env["env_vars"]["CUDA_DEVICE_MAX_CONNECTIONS"] = "1"
    if _uses_mindspeed(config):
        runtime_env["env_vars"]["CUDA_DEVICE_MAX_CONNECTIONS"] = "1"
    # ... 后续代码 ...

评论区精华

NPU 是否受 CUDA_DEVICE_MAX_CONNECTIONS 影响 正确性

审阅者 wuxibin89 在代码行注释中提问:'Does NPU also affect by CUDA_DEVICE_MAX_CONNECTIONS?' 作者 pengnuoheng 回复附上 CI 日志链接,证明 MindSpeed 引擎的 Megatron-LM 在 Tensor/Context parallelism 下强制要求该变量为 1。

结论:确认 Ascend NPU 上的 MindSpeed 引擎同样需要该变量,变更被接受。 · RESOLVED

风险与影响

  1. 回归风险低:改动仅在检测到 mindspeed 策略时,在运行时环境中增加一个环境变量,不影响其他策略(Megatron、FSDP 等)的逻辑。
  2. 无性能影响:CUDA_DEVICE_MAX_CONNECTIONS=1 仅在 Megatron 引擎的 TP/CP 场景下影响通信重叠,对非 Megatron 引擎无副作用。
  3. 缺少测试覆盖:当前没有针对新逻辑的单元测试,可能遗漏对 mindspeed 策略不同子场景的验证。

用户:使用 Ascend NPU 和 MindSpeed 引擎的用户将不再遭遇 CI 断言错误,训练可以正常启动。
系统:仅影响 PyTorch Ray 运行时环境的环境变量注入逻辑,无其他系统组件变更。
团队:新增的 _uses_mindspeed 函数可作为后续支持 MindSpeed 策略其他特性的基础。
影响程度:低至中等(仅影响特定硬件/引擎组合的 CI 和实际训练)。

缺少测试覆盖

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论