Prhub

#46392 [Perf] Enable + tune FlashInfer fused allreduce at world_size=16 on SM 10.3 (GB300)

原始 PR 作者 majunze2001 合并时间 2026-06-25 14:04 文件变更 3 提交数 4 评论 4 代码增减 +13 / -4

执行摘要

FlashInfer 融合 allreduce 支持 world_size=16

PR #46001 使 DeepSeek-V4 (block-FP8 shared expert) 的 TEP=16 功能可用,从而需要 FlashInfer fused allreduce 支持 ws=16 以优化性能。此前 PassConfig.flashinfer_max_size() 和 FI_ALLREDUCE_FUSION_MAX_SIZE_MB 表仅支持 ws=2/4/8,ws=16 时退化为普通 all-reduce 加独立 RMSNorm。

值得精读并合并。该 PR 数据驱动、基准测试详实,是 PR #37756 (ws=2/4/8 支持)的自然延伸。对于部署 GB300 多节点集群的团队,应及时跟进。

讨论亮点

GirasoleY 询问是否应同时更新 one-shot 表(_FI_ALLREDUCE_ONE_SHOT_MAX_SIZES_MB),作者 majunze2001 回应称该表仅用于单节点 trtllm 后端,多节点 ws=16 场景下无需更新。另一评论指出期待后续更新 GB200 配置。

实现拆解

  1. vllm/compilation/passes/fusion/allreduce_rms_fusion.pyFI_ALLREDUCE_FUSION_MAX_SIZE_MB 字典中,为 capability 100 (SM 10.0+) 和 103 (GB300) 的 ws=16 添加 64MiB 条目。
  2. vllm/config/compilation.pyPassConfig.flashinfer_max_size() 中,将 FI_SUPPORTED_WORLD_SIZES 从 [2,4,8] 扩展为 [2,4,8,16],使 ws=16 不再被过滤掉。
  3. benchmarks/kernels/benchmark_fused_collective.py 中,更新 _FI_MAX_SIZES 以包含 ws=16:64MiB;同时增加 FI_BACKENDS 环境变量支持以便多节点测试时只使用 mnnvl,并修正设备选择使用 LOCAL_RANK 而非全局 RANK。
文件 模块 状态 重要度
vllm/compilation/passes/fusion/allreduce_rms_fusion.py 编译优化 modified 5.35
vllm/config/compilation.py 配置层 modified 5.58
benchmarks/kernels/benchmark_fused_collective.py 基准测试 modified 5.99

关键符号

PassConfig.flashinfer_max_size default_fi_allreduce_fusion_max_size_mb setup_flashinfer_workspace main

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

评论区精华

one-shot 表是否需要更新 question

GirasoleY 询问是否应同时更新 _FI_ALLREDUCE_ONE_SHOT_MAX_SIZES_MB 以支持 ws=16。

结论:作者 majunze2001 解释,one-shot 表仅用于单节点 trtllm 后端,ws=16 为多节点场景,无需更新。 · 已解决

GB200 配置更新建议 documentation

GirasoleY 建议作为后续,更新 GB200 的配置数字。

结论:未直接在本次 PR 中处理,留作后续优化。 · 待处理

风险与影响

风险较低:变更仅涉及阈值表和 world_size 列表,核心逻辑未动。但 ws=16 的 64MiB 阈值基于特定硬件(GB300 NVL 4节点×4 GPU)的 benchmark,若在其他拓扑或不同规模下部署,阈值可能非最优,但 fallback 机制(返回 None 则降级)依然有效,不会造成功能失效。

直接影响 DeepSeek-V4 等模型在 TP=16(多节点)场景下的推理性能,使 fused allreduce+RMSNorm 生效,预计可降低延迟 2-8 倍。不影响已有 ws=2/4/8 配置。

阈值仅基于特定硬件 benchmark one-shot 表未同步

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论