Prhub

#26384 [Docs] GLM-4.7 cookbook: add NVIDIA Blackwell (B200, GB200) + NVFP4 sections

原始 PR 作者 thanhhao98 合并时间 2026-06-02 11:47 文件变更 2 提交数 4 评论 5 代码增减 +529 / -45

执行摘要

GLM-4.7 文档新增 Blackwell GPU 和 NVFP4 量化支持

当前 GLM-4.7 cookbook 仅以 AMD GPU 为一等目标,但 nvidia/GLM-4.7-NVFP4 权重已是 Blackwell 上推荐的服务方式;同时现有文档中的 --reasoning-parser glm47 在 v0.5.12 中是无效选项(仅 glm45 可用于推理),导致用户直接复制命令会报 argparse 错误。

该 PR 值得精读,尤其是 glm-47-deployment.jsx 中 SUPPORT 矩阵驱动的约束逻辑,是一种将硬件兼容性规则集中管理、自动 fallback 的可复用文档组件设计模式。对于负责部署指南和交互式命令生成器的工程师具有参考价值。建议在类似文档场景中推广。

讨论亮点

在 Review 中,gemini-code-assist[bot] 提出了四项关键反馈:

  • DP/TP 配置错误(高优先级):当启用 Data Parallelism(DP)时,原实现将 --tp--dp 均设为总 GPU 数,导致需要 gpus×gpus 个物理 GPU 的不合理配置。建议将物理 GPU 在 TP 和 DP 之间分割(如 dp=2,tp=总GPU数/dp)。后续提交已采纳该建议,重构了 DP/TP 分配逻辑。
  • 文档推理解析器名错误(中优先级):§1 中一处文字引用 glm47 推理解析器应改为 glm45。该处已修正。
  • 冗余条件检查(中优先级):AMD 代码块中已通过 if (isAMD) 进行分支,内部额外判断 !isNvidiaBlackwell 冗余,建议移除。最终提交已清理该冗余检查。
    所有讨论均已解决,最终版本获得了维护者(zijiexia)的批准。

实现拆解

  1. 更新 cookbook MDX 文档(GLM-4.7.mdx):调整 Model Introduction 描述,加入 NVFP4 权重说明;新增 §3.2 硬件×权重类型兼容性表格;添加 Docker 镜像表(按硬件平台区分);新增基准测试场景(Blackwell B200/GB200 的 Throughput 4K/1K 结果);修复所有出现 --reasoning-parser glm47 引用为 glm45
  2. 重构部署命令生成器 JSX 组件(glm-47-deployment.jsx):添加 B200(默认)、GB200、H200 硬件选项;添加 NVFP4 量化选项(默认);新增“Number of GPUs”选择器(2/4/8,默认4);定义 SUPPORT 硬件兼容性矩阵,并通过 quantSupportedallowedTpsfirstSupportedQuant 辅助函数驱动 UI 控件的有效范围,当用户选择不支持的量化或 TP 时静默 fallback 到最近的有效值。
  3. 修复命令生成逻辑:根据硬件和量化类型计算 TP 值;当启用 DP 时,将 GPU 总数合理分配给 TP 和 DP(避免 TP × DP > GPU 数);当选择 Blackwell + NVFP4 时自动添加 --mem-fraction-static 0.85,避免 CUDA graph 捕获 OOM;AMD 路径保持已有的固定 TP 命令形状。
  4. 添加验证数据:在 cookbook 中插入 GSM8K 准确度测试结果(B200 0.946,GB200 0.951)和 Throughput 性能数据,供用户参考。
文件 模块 状态 重要度
docs_new/src/snippets/autoregressive/glm-47-deployment.jsx 文档组件 modified 8.2
docs_new/cookbook/autoregressive/GLM/GLM-4.7.mdx 文档内容 modified 5.05

关键符号

handleRadioChange generateCommand quantSupported allowedTps firstSupportedQuant

关键源码片段

docs_new/src/snippets/autoregressive/glm-47-deployment.jsx core-logic

部署命令生成器的核心组件,通过 SUPPORT 矩阵动态约束硬件、量化和 TP 组合,并实现自动 fallback,是本次变更的程序逻辑核心。

