Prhub

#33556 Add Ling-3.0-flash cookbook

原始 PR 作者 JustinTong0323 合并时间 2026-08-05 22:53 文件变更 8 提交数 40 评论 4 代码增减 +990 / -19

执行摘要

新增 Ling-3.0-flash Cookbook 页面及多硬件配方,并重构 HiCache 控件

PR body 指出需要为 inclusionAI/Ling-3.0-flash 增加 Cookbook 页面。该模型是 124B 总参/5.1B 激活的混合注意力 MoE,默认开启思考模式并支持结构化工具调用,但社区缺乏一键部署指引。通过提供经过验证的 recipes 和交互式 Playground,降低用户上手门槛。

值得关注 _playground.jsx 中 HiCache 轴的状态继承设计(deriveFromBase + hasOverride),它解决 cookbook 中已验证配方与用户自定义之间的冲突;ling-3.0-flash.jsx 的 cells 矩阵是模型部署配置的典型样例,可作为新模型接入 Cookbook 的模板。由于不涉及引擎代码,引擎开发者可跳过。

讨论亮点

本 PR 唯一人工审核是 zijiexia 的 APPROVED(空 body),无 review 评论。Issue 评论仅包含 Mintlify 预览部署通知、Gemini Code Assist 停止服务的提醒以及两次 /rerun-failed-ci 指令。关键的权衡体现在 commit 信息中:FP8 配方从 TP2 调整为 TP+EP(原因见 ling-3.0-flash.jsx 中的注释:TP 分片需要 (768/TP)%128==0 仅 TP2 合格,EP 按整专家切分可用整节点);移除 server 级 --default-chat-template-kwargs '{"enable_thinking":true}' 工作区,因 checkpoint 模板和 ling3 reasoning parser 均默认开启思考;HiCache 轴重构为继承 base 而非无条件 strip。

