Prhub

#38108 Fix Device Index for ROCm Ray Workers in MoE Benchmark

原始 PR 作者 li-liwen 合并时间 2026-03-28 16:27 文件变更 1 提交数 5 评论 4 代码增减 +2 / -3

执行摘要

修复 ROCm 上 MoE 基准测试 Ray worker 的设备索引错误,避免崩溃。

根据PR body,目的是修复torch.AcceleratorError: CUDA error: invalid device ordinal错误,该错误发生在ROCm系统上运行benchmarks/kernels/benchmark_moe.py --tune时,导致MoE自动调优崩溃。PR body引用相关issue(如ROCm/ROCm#5780),指出Ray worker使用全局设备ID与本地设备索引不匹配的问题。

对于关注ROCm支持、MoE性能调优或分布式设备管理的工程师,此PR值得快速浏览,了解Ray worker设备索引处理的模式。变更简单但揭示了平台特定代码的条件隔离重要性,可作为跨平台兼容性设计的参考案例。

讨论亮点

在Issue评论中,jikunshang提问:'I am wondering whether this affect cuda behavior? or is it safe to always use 0?',涉及修复的正确性和平台兼容性。li-liwen回复确认:修复对CUDA安全,因为更改的代码块仅在current_platform.is_rocm()为True时执行,CUDA环境中need_device_guard保持False,走nullcontext()路径。讨论焦点是设计权衡,结论是修复已验证不影响CUDA。无未解决疑虑。

实现拆解

仅修改了benchmarks/kernels/benchmark_moe.py文件中的tune函数。关键改动:在函数内部,当need_device_guard为True时(仅在current_platform.is_rocm()条件下触发),将torch.accelerator.device_index(self.device_id)替换为torch.accelerator.device_index(0),并添加注释说明"Ray restricts each worker to one GPU; use local index 0"。删除3行、添加2行,逻辑变化集中在设备保护上下文的初始化。

文件 模块 状态 重要度
benchmarks/kernels/benchmark_moe.py benchmarks/kernels modified 4.0

关键符号

tune

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

设备索引修复对 CUDA 的安全影响 正确性

jikunshang 提问是否影响 CUDA 行为或总是使用 0 是否安全;li-liwen 回复确认仅在 ROCm 下执行,不影响 CUDA,并提供了测试验证。

结论:修复是安全的,已验证不影响 CUDA 环境,讨论已解决。 · 已解决

风险与影响

风险较低:修复特定于ROCm环境,依赖current_platform.is_rocm()条件判断,若平台检测逻辑错误可能导致误用或遗漏;但讨论中已确认CUDA行为不变。回归风险小,因为改动范围小且仅影响MoE基准测试的特定路径。性能风险无,安全风险无,兼容性风险仅限于ROCm用户,已通过测试验证。

影响范围:使用AMD GPU运行MoE自动调优基准测试的用户,特别是多GPU系统(如测试中的8×AMD Instinct MI100)。影响程度:修复了崩溃问题,使自动调优功能可用,提升ROCm平台兼容性和开发体验。对系统整体无影响,仅限于benchmarks模块的工具链,不涉及核心推理或训练路径。团队影响:ROCm开发者受益,CUDA用户无感知。

条件依赖 环境特定修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论