Prhub

#35065 docs(cookbook): Qwen3.8-27B deployment grid rework

原始 PR 作者 Jiminator 合并时间 2026-08-17 15:56 文件变更 3 提交数 12 评论 24 代码增减 +263 / -174

执行摘要

Qwen3.8-27B 部署网格基于实测数据重构

PR body 声明其动机是“Reworks the Qwen3.8-27B deployment matrix around measured data from an RTX 5090 (32GB) and a 7x RTX PRO 6000 Blackwell (96GB) node”,即让部署配置以实测为准而非假设。同时依赖 #35064 修复的 ratio calculator,否则页面会为每种推测配置输出错误的 --mamba-full-memory-ratio。此外,针对 32GB 小显存卡,“EAGLE carries --enable-linear-replayssm-spec on SM120/SM121 ... on a 32GB card that is the difference between booting and a negative total_rest_memory”,说明部分配置是为了让模型能在 32GB 卡上启动。

值得精读。该 PR 展示了如何用实测数据驱动部署文档、如何通过 overlayDims 避免组合爆炸、以及如何管理未验证组合的表达。review 中关于 --mamba-backend triton no-op、FlashInfer GDN prefill 在 SM100 上与 bf16 状态池的关系等讨论,对理解 sglang 的 GDN/SSM 路径有实质帮助。文档中关于状态槽大小、ReplaySSM D=0 等细节的修正也值得借鉴。

讨论亮点

zijiexia--kv-cache-dtype fp8_e4m3 在所有 cell 固定需要把 sign-off 记录在 PR body——对 NVFP4 是 no-op,对 BF16/FP8 是真实精度取舍。

Jiminator:已在 PR body 记录,并保留 12 个 cell 的固定。

zijiexia:overlay 默认值会改变未测量平台的命令,tier 默认 high-throughput 会让 h200/gb300 等平台默认输出 --mamba-radix-cache-strategy extra_buffer_lazy,与 gb300 cell 注释矛盾。

Jiminator:将 tier 默认改为 low-latency(extra_buffer,引擎默认),ssmDtype 本就默认 float32,未改动选择语义不变。

zijiexia_deployment.jsx 引擎改动风险高,可能影响其他 cookbook,建议单独 PR 或避免;并建议清理多余注释。