// 硬件支持矩阵 — 单一事实源,定义各硬件支持的量化类型及对应的 TP 容量
// hardware -> quantization -> allowed TP list
const SUPPORT = {
  b200: { nvfp4: [2, 4, 8], fp8: [4, 8], bf16: [8] },
  gb200: { nvfp4: [2, 4], fp8: [4] },
  h200: { fp8: [8], bf16: [8] },
  mi300x: { fp8: [2, 4, 8], bf16: [4, 8] },
  mi325x: { fp8: [2, 4, 8], bf16: [4, 8] },
  mi355x: { fp8: [2, 4, 8], bf16: [4, 8] },
};// 检查给定硬件 (hw) 是否支持某量化 (q)
const quantSupported = (hw, q) => Boolean(SUPPORT[hw] && SUPPORT[hw][q]);// 获取给定硬件 + 量化下允许的 TP 值列表
const allowedTps = (hw, q) => (SUPPORT[hw] && SUPPORT[hw][q]) || [];// 为硬件找到第一个支持的量化类型(用于 fallback)
const firstSupportedQuant = (hw) => Object.keys(SUPPORT[hw] || {})[0] || 'fp8';const handleRadioChange = (optionName, value) => {
  setValues(prev => {
    const next = { ...prev, [optionName]: value };
    // 当硬件或量化发生变更时,确保选择组合仍在支持矩阵内
    if (optionName === 'hardware' || optionName === 'quantization') {
      // 若当前量化不支持,自动 fallback 到该硬件下第一个支持的量化
      if (!quantSupported(next.hardware, next.quantization)) {
        next.quantization = firstSupportedQuant(next.hardware);
      }
      // 若当前 GPU 数量不在该组合的允许 TP 列表中,调整成有效值
      const tps = allowedTps(next.hardware, next.quantization);
      if (tps.length && !tps.includes(parseInt(next.gpus, 10))) {
        next.gpus = String(tps.includes(4) ? 4 : tps[0]);
      }
    }
    return next;
  });
};

评论区精华

DP/TP 配置错误 正确性

gemini-code-assist[bot] 指出当 DP 启用时,原实现将 `--tp` 和 `--dp` 都设为 total GPUs,导致需要 gpus×gpus 个物理 GPU。建议分割物理 GPU,例如 dp=2,tp= 总 GPU 数 /2。

结论:后续提交已采纳,重构了 DP/TP 分配逻辑。 · 已解决

推理解析器引用错误 正确性

gemini-code-assist[bot] 指出 §1 中 `glm47` 推理解析器应改为 `glm45`。

结论:已修正。 · 已解决

冗余条件检查 设计

gemini-code-assist[bot] 指出 AMD 块内部 `!isNvidiaBlackwell` 检查冗余,因为外层已判断 `isAMD`。

结论:已移除。 · 已解决

风险与影响

  • 配置矩阵覆盖不完整:SUPPORT 矩阵若遗漏某些硬件+量化组合,可能导致生成的命令无效或缺少必要参数(如 --mem-fraction-static),需要与实测环境持续同步。
  • AMD 路径回归:AMD 路径的 TP 固定值和非 Blackwell 的 DP/TP 分割逻辑被重写,若未覆盖所有 AMD 子型号(MI300X/MI325X/MI355X),可能产生非最优或错误配置。
  • 基准测试结果时效性:文档中嵌入的 GSM8K 和 Throughput 数字可能随 SGLang 版本或驱动更新而过时,应注明测试环境版本。
  • 推理解析器隐式依赖:修复 --reasoning-parser glm47glm45 依赖于推理解析器注册表中的名称不变,若 future release 注册名称变化,文档可能再次失效。
  • 用户:Blackwell (B200/GB200) 用户现在可直接获取有效的部署命令和推荐参数,降低配置门槛;AMD 用户享有一致的文档体验,且 DP/TP 配置错误被修复。
  • 系统:无运行时影响,纯文档和前端组件变更。
  • 团队:维护者需要在新硬件或权重类型出现时同步更新 SUPPORT 矩阵和表格,文档组件化降低了出错概率。
配置矩阵覆盖不完整 AMD 路径回归 基准测试结果时效性 推理解析器隐式依赖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论