Prhub

#40398 [Bugfix][Ray] Fix RayExecutorV2 actor name collision with DP > 1

原始 PR 作者 tomeras91 合并时间 2026-05-04 04:00 文件变更 1 提交数 2 评论 2 代码增减 +5 / -0

执行摘要

修复 Ray 数据并行 >1 时 actor 名字冲突

VLLM_USE_RAY_V2_EXECUTOR_BACKEND=1data_parallel_size > 1 时,CoreEngineActorManager.__init__ 通过 copy.deepcopy(vllm_config) 生成的各 DP engine 配置共享原始 instance_id,导致所有 engine 创建同名 Ray actor,仅第一个成功,其余崩溃报 ActorAlreadyExistsError

建议合入,但应尽快跟进弹性 EP 扩缩容路径的类似修复,以避免未来回归。

讨论亮点

gemini-code-assist[bot] 指出弹性 EP 扩缩容路径(scale_up_elastic_ep)和多进程 DP 路径中缺少相同修复,可能导致命名冲突或 KV transfer 行为错误,属于未解决的高风险问题。

实现拆解

  1. vllm/v1/engine/utils.pyCoreEngineActorManager.__init__ 中,于 for 循环内 copy.deepcopy 之后、使用配置之前,添加 if dp_size > 1: dp_vllm_config.instance_id = f"{dp_vllm_config.instance_id}_dp{index}",使每个 DP engine 拥有唯一的实例标识。
  2. 该改动遵循已有模式:kv_transfer_config.engine_id 已在后续行以相同方式追加 _dp{local_index} 后缀。
  3. 条件 dp_size > 1 确保单 DP 部署行为不受影响。
  4. 无测试配套变更(PR 提及现有单元测试通过)。
文件 模块 状态 重要度
vllm/v1/engine/utils.py 引擎 modified 5.91

关键符号

CoreEngineActorManager.__init__

关键源码片段

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

核心修复文件,在 `CoreEngineActorManager.__init__` 中为每个 DP engine 配置添加唯一的 `instance_id` 后缀。

# 在 CoreEngineActorManager.__init__ 的 for 循环中,
# 复制 vllm_config 后立即追加 DP rank 以生成唯一的 instance_id
for index, local_index, pg in zip(
    range(dp_size), local_dp_ranks, placement_groups
):
    dp_vllm_config = copy.deepcopy(vllm_config)
    if dp_size > 1:
        # 追加 DP rank,确保每个 DP engine 的 Ray actor 名称唯一
        # 若不追加,所有 engine 共享同一 instance_id,导致 actor 命名冲突
        dp_vllm_config.instance_id = (
            f"{dp_vllm_config.instance_id}_dp{index}"
        )
    dp_vllm_config.parallel_config.placement_group = pg
    local_client = index < local_engine_count
​
    if dp_size > 1 and dp_vllm_config.kv_transfer_config is not None:
        # 已有类似处理:为 kv_transfer_config.engine_id 追加 DP 后缀
        dp_vllm_config.kv_transfer_config.engine_id = (
            f"{dp_vllm_config.kv_transfer_config.engine_id}_dp{local_index}"
        )

评论区精华

弹性 EP 扩缩容路径缺少 instance_id 更新 正确性

gemini-code-assist[bot] 指出 `CoreEngineActorManager.scale_up_elastic_ep` ( 约 766 行 ) 和 multiprocessing DP 路径中未对 instance_id 做类似处理,可能导致命名冲突或 KV transfer 行为错误。

结论:未解决,状态为 COMMENTED,未获得维护者回应。 · unresolved

风险与影响

低风险:改动仅 5 行,且受 dp_size > 1 条件保护,不影响单 DP 场景。但弹性 EP 扩缩容路径未被覆盖,若后续启用该功能可能重新暴露 actor 命名冲突。

影响范围限于 RayDP>1 使用 VLLM_USE_RAY_V2_EXECUTOR_BACKEND=1 的用户,修复了启动崩溃问题。对其他用户无影响。

弹性 EP 路径遗漏 多进程 DP 路径遗漏 仅有条件生效

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论