Prhub

#34357 Update Qwen3.5 B200 NVFP4 MTP config

原始 PR 作者 faradawn 合并时间 2026-08-12 07:12 文件变更 2 提交数 1 评论 1 代码增减 +8 / -3

执行摘要

Qwen3.5 B200 NVFP4 MTP 改用 tp=2+EP2 配置

PR body 指出:“tp=2 with expert parallelism 2 when MTP is enabled ... outperforms the current tp=4 setting across the concurrency sweep”,最佳配置基于 SemiAnalysisAI/InferenceX#2550 的测试结果。目的是让文档用户直接获得经过实测的更优部署配方。

值得快速阅读:它展示了如何基于外部基准在配置生成器中沉淀经过实测的部署配方,体现 MoE 场景下 TP+EP 组合优于纯 TP 的权衡。如需深入了解 MTP 与并行策略的互动,可结合 InferenceX PR#2550 阅读。

讨论亮点

本 PR 无 review 评论。作者在 Issue 评论区 @JustinTong0323 与 @ishandhanani 请求合并,并说明 “It has been tested as in the description”,即改动已经过实测验证。

实现拆解

  1. 更新 docs/src/snippets/autoregressive/qwen35-deployment.jsx 顶部的 GPU 需求注释,标注 B200 NVFP4 在 MTP 下为 tp=2 ep=2。
  2. 在 generateCommand() 中新增条件分支:当 model=397b、hardware=b200、quantization=fp4 且 speculative=enabled 时,将 hwConfig 覆盖为 { tp: 2, ep: 2, mem: 0.8 },命令拼接逻辑随后会输出 --tp 2 与 --expert-parallel-size 2。
  3. 同步修改 docs/cookbook/autoregressive/Qwen/Qwen3.5.mdx:规格表中 B200 行标注为 4 / 2 + EP2 (MTP),并在部署说明中补充对应描述。
  4. 无新增测试;纯文档与配置生成器改动,CI 通过。
文件 模块 状态 重要度
docs/src/snippets/autoregressive/qwen35-deployment.jsx 部署配置 modified 5.4
docs/cookbook/autoregressive/Qwen/Qwen3.5.mdx 部署文档 modified 2.72

关键符号

generateCommand

关键源码片段

docs/src/snippets/autoregressive/qwen35-deployment.jsx configuration

配置生成器核心逻辑所在,新增了 B200 NVFP4 MTP 场景的 tp/ep 覆盖规则,直接决定用户生成的部署命令。

// 部署命令生成器核心逻辑(整理自 Qwen3.5 配置生成组件):
// 根据用户选择的模型 / 硬件 / 量化 / 推测解码选项,输出 sglang serve 命令。
const generateCommand = () => {
  const { model, hardware, quantization, speculative } = values;  // 1. 先取默认并行配置,若未定义则返回提示语
  let hwConfig = modelConfigs[model]?.[hardware]?.[quantization];
  if (!hwConfig) {
    if (quantization === 'fp4') {
      return '# FP4 requires B200/B300 (Blackwell) and is only available for Qwen3.5-397B-A17B';
    }
    return '# Please select a valid hardware and quantization combination';
  }  // 2. 针对 MTP 场景覆盖并行策略:
  // 35B / 27B 在 H100 BF16 + MTP 时提升至 tp=2
  if ((model === '35b' || model === '27b') && hardware === 'h100' && quantization === 'bf16' && speculative === 'enabled') {
    hwConfig = { ...hwConfig, tp: 2, mem: undefined };
  }
  // 122B 在 H100 FP8 + MTP 时提升至 tp=4
  if (model === '122b' && hardware === 'h100' && quantization === 'fp8' && speculative === 'enabled') {
    hwConfig = { ...hwConfig, tp: 4, mem: undefined };
  }
  // 397B 在 B200 NVFP4 + MTP 时改为 tp=2 + EP=2(TEP2),
  // 基准显示该配置在并发扫描下优于 tp=4(参考 InferenceX PR#2550)
  if (model === '397b' && hardware === 'b200' && quantization === 'fp4' && speculative === 'enabled') {
    hwConfig = { ...hwConfig, tp: 2, ep: 2, mem: 0.8 };
  }  // 3. 根据量化格式选择 checkpoint 名称
  let modelName;
  if (quantization === 'fp4') {
    // AMD MI355X 使用 MXFP4,Blackwell 使用 NVFP4-V2
    modelName = hardware === 'mi355x'
      ? 'amd/Qwen3.5-397B-A17B-MXFP4'
      : 'nvidia/Qwen3.5-397B-A17B-NVFP4-V2';
  } else {
    const suffix = MODEL_SUFFIX[model];
    const quantSuffix = quantization === 'fp8' ? '-FP8' : '';
    modelName = 'Qwen/Qwen3.5-' + suffix + quantSuffix;
  }  // 4. 组装命令:tp > 1 时追加 --tp,ep 存在时追加 --expert-parallel-size
  let cmd = 'sglang serve --model-path ' + modelName;
  if (hwConfig.tp > 1) {
    cmd += ' --tp ' + hwConfig.tp;
  }
  if (hwConfig.ep) {
    cmd += ' --expert-parallel-size ' + hwConfig.ep;
  }
  // …… 其余参数(如 --mem-fraction-static、多节点地址等)继续拼接  return cmd;
};

评论区精华

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

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

风险与影响

改动仅影响 397b + B200 + NVFP4 + MTP 组合,风险面窄。但存在几点需注意:jsx 生成器与 mdx 文档需保持一致,本次已同步;新增 mem=0.8 会改变显存预留比例,需要确认在 tp=2 下比默认配置更合适;配置依据来自外部基准,若 SGLang 的 MoE 并行实现或显存策略变化,该推荐可能过时;用户现有脚本若硬编码了 --tp 4,升级文档后可能意外变更。

对使用 Qwen3.5-397B-A17B NVFP4 部署在 B200 且启用 MTP 的用户,生成的推荐命令将从 tp=4 变为 tp=2 + expert-parallel-size=2,可能带来吞吐提升。对团队而言是文档与配置生成器的日常维护,无运行时代码变更。影响范围限定在特定硬件和量化组合。

配置覆盖影响范围窄 文档与生成器同步性 显存参数覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论