Prhub

#26057 [docs] DeepSeek-V4 cookbook: split Quantization axis, add H100 SGLang FP8

原始 PR 作者 zijiexia 合并时间 2026-05-22 15:52 文件变更 2 提交数 1 评论 1 代码增减 +388 / -93

执行摘要

拆分量化轴,新增 H100 FP8 支持

PR Body 指出原设计将 FP4/FP8 编码进硬件标签(如 H200 (FP8)H200 (FP4)),混淆了两个正交维度,且完全隐藏了 H100 SGLang FP8 路径,用户需在“硬件”和“想运行的检查点”之间做心理翻译。本次分解使硬件行只代表 GPU 型号,量化作为独立选择,并补全 H100 FP8 路径。

值得关注的设计决策是将量化选择从硬件中分离,通过一个简单的 effHw 映射函数保持向后兼容性,避免了大规模重构。这种模式适用于任何多维配置 UI。建议阅读 JSX 中的约束和回退逻辑实现。

讨论亮点

gemini-code-assist[bot] 在示例输出中发现几处排版问题:</think> 后缺空格、every100 应为 every 100Step2 / Step3 / Step4 缺空格。该评论无后续回复,但 PR 已被 wisclmy0611 批准,因此这些小问题可能被视为非阻塞。

实现拆解

  1. 分离量化轴:在 docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsxoptions 对象中新增 quantization 字段,包含 fp4(默认)和 fp8(仅 H100/H200)两项,移除原硬件条目中的量化后缀和独立的 h200-fp4 项。
  2. 定义内部映射函数:新增 effHw(hardware, quantization) 函数,将用户可见的 (硬件, 量化) 组合映射回内部使用的标识(如 h200 + fp4 → h200-fp4h100 + fp8 → h100-fp8),使 HW_SIZE_SPECVERIFIED_RECIPES 等旧常量无需改动即可兼容。
  3. 约束与回退逻辑:新增 FP8_SUPPORTED_HARDWARE 集合以禁用非 Hopper 硬件上的 FP8 选项;扩展 handleRadioChange 以自动回退无效组合(如 FP8 → FP4 在非 Hopper 上、Pro → Flash 在 H100+FP8 上、cp/pd-disagg → low-latency 在 Marlin 或 h100-fp8 上)。
  4. 新增 H100 FP8 规格和基准:在 HW_SIZE_SPEC 中增加 h100-fp8|small 条目,并给出对应的已验证配方(low-latency / balanced / max-throughput),Slug 为 sgl-project/DeepSeek-V4-Flash-FP8
  5. 同步更新 MDX 文档:在 docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx 中更新 Pro 表格行、Hopper 说明、第4.2节的 Reasoning Parser / Tool Calling 示例(包裹在 Accordion 内并替换为真实输出)、重新组织第5节(准确率先于速度,分 Hopper 和 Blackwell 子节),并填入真实 GSM8K / MMLU 及吞吐量数据。
文件 模块 状态 重要度
docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx 部署配置 modified 7.94
docs_new/cookbook/autoregressive/DeepSeek/DeepSeek-V4.mdx 文档 modified 4.65

关键符号

effHw isProDisabledFp8H100 isHopperFp8

关键源码片段

docs_new/src/snippets/autoregressive/deepseek-v4-deployment.jsx core-logic

核心变更:重构命令生成器 UI,分离量化选项,新增 effHw 映射函数和约束逻辑。

// 新增的量化选择轴,仅 Hopper 支持 FP8
const quantizationOptions = {
  name: "quantization",
  title: "Quantization",
  items: [
    { id: "fp4", label: "FP4", default: true },
    { id: "fp8", label: "FP8", default: false, subtitle: "H100/H200 only" },
  ],
};// 将用户 (hardware, quantization) 映射为内部标识,保持旧常量兼容
const effHw = (hardware, quantization) => {
  // H200 + fp8 → "h200" (FP8 路径直接映射到旧 h200)
  // H200 + fp4 → "h200-fp4" (Marlin FP4 路径 )
  if (hardware === "h200") return quantization === "fp8" ? "h200" : "h200-fp4";
  // H100 + fp8 → "h100-fp8" ( 全新标识 )
  // H100 + fp4 → "h100" (Marlin)
  if (hardware === "h100") return quantization === "fp8" ? "h100-fp8" : "h100";
  return hardware;
};// Hopper GPUs 支持 SGLang FP8 重打包
const FP8_SUPPORTED_HARDWARE = new Set(["h100", "h200"]);// Marlin (FP4) 路径不支持 cp 和 pd-disagg 配方
const MARLIN_UNSUPPORTED_RECIPES = new Set(["cp", "pd-disagg"]);
// 注意:原来使用 MARLIN_HARDWARE,现改为 MARLIN_EFFHW,使用 effHw 后的标识
const MARLIN_EFFHW = new Set(["h200-fp4", "h100"]);
const MARLIN_LABEL = { "h200-fp4": "H200 (FP4)", h100: "H100 (FP4)" };// MegaMoE 仅在 Blackwell + DeepEP 配方下可用,禁用集合简化为只含 "h100" 和 "h200"
const MEGAMOE_UNSUPPORTED_RECIPES = new Set(["low-latency", "cp"]);
const MEGAMOE_UNSUPPORTED_HARDWARE = new Set(["h100", "h200"]);
const isMegamoeUnsupported = (vals) =>
  MEGAMOE_UNSUPPORTED_HARDWARE.has(vals.hardware) ||
  MEGAMOE_UNSUPPORTED_RECIPES.has(vals.recipe);

评论区精华

示例输出排版格式问题 documentation

gemini-code-assist[bot] 指出示例输出中 `</think>` 后缺空格、`every100` 应为 `every 100`、`Step2`/`Step3`/`Step4` 缺空格。

结论:PR 已被批准,未回复。推测视为非阻塞问题。 · unresolved

风险与影响

变更仅涉及文档和交互式命令生成器的 JSX 代码,不修改引擎逻辑,因此回归风险低。主要风险是:(1)JSX 中新增的约束逻辑(如不同量化+硬件组合的禁用/回退)可能存在遗漏的组合,导致用户看到被禁用但不应禁用的选项,或未正确回退。(2)新增的 H100 FP8 基准数据可能在未来版本中过时,但文档本身将随时间更新。当前无对应的 JSX 单元测试覆盖。

对用户:DeepSeek-V4 部署页面 UI 更清晰,量化选择直观;H100 用户可获得 FP8 路径的部署命令和性能数据。对系统:无运行时影响。对团队:文档维护成本略有增加(需同步更新映射表和基准数据),但结构更清晰,便于后续扩展新硬件或量化方案。

缺少测试覆盖 UI 配置复杂度增加

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论