Prhub

#43998 [Bugfix] Fix Ray placement group allocation with grouped nodes

原始 PR 作者 czhu-cohere 合并时间 2026-05-30 02:51 文件变更 1 提交数 1 评论 0 代码增减 +6 / -1

执行摘要

修复 Ray 多节点 placement group 分配崩溃

在多节点集群上使用 Ray placement group 时,Ray 内部生成的 _group_ 资源键导致单 IP 断言失败(如 node:10.0.138.58_group_0_...),同时fill 策略下外层循环缺少中断条件,导致创建的 placement group 数量超过 dp_size

值得合并。该修复针对的是多节点 Ray 集群上的数据并行场景,代码简洁,修复明确,无副作用。

讨论亮点

无 review 讨论。

实现拆解

  1. 过滤 _group_ 资源键:在 vllm/v1/engine/utils.pycreate_dp_placement_groups 函数中,过滤节点资源键时增加 "_group_" not in key 条件,确保只保留 node:<ip> 格式的键。
  2. 添加外层循环中断:在 for 循环末尾(if len(placement_groups) == dp_size: break)之后,再添加一次相同的中断判断,防止在 fillspan 策略下继续处理剩余 bundle 导致多分配。
文件 模块 状态 重要度
vllm/v1/engine/utils.py 引擎 modified 5.84

关键源码片段

vllm/v1/engine/utils.py core-logic

核心变更文件,修复 placement group 分配逻辑的两个 Bug。

# 过滤掉 Ray 内部生成的 _group_ 资源键
node_ip_keys = [
    key
    for key in node_resources
    if key != "node:__internal_head__"
    and key.startswith("node:")
    and "_group_" not in key # 新增:排除 _group_ 键
]
assert len(node_ip_keys) == 1, (
    f"Zero or multiple node IP keys found in node resources: {node_ip_keys}"
)
node_ip_key = node_ip_keys[0]
node_ip = node_ip_key.split(":")[1]# ... 中间的 placement group 创建逻辑 ...if len(placement_groups) == dp_size:
    break # 内层中断,跳出当前 node_resources 的循环if len(placement_groups) == dp_size:
    break # 新增外层中断,跳出 for 循环,防止多余分配

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险很低。变更仅涉及两个条件判断,逻辑清晰,且已有 assertion 兜底检查。

影响范围限于使用 Ray 和多节点数据并行(DP)的多节点集群用户。修复后 placement group 分配行为正确,不会出现初始化失败或断言崩溃。

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论