实现拆解

  1. 新增模型配置与基准数据:创建 docs/src/snippets/configs/inclusionAI/ling-3.0-flash.jsx,定义模型名、硬件列表、量化(BF16/FP8)、策略(Low-Latency/High-Throughput/HiCache+Mooncake)、placeholders、Docker 镜像、curl 和 benchmark 命令,以及按 match 元组索引的 cells 数组,每个 cell 携带 flagsenvverified 状态。同时新增 ling-3.0-flash-benchmarks.jsx 记录各 cell 的 GSM8K 准确率(来自 PR #33561 运行时)。
  2. 编写 Cookbook 页面:新增 docs/cookbook/autoregressive/InclusionAI/Ling-3.0-flash.mdx,导入 Deployment/Playground 组件,包含模型介绍、配置提示(TP 与 EP 选择、思考模式、NEXTN、YaRN 256K、Mem fraction 等)、推理与工具调用示例,以及 HiCache+Mooncake 的部署说明。
  3. 重构 Playground 的 HiCache 轴:在 docs/src/snippets/_playground.jsx 中,将 HiCache 轴状态从固定默认值改为从 base cell 派生(新增 deriveFromBase),apply 仅当用户显式覆盖(hasOverride)时才重写 flags/env,并支持后端声明的 requiredFlags/requiredEnv 合并;render 增加 hasAutoBackend 判断,使后端选择可继承或显式。同时新增 dockerHostNetworkWhen 回调支持按配置决定是否使用 host 网络。
  4. 扩展部署组件与导航_deployment.jsx 在硬件目录加入 H20-3e 与 H800,并支持 dockerHostNetworkWhen 回调;docs/docs.json 将新页面加入 InclusionAI 分组;intro.mdx 将首页卡片指向新页面;Ring-2.6-1T.mdx 移除已不再需要的 tag: NEW
  5. 验证与配套:无新增测试文件,但通过 node docs/scripts/check_cookbook_configs.mjs 校验配置,并在 B200/GB300/H200 上完成 BF16/FP8 的 GSM8K 全量或部分验证;FP8 配方采用 TP+EP 以规避 blockwise E4M3 的 TP 分片限制,部分硬件(H20-3e/H800/H100)保持 verified: false
文件 模块 状态 重要度
docs/src/snippets/configs/inclusionAI/ling-3.0-flash.jsx 部署配置 added 7.5
docs/src/snippets/_playground.jsx 交互组件 modified 7.81
docs/src/snippets/configs/inclusionAI/ling-3.0-flash-benchmarks.jsx 基准数据 added 6.74
docs/cookbook/autoregressive/InclusionAI/Ling-3.0-flash.mdx 页面内容 added 5.39
docs/src/snippets/_deployment.jsx 部署组件 modified 5.07
docs/docs.json 导航配置 modified 2.36
docs/cookbook/autoregressive/intro.mdx 入口页面 modified 2.31
docs/cookbook/autoregressive/InclusionAI/Ring-2.6-1T.mdx 文档清理 modified 1.77

关键符号

hicache.deriveFromBase hicache.apply hicache.render dockerHostNetworkWhen

关键源码片段

docs/src/snippets/configs/inclusionAI/ling-3.0-flash.jsx core-logic

新增的模型配置,定义了全部硬件 / 量化 / 策略的部署 cells 和 Playground 功能,是 PR 的核心产物。

// Ling-3.0-flash Cookbook 配置(节选)
// 每个 cell 通过 match 元组唯一标识,flags 为实际启动参数,
// verified 表示是否经过完整 GSM8K 门禁验证。
export const config = {
  // 三种部署策略:低延迟(NEXTN 投机解码)、高吞吐(关闭投机)、HiCache+Mooncake
  strategies: [
    { id: "low-latency", label: "Low-Latency" },
    { id: "high-throughput", label: "High-Throughput" },
    { id: "hicache", label: "HiCache + Mooncake" },
  ],  // HiCache 卡片配置:声明默认后端与必选 flags/env,
  // 组件将这些与选中 cell 的 flags 合并(见 _playground.jsx 的 hicache 轴)
  playgroundFeatures: {
    hicache: {
      defaultBackend: "mooncake",
      requiredFlags: [
        "--mamba-scheduler-strategy extra_buffer", // 混合 KDA 调度必需
        "--enable-cache-report",
      ],
      backends: [
        {
          id: "mooncake",
          label: "Mooncake",
          flags: [
            "--hicache-storage-backend-extra-config '{\"hicache_storage_pass_prefix_keys\":true}'",
          ],
          env: [
            "MOONCAKE_MASTER={{MOONCAKE_MASTER}}",
            "MOONCAKE_PROTOCOL=tcp",
            "MC_MS_AUTO_DISC=0",
            "MOONCAKE_DEVICE=",
            "MOONCAKE_TE_META_DATA_SERVER={{MOONCAKE_METADATA_SERVER}}",
            "MOONCAKE_GLOBAL_SEGMENT_SIZE=0",
          ],
        },
      ],
    },
  },  // 示例 cell:B200 + BF16 + Low-Latency(已验证)
  cells: [
    {
      match: { hw: "b200", variant: "default", quant: "bf16", strategy: "low-latency", nodes: "single" },
      verified: true,
      env: ["SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1"],
      flags: [
        "--model-path {{MODEL_NAME}}",
        "--tp 4", // 141GB 级 GPU 用 TP4
        "--context-length 262144", // YaRN 扩展到 256K
        "--speculative-algorithm NEXTN", // 内置 MTP 投机解码
        "--json-model-override-args '{\"rope_scaling\":{\"rope_type\":\"yarn\",\"factor\":2.0,...}}'",
        "--mem-fraction-static 0.8", // 为 CUDA graphs 留出余量
        "--host {{HOST_IP}}",
        "--port {{PORT}}",
      ],
    },
    // 其余 cell 遵循相同结构,仅在 hw/quant/strategy 与 flags 上变化
  ],
};
docs/src/snippets/_playground.jsx core-logic

修改了 HiCache 轴状态继承逻辑,是本次改动中唯一的交互逻辑变更,影响所有使用 Playground 的页面。

// HiCache 轴的核心逻辑(重构后)
// 通过 deriveFromBase 提取 base cell 中的 HiCache 状态,
// apply 仅在用户显式覆盖时才重写 flags/env,避免破坏已验证配方。
hicache: {
  initState: () => ({ enable: null, backend: null, writePolicy: "auto" }),  deriveFromBase: (cell, fc, h) => {
    const flags = (cell && cell.flags) || [];
    return {
      enable: h.hasFlag(flags, "--enable-hierarchical-cache"),
      backend: h.findFlagArg(flags, "--hicache-storage-backend"),
      writePolicy: h.findFlagArg(flags, "--hicache-write-policy") || "auto",
    };
  },  apply: ({ flags, env, value, fc, sel, h, derived }) => {
    if (fc.excludesHw && sel && fc.excludesHw.includes(sel.hw)) return { flags, env };
    // Deploy 面板托管启用开关时(showWhen),base 已携带完整配方,
    // 这里只修改暴露的两个旋钮,避免静默更改 ratio/layout/io-backend。
    if (typeof fc.showWhen === "function") {
      const set = (name, val) => {
        flags = h.stripFlagsByFirstToken(flags, [name]);
        if (val) flags = h.insertBeforeTail(flags, [`${name} ${val}`]);
      };
      if (value.backend) set("--hicache-storage-backend", value.backend);
      if (value.writePolicy && value.writePolicy !== "auto") {
        set("--hicache-write-policy", value.writePolicy);
      }
      return { flags, env };
    }    // 关键重构:只有当用户改动任一开关时才进入重写分支,
    // 否则原样返回 base(保证未触碰的配方字节级不变)。
    const hasOverride = value.enable !== null
      || value.backend !== null
      || (value.writePolicy && value.writePolicy !== "auto");
    if (!hasOverride) return { flags, env };    // 收集所有需要剥离的 flag/env 前缀,包括后端自定义的 requiredXXX
    const backendOptions = fc.backends || [];
    const ownedHeads = [
      "--enable-hierarchical-cache", "--hicache-ratio", "--hicache-size",
      "--hicache-write-policy", "--hicache-mem-layout", "--hicache-io-backend",
      "--hicache-storage-backend", "--hicache-storage-prefetch-policy",
      "--hicache-storage-backend-extra-config",
      ...((fc.requiredFlags || []).map((f) => f.split(/\s/)[0])),
      ...backendOptions.flatMap((o) => (o.flags || []).map((f) => f.split(/\s/)[0])),
    ];
    const ownedEnvKeys = [
      ...(fc.requiredEnv || []),
      ...backendOptions.flatMap((o) => o.env || []),
    ].map((e) => e.split("=")[0]);
    flags = h.stripFlagsByFirstToken(flags, ownedHeads);
    if (ownedEnvKeys.length) env = h.stripEnvByPrefix(env, ownedEnvKeys);    // 状态计算:显式值优先,否则继承 base 或配置默认
    const enabled = value.enable !== null
      ? value.enable : !!(derived && derived.enable);
    const backend = value.backend !== null
      ? value.backend
      : ((derived && derived.backend) || fc.defaultBackend || null);    if (enabled) {
      // AMD 特判与 flags 组装(与 base 相同,此处省略具体分支)
      // ... 最终通过 h.insertBeforeTail 追加生成的 flags/env
    }
    return { flags, env };
  },  // render 中新增 hasAutoBackend,决定后端选择是否可继承:
  // 若存在 id:null 的 auto 选项,则默认显示继承而非 derived 值
  render: ({ axisId, value, setValue, fc, base, s, renderChip, renderSelect, derived }) => {
    // ...
    const hasAutoBackend = (fc.backends || []).some((o) => o.id === null);
    const backend = value.backend !== null
      ? value.backend
      : (hasAutoBackend ? null : ((derived && derived.backend) || fc.defaultBackend || null));
    // ...
  },
},

评论区精华

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

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

风险与影响

_playground.jsx 的 HiCache 轴重构改变了状态继承语义,虽然 hasOverride 保护了未触摸的用例,但所有现有 cookbook 页面都会走新逻辑,若某个页面的 fc.backends 配置未声明 id: null 的 auto 选项,render 中的 hasAutoBackend 为 false 时会回退到 derived 或 defaultBackend,可能与预期不符;apply 中新增的 ownedEnvKeys 剥离会影响声明了 requiredEnv 的页面。_deployment.jsx 新增的 dockerHostNetworkWhen 若配置错误会导致容器使用 host 网络而暴露端口,需依赖配置正确性。此外 ling-3.0-flash-benchmarks.jsx 中 GB300 两个 cell 的 GSM8K 数值留空(TODO),且 H20-3e/H800/H100 的 FP8 与 BF16 细胞均未验证,页面会展示 unverified 标识,可能影响用户对配方的信任。

对用户:获得一份开箱即用的 Ling-3.0-flash 部署指引,支持 6 类硬件和 3 种策略,降低了新模型试错成本。对文档系统:共享组件 _playground.jsx_deployment.jsx 的改动会反映到所有使用它们的 cookbook 页面,但设计上保持向后兼容(默认继承 base),预期无破坏。对项目:新增 InclusionAI 模型的支持矩阵,为后续类似混合 MoE 模型提供可复用的配置模式。

共享组件变更 未验证硬件单元 基准数据不完整 缺少测试配套

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论