Prhub

#44130 [Bugfix] Fix `sequence_parallel_chunk_impl` custom op aliasing its input

原始 PR 作者 vadiklyutiy 合并时间 2026-06-06 07:56 文件变更 1 提交数 2 评论 2 代码增减 +4 / -1

执行摘要

修复 custom op 返回视图导致启动崩溃

MoE 模型启用 sequence-parallel MoE( --enable-expert-parallel 等配置)时,引擎启动报错:RuntimeError: The output of this custom operator must not alias any inputs。该问题阻断了 Qwen3.5/Qwen3-Next 等模型的正常使用。

该 PR 改动简单但关键,建议所有使用 sequence-parallel MoE 的部署及时合入。可关注后续是否需要在测试中加入针对 custom op 输出别名的静态检查,防止同类问题。

讨论亮点

issue 评论中 ZJY0516 表示本地无法复现该问题,仅看到 warning 而非报错,说明问题可能依赖于特定 PyTorch 版本或 compile 配置。PR 本身无 review 评论,直接获得 approval。

实现拆解

  1. vllm/model_executor/models/utils.pysequence_parallel_chunk_impl 函数中,将返回值拆分为两步:先通过 torch.narrow 切片,然后判断 y is x(即未padding 的情况),若为真则调用 clone(),否则直接返回切片。
  2. 修改仅影响自定义算子 vllm::sequence_parallel_chunk_impl 的实现,对外接口不变。
  3. 未新增测试文件,但作者提供了详细的复现命令及其在 4x B200 上的成功验证结果。
文件 模块 状态 重要度
vllm/model_executor/models/utils.py 模型执行 modified 6.2

关键符号

sequence_parallel_chunk_impl

关键源码片段

vllm/model_executor/models/utils.py data-contract

包含 sequence_parallel_chunk_impl 自定义算子的实现,是 bug 根因和修复位置。

# 关键函数: sequence_parallel_chunk_impl
# 该函数被注册为 torch custom op,AOT-autograd 要求输出不能别名输入。
# 当序列长度恰好能被 tp_size 整除时,无需 padding,y = x
# 此时 torch.narrow 返回的是 x 的视图,因此需要 clone 确保独立性。
def sequence_parallel_chunk_impl(x: torch.Tensor) -> torch.Tensor:
    tp_size = get_tensor_model_parallel_world_size()
    tp_rank = get_tensor_model_parallel_rank()
    seq_len = x.size(0)
    remainder = seq_len % tp_size
    if remainder != 0:
        pad_len = tp_size - remainder
        y = nn.functional.pad(x, (0, 0, 0, pad_len)) # padding 分支,y 是新张量
    else:
        y = x # no-pad 分支,y 是输入别名
    chunk = y.shape[0] // tp_size
    start = tp_rank * chunk
    out = torch.narrow(y, 0, start, chunk)
    # 检查是否别名,若是则 clone,满足 custom op 契约
    return out.clone() if y is x else out

评论区精华

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

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

风险与影响

风险低。修改仅增加一次 clone 操作,在 no-pad 路径下引入额外内存拷贝,但该路径本身不含 pad 的显存开销,整体影响微弱。未引入新的配置或依赖;已通过实际用例验证。

直接修复了使用 sequence-parallel MoE 的模型(如 Qwen3.5-397B-A17B-NVFP4)的引擎启动崩溃问题。影响范围限于 tensor_parallel_size > 1, data_parallel_size > 1, allgather_reducescatter 后端场景。用户无需修改代码或配置即可受益。

核心路径变更

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论