Prhub

#30619 [NPU] Fix CPU device for node topology probe

原始 PR 作者 stellaxcpeng 合并时间 2026-07-14 22:17 文件变更 1 提交数 6 评论 9 代码增减 +3 / -1

执行摘要

修复 NPU 节点拓扑探测张量设备不匹配

PR body 指出当 SGLang 运行在 NPU 设备上下文时,in_the_same_node_as 中创建的 tensor torch.tensor([0] * world_size, dtype=torch.int32) 默认位于 NPU,导致 all_reduce 通过 CPU 进程组时出现 RuntimeError: No backend type associated with device type npu

建议 NPU 相关维护者精读,理解设备兼容性问题。其他后端团队可快速浏览,作为跨设备修复的参考案例。

讨论亮点
  1. gemini-code-assist[bot] 的评论建议避免在模块导入时调用 is_cuda(),但该评论针对 triton_symm_mem_ag.py 文件,与本 PR 最终合并的变更无关。
  2. Hexq0210 询问是否会影响 AMD 平台,但未得到进一步回应。最终 PR 被批准合并。

实现拆解

  1. 问题定位:在 python/sglang/srt/distributed/parallel_state.pyin_the_same_node_as 函数中,第 2636 行创建 tensor 时未指定设备,在 NPU 环境下默认使用 NPU 设备。
  2. 修改代码:在 torch.tensor(...) 调用中增加 device='cpu' 参数,明确将 tensor 创建在 CPU 上。
  3. 验证:该修改仅影响 tensor 的设备属性,不改变算法逻辑,不影响其他后端(CUDA、XPU 等)。无测试、配置或部署配套变更。
文件 模块 状态 重要度
python/sglang/srt/distributed/parallel_state.py 分布式状态 modified 4.27

关键符号

in_the_same_node_as

关键源码片段

python/sglang/srt/distributed/parallel_state.py core-logic

核心修改文件,修复了节点拓扑探测张量的设备问题。

def in_the_same_node_as(pg: ProcessGroup, source_rank: int = 0) -> List[bool]:
    # ... 前面的是初始化逻辑 ...
    # 创建 tensor 用于存储各 rank 是否在同一节点
    # 必须使用 CPU 设备,因为后续的 all_reduce 操作依赖 CPU 进程组
    # 避免在 NPU 等非 CPU 设备上创建导致设备不匹配的 RuntimeError
    is_in_the_same_node = torch.tensor(
        [0] * world_size, dtype=torch.int32, device="cpu"
    )
    # ... 后续共享内存检测逻辑 ...

评论区精华

避免模块级 is_cuda() 调用 设计

gemini-code-assist[bot] 建议将模块级 `_is_cuda = is_cuda()` 改为在 `__init__` 中直接调用,以防止预初始化 CUDA。但该评论针对的是 triton_symm_mem_ag.py 文件,与本 PR 最终改动无关。

结论:评论未应用于本 PR 最终合并代码,可能属于早期提交的一部分。 · outdated

是否影响 AMD question

Hexq0210 询问改动是否会影响 AMD 平台,但未得到作者回应。

结论:无明确结论,但改动仅添加 device='cpu',对 AMD 无负面影响。 · resolved (implicitly)

风险与影响

极低风险。仅添加 device='cpu' 显式参数,不会影响其他设备(CUDA、AMD、Intel GPU)的行为,因为 CPU tensor 在非 NPU 环境下也是默认选项。未引入新的依赖或性能开销。

影响范围:仅 NPU 多节点部署场景。对其他用户无影响。修复了 NPU 上 LogitsProcessor 初始化的阻塞性错误,NPU 用户可在多节点环境中正常运行。

单行变更,低风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论