Jiminator:最终撤销 selection-aware badge(#35112 关闭),回归静态 verified 布尔,不依赖引擎改动。

zijiexia(inline):--mamba-backend triton --linear-attn-backend triton 是 no-op(ServerArgs 默认已是 triton),建议删除。

Jiminator:已从所有 cell 删除,验证过不改变命令语义。

实现拆解

  1. 配置结构重构:在 docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx 中,用 matchDims(variant/quant/nodes)替换原来的 variantsquantizationsstrategies 等独立字段,并新增 overlayDims 数组,将推测解码(None/EAGLE/DSPARK)、Serving Strategy(Low-Latency/High-Throughput)、Mamba SSM Dtype(float32/bfloat16)作为 overlay 行叠加到匹配的 cell 上,避免 3 x 2 组合爆炸(12 cell 变 72)。overlay 默认值被设置为与引擎默认一致(tier 默认 low-latencyssmDtype 默认 float32),保证未改动选择的命令与各平台原始配方语义一致。
  2. 统一 KV 缓存精度策略:所有 12 个 cell 显式固定 --kv-cache-dtype fp8_e4m3。对 NVFP4 检查点这是透明 no-op(其 kv_cache_quant_algo: FP8 已让 auto 解析到 fp8_e4m3);对 BF16/FP8 检查点则是容量/质量权衡——kv_bytes_per_token 从 65.5 KB 降到 32.8 KB、KV 池翻倍,但这些检查点没有 fp8 KV 校准。PR body 记录了这一 sign-off 和唯一的准确率数据点(GB300 GSM8K A/B:96.82% bf16-KV vs 96.44% fp8-KV)。
  3. 校准 RTX 5090 / RTX PRO 6000 单元:RTX 5090 cell 固定 bs=1 调度(--max-running-requests 1 限制准入、--cuda-graph-max-bs 1 保护 token 池),并按 EAGLE/DSPARK 与 dtype 组合分别给出 --mem-fraction-static 修正(EAGLE fp32 0.94 / bf16 0.92,DSPARK fp32 0.92 / bf16 0.90);删除 8192 prefill chunk(实测更差),删除 --mamba-backend triton --linear-attn-backend triton(引擎默认已是 triton,验证过 no-op)。
  4. 更新 cookbook 文档Qwen3.8-27B.mdx 新增部署面板下的验证范围 <Note>(ISL 8192 / OSL 1024 / 并发 1 仅覆盖 RTX 5090 与 RTX PRO 6000),新增 --mamba-ssm-dtype 配置提示(状态槽 153.9 MB fp32 vs 78.4 MB bf16、速度非单向收益、ReplaySSM fp32 auto-select 与 drift 警告),并修正 DSpark 的 D 推导(--speculative-dspark-block-size + 1,默认 D=8)与 ReplaySSM 的 D=0 规则。
  5. 标记 benchmark 数据不可复用qwen3.8-27b-benchmarks.jsx 的行仍 key 在已删除的 strategy 维度上,且对应 gb300 high-throughput cell 已删除,文件头新增 STRUCTURALLY UNMATCHED 说明,仅作测量来源保留,禁止直接 re-key。配套还删除了 variants/quantizations/nodesOptions 等遗留字段,check_cookbook_configs.mjs 校验通过。
文件 模块 状态 重要度
docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx 部署配置 modified 7.74
docs/src/snippets/configs/Qwen/qwen3.8-27b-benchmarks.jsx 基准数据 modified 4.88
docs/cookbook/autoregressive/Qwen/Qwen3.8-27B.mdx 文档页面 modified 4.59

关键符号

config matchDims overlayDims flags stripPrefixes disabled

关键源码片段

docs/src/snippets/configs/Qwen/qwen3.8-27b.jsx core-logic

核心配置文件,重做部署矩阵,引入 matchDims/overlayDims,承载所有测量数据与平台约束。

// 推测解码 overlay 行:EAGLE / MTP 选项。
// 该行不参与 cell 匹配,而是叠加在已匹配的 cell 上,避免组合爆炸。
{
  id: "eagle",
  label: "EAGLE",
  // 32GB 的 RTX 5090 上,MTP 头只有搭配 NVFP4 权重才放得下,
  // 因此其它量化组合下直接禁用该选项。
  disabled: (sel) => sel.hw === "rtx5090" && sel.quant !== "nvfp4",
  disableReason:
    "On the 32GB RTX 5090 the MTP head only fits on top of the NVFP4 weights",
  // EAGLE 与 DSPARK 在 5090 上需要的 mem-fraction 修正方向相反:
  // EAGLE 启动时饿死 state pool,需要调高;DSPARK 饿死运行时激活,需要调低。
  // 因此每个选项先移除 cell 里的固定值,再重新写入自己的实测值。
  stripPrefixes: (sel) =>
    sel.hw === "rtx5090" ? ["--mem-fraction-static"] : [],
  flags: (sel) => [
    "--speculative-algorithm EAGLE",
    "--speculative-num-steps 3",
    "--speculative-eagle-topk 1",
    "--speculative-num-draft-tokens 4",
    // ReplaySSM 仅在有实测的 SM120/SM121(rtx5090/rtx6000/dgx-spark)上启用;
    // 它把 D 的中间 SSM 状态放到固定环上,是 MTP 能塞进 32GB 的关键。
    // h200(SM90)和 gb300(SM103)保持普通 MTP 配方。
    ...(["rtx5090", "rtx6000", "dgx-spark"].includes(sel.hw)
      ? ["--enable-linear-replayssm-spec"]
      : []),
    // 5090 上的 mem-fraction 实测:bf16 状态 0.92 即可,fp32 需要 0.94
    // (fp32 槽位 146.81 MiB,bf16 槽位 74.81 MiB)。
    ...(sel.hw === "rtx5090"
      ? [sel.ssmDtype === "float32"
          ? "--mem-fraction-static 0.94"
          : "--mem-fraction-static 0.92"]
      : []),
  ],
}

评论区精华

fp8 KV 全 cell 固定的 sign-off 正确性

zijiexia 要求将 `--kv-cache-dtype fp8_e4m3` 全 cell 固定的 sign-off 记录在 PR body,因为对 BF16/FP8 检查点这是无校准的精度取舍。

结论:Jiminator 在 PR body 记录 sign-off 并保留配置;唯一准确率数据点(GB300 GSM8K A/B)被引用。 · 已解决

overlay 默认值需等于引擎默认 设计

zijiexia 指出 `tier` 默认 high-throughput 会改变 h200/gb300 等未测量平台的命令,并可能导致 gb300 cell 注释失效。

结论:Jiminator 将 `tier` 默认改为 low-latency(引擎默认),`ssmDtype` 本就默认 float32;未改动选择语义不变。 · 已解决

benchmarks 文件结构不匹配 documentation

zijiexia 建议在 `qwen3.8-27b-benchmarks.jsx` 中注明其行 key 在已删除的 strategy 维度,避免被误读为可复用。

结论:文件头新增 `STRUCTURALLY UNMATCHED` 注释,明确仅作测量来源。 · 已解决

RTX 5090 单并发配方的合理性 设计

zijiexia 质疑 `--max-running-requests 1` 等 bs=1 pins 作为发布配方与 cell 注释矛盾,且使 Serving Strategy 行无意义。

结论:Jiminator 保留 pins,更新注释说明这是 bs=1 配方,并解释 `--cuda-graph-max-bs 1` 对 token 池的保护;Serving Strategy 行仍作为 S 旋钮保留。 · 已解决

引擎改动应隔离到单独 PR 设计

zijiexia 建议将 `_deployment.jsx` 的 selection-aware verification 改动移到单独 PR,避免影响其他 cookbook。

结论:Jiminator 撤销引擎改动,关闭 #35112,返回静态 `verified` 布尔。 · 已解决

风险与影响

  • 精度风险:BF16/FP8 检查点固定 fp8 KV 无校准,唯一准确率数据点(GB300 GSM8K)显示 96.82%→96.44% 的下降。文档虽已记录,但容量受限用户可能忽略此取舍。
  • RTX 5090 单并发限制--max-running-requests 1 意味着发布配方只支持单并发;用户若提高并发,内存可能不足,且 Serving Strategy 行在高并发下才真正生效。文档已提示需同时调整 pins,但仍有被误用风险。
  • benchmark 数据不可复用qwen3.8-27b-benchmarks.jsx 的结构性不匹配已用注释保护,但若后续 re-key 未重新测量,会将数字绑定到不同命令上。
  • 未测量平台的非默认组合:h200/gb300 等平台的非默认 overlay 选择(如 EAGLE on h200)未经验证,文档 Note 只覆盖 RTX 5090 / RTX PRO 6000,存在用户使用未验证组合的风险。
    • 影响范围限于文档 cookbook,无运行时代码变更,因此风险主要面向文档受众而非系统运行。

对用户:部署指南更准确,特别是 RTX 5090 / RTX PRO 6000 用户;h200/gb300 等平台默认命令不变,但非默认 overlay 组合被标记为未测量。对团队:文档维护流程更加数据驱动,且因 #35112 撤销而避免了引擎改动对其他 cookbook 的影响。对系统:无运行时影响,纯配置与文档变更。整体影响范围中等,集中在部署文档领域。

fp8 KV 精度权衡 RTX 5090 单并发限制 benchmarks 数据不可复用 未测量平台的非默认 overlay 组合

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论