Prhub

#21519 [Bugfix] Fix incorrect dp-attention parallel info in bench_one_batch

原始 PR 作者 lviy 合并时间 2026-04-03 11:13 文件变更 1 提交数 6 评论 6 代码增减 +3 / -1

执行摘要

修复 bench_one_batch 中 DP-Attention 并行元数据错误,确保性能分析准确性。

根据PR body描述,bench_one_batch用于低级别性能分析,但当启用DP-Attention时,未传递正确的注意力并行元数据到prepare_mlp_sync_batch_raw()。具体来说,attn_tp_size硬编码为1,且attn_cp_size未转发,导致DP-Attention准备路径不一致。这在例如使用GLM-4.7-Flash模型进行性能分析时变得可见。

该PR值得快速浏览,特别是对于涉及性能分析、DP-Attention配置或调度器开发的工程师。关注从硬编码到使用现有函数的简化设计决策,这体现了代码复用和一致性的最佳实践。

讨论亮点

review讨论中,alexnails建议使用现有的get_attention_tp_size函数替代自定义计算,以简化代码并提高一致性。lviy测试后采纳此建议,更新了实现。讨论聚焦于代码设计和正确性,最终以简化方案达成一致。

实现拆解

仅修改了一个文件:python/sglang/bench_one_batch.py。在_maybe_prepare_mlp_sync_batch函数中,将attn_tp_size从硬编码1改为调用get_attention_tp_size()函数获取正确值,并添加attn_cp_size=model_runner.attn_cp_size参数传递。这修复了元数据传递错误,使prepare_mlp_sync_batch_raw能够接收正确的并行信息。

文件 模块 状态 重要度
python/sglang/bench_one_batch.py benchmarking modified 5.0

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

关键符号

_maybe_prepare_mlp_sync_batch

评论区精华

使用 get_attention_tp_size 简化代码 设计

alexnails 建议导入并使用 get_attention_tp_size 函数,而不是在代码中自定义计算 attn_tp_size,以提高代码简洁性和维护性。

结论:lviy 测试后采纳建议,更新代码使用 get_attention_tp_size,确保了正确性和一致性。 · 已解决

风险与影响

风险较低。改动仅涉及元数据传递修正,修复了已知错误。但需确保get_attention_tp_size函数在bench_one_batch上下文中正确工作,且不引入新的依赖或副作用。由于bench_one_batch是性能分析工具,非生产推理核心路径,因此影响有限。

直接影响是使bench_one_batch工具在启用DP-Attention时能正确运行,提升了性能分析的准确性。影响范围限于使用该工具进行低级别性能分析的开发者或测试人员。对系统其他模块和用户功能无影响。

低风险修复 依赖现有函数

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

本PR修复了bench_one_batch性能分析工具中DP-Attention并行元数据传递错误,通过使用get_attention_tp_size函数并添加attn_cp_size参数,确保在启用DP-Attention时性能分析路径与正常调度器路径一致,从而提升分析准确性。

功能与动机

动机源于bench_one_batch在启用DP-Attention时未正确传递注意力并行元数据,导致性能分析不一致。PR body明确指出:“attn_tp_size is hardcoded to 1 and attn_cp_size is not forwarded, which makes the DP-Attention preparation path inconsistent with the normal scheduler path”。这在使用GLM-4.7-Flash等模型进行性能分析时会造成问题。

实现拆解

仅修改了python/sglang/bench_one_batch.py文件,具体改动在_maybe_prepare_mlp_sync_batch函数中:

  • attn_tp_size从硬编码1改为调用get_attention_tp_size()动态获取。
  • 添加attn_cp_size=model_runner.attn_cp_size参数传递。
    关键代码变更如下:
    prepare_mlp_sync_batch_raw(
        batch,
        dp_size=model_runner.server_args.dp_size,
        attn_tp_size=get_attention_tp_size(), # 修正为动态获取
        attn_cp_size=model_runner.attn_cp_size, # 新增参数
        ...
    )
    

评论区精华

review讨论中,alexnails建议使用现有函数简化代码:

“can't this just be an import and use: get_attention_tp_size”
作者lviy回应并测试后更新,采纳了这一建议,体现了对代码设计和一致性的重视。

风险与影响

风险较低,修复了已知错误,但需确保get_attention_tp_size函数在bench_one_batch上下文中正常工作。影响限于性能分析工具用户,提升分析准确性,对系统其他部分无影响。

关联脉络

与PR #21840(调度器批次修复)可能共享并行计算逻辑,反映了项目对调度和性能分析一致性的持续优化。近期历史PR中多见run-ci标签,表明CI测试是重要环节,本PR也通过run-ci确保改动稳定性。

参与讨论