Prhub

#23947 [Docs] add cookbook for Ling-2.6 family

原始 PR 作者 JustinTong0323 合并时间 2026-04-29 00:42 文件变更 4 提交数 8 评论 4 代码增减 +562 / -0

执行摘要

新增 Ling-2.6 cookbook 与交互部署选择器

提供Ling-2.6模型系列的部署指南,支持两种变体(flash和1T),覆盖单节点和双节点部署方案,并明确thought模式的设计差异。PR body指出'Both share the 1:7 MLA + Lightning Linear hybrid attention backbone',模型专注于token效率和agent工作负载。

建议阅读此PR以了解如何在SGLang文档中添加新模型cookbook,特别是thinking模式的文档处理和parser兼容性说明。也值得关注review中提出的import问题,确保后续文档PR都包含正确的React import。对于未使用的hardware选择器,应在后续PR中完善。

讨论亮点

review 由 gemini-code-assist[bot] 提出,指出四方面问题:

  • 两个 JSX 组件缺少 useStateuseEffect 的 import,可能导致运行时 ReferenceError。作者未在后续提交中修复,最终合并时仍可见缺少 import。
  • ling-26-1t-deployment.jsx 中存在 dead 的 envPrefix 变量逻辑,条件恒为 false。作者在第6次 commit 中明确移除了该逻辑。
  • ling-26-flash-deployment.jsxhardware 选择在 generateCommand 中未被使用,建议要么移除要么用于显示硬件特定提示。此问题未在后续 commit 中修复。

所有评论均未获得作者回复,但 dead envPrefix 的变化在 commit 历史中可见。

实现拆解

1. 新增Ling-2.6-flash部署选择器组件

ling-26-flash-deployment.jsx 中创建 Ling26FlashDeployment React 组件,提供硬件(H20-3e/H100/H200/B200)、YaRN 上下文长度(128K/256K)、工具调用 parser 和推理 parser 的选项,根据选择生成 sglang serve 命令。

2. 新增Ling-2.6-1T部署选择器组件

ling-26-1t-deployment.jsx 中创建 Ling261TDeployment React 组件,支持单节点(GB300/GB200 TP=4)和双节点(H200/B200 TP=8+PP=2)部署,同样包含工具调用和推理 parser 选项。

3. 撰写cookbook文档

Ling-2.6.mdx 中编写模型介绍、安装指引、部署命令(引用上述组件)、配置提示、thinking 模式说明、性能基准和参考。重点说明了 thinking 模式的默认关闭状态与 Qwen3 parser 的不兼容性。

4. 更新导航配置

docs.json 的 InclusionAI 分组中添加 Ling-2.6 页面入口。

5. 后续修复和润色

根据 review 反馈和自测,移除了 dead envPrefix 逻辑,统一使用 sglang serve CLI,修正 thinking 模式锚点 slug,调整安装章节措辞,删除不准确的内部语调。

文件 模块 状态 重要度
docs_new/src/snippets/autoregressive/ling-26-1t-deployment.jsx 部署组件 added 8.64
docs_new/src/snippets/autoregressive/ling-26-flash-deployment.jsx 部署组件 added 8.32
docs_new/cookbook/autoregressive/InclusionAI/Ling-2.6.mdx 手册页面 added 5.19
docs_new/docs.json 导航配置 modified 1.96

关键符号

Ling261TDeployment Ling26FlashDeployment generateCommand tail generateNodeCmd

关键源码片段

docs_new/src/snippets/autoregressive/ling-26-1t-deployment.jsx core-logic

核心组件,实现 1T 模型的双节点 / 单节点部署命令生成,包含工具调用和推理 parser 逻辑。

// Ling-2.6-1T 部署命令生成
const generateCommand = () => {
  const { hardware, toolcall, reasoning } = values;
  const isSingleNode = hardware === 'gb300' || hardware === 'gb200';  // 辅助函数:追加模型加载优化与可选 parser(注意参数内嵌双引号需转义)
  const tail = (cmd) => {
    let out = cmd;
    out += ` \\n  --model-loader-extra-config '{"enable_multithread_load":"true","num_threads":64}'`;
    if (toolcall === 'enabled') out += ` \\n  --tool-call-parser qwen`;
    if (reasoning === 'enabled') out += ` \\n  --reasoning-parser qwen3`;
    return out;
  };  if (isSingleNode) {
    // 单节点:GB300 或 GB200,TP=4
    let cmd = `sglang serve \\n`;
    cmd += `  --model-path inclusionAI/Ling-2.6-1T \\n`;
    cmd += `  --tp-size 4 \\n`;
    cmd += `  --trust-remote-code \\n`;
    cmd += `  --host 0.0.0.0 \\n`;
    cmd += `  --port \${PORT}`;
    return tail(cmd);
  }  // 双节点:H200 或 B200,TP=8 + PP=2
  const generateNodeCmd = (rank) => {
    let cmd = `sglang serve \\n`;
    cmd += `  --model-path inclusionAI/Ling-2.6-1T \\n`;
    cmd += `  --tp-size 8 \\n`;
    cmd += `  --pp-size 2 \\n`;
    cmd += `  --nnodes 2 \\n`;
    cmd += `  --node-rank ${rank} \\n`;
    cmd += `  --trust-remote-code \\n`;
    if (rank === 0) {
      cmd += `  --host 0.0.0.0 \\n`;
      cmd += `  --port \${PORT} \\n`;
    }
    cmd += `  --dist-init-addr \${MASTER_IP}:\${DIST_PORT}`;
    return tail(cmd);
  };  let output = `# MASTER_IP 为节点 0 的 IP。PORT 和 DIST_PORT 可自行指定。\n\n`;
  output += `# 节点 0:\n`;
  output += generateNodeCmd(0);
  output += `\n\n\n# 节点 1:\n`;
  output += generateNodeCmd(1);
  return output;
};
docs_new/src/snippets/autoregressive/ling-26-flash-deployment.jsx core-logic

flash 模型部署选择器,支持 H20/H100/H200/B200 单节点,并包含 YaRN 上下文长度切换。

// Ling-2.6-flash 部署命令生成(始终单节点 TP=4)
const generateCommand = () => {
  const { yarn, toolcall, reasoning } = values;
  // 注意:hardware 选择未影响命令,所有硬件使用相同参数(可能未来扩展性能提示)
  let cmd = `sglang serve \\n`;
  cmd += `  --model-path inclusionAI/Ling-2.6-flash \\n`;
  cmd += `  --tp-size 4 \\n`;
  cmd += `  --trust-remote-code \\n`;
  cmd += `  --host 0.0.0.0 \\n`;
  cmd += `  --port \${PORT}`;
  if (yarn === 'enabled') {
    // YaRN 扩展到 256K 上下文
    cmd += ` \\n  --context-length 262144`;
    cmd += ` \\n  --json-model-override-args '{"rope_scaling": {"rope_type": "yarn", "factor": 2.0, "rope_theta": 6000000, "partial_rotary_factor": 0.5, "original_max_position_embeddings": 131072}}'`;
  }
  if (toolcall === 'enabled') {
    cmd += ` \\n  --tool-call-parser qwen25`;
  }
  if (reasoning === 'enabled') {
    cmd += ` \\n  --reasoning-parser qwen3`;
  }
  return cmd;
};

评论区精华

缺少 React hooks import (useState, useEffect) 正确性

gemini-code-assist[bot] 指出两个 JSX 组件均缺少 `import React, { useState, useEffect } from 'react';`,可能导致运行时 ReferenceError。

结论:作者未在提交中修复,最终代码仍缺少 import。 · unresolved

dead envPrefix 逻辑 设计

gemini-code-assist[bot] 指出 `envPrefix` 变量逻辑无效,因 `isGB && !isSingleNode` 恒为 false。

结论:作者在第 6 次 commit 中移除了该逻辑。 · 已解决

未使用的 hardware 选择变量 设计

gemini-code-assist[bot] 指出 `ling-26-flash-deployment.jsx` 中 `hardware` 从 `values` 解构但未用于命令生成,建议移除或扩展功能。

结论:作者未在提交中修复,该变量仍未被使用。 · unresolved

风险与影响

主要风险在部署命令的准确性:

  • 两个 JSX 组件都缺少 React hooks import,如果构建环境未自动注入,会导致页面白屏或运行时错误。SGLang 文档站点可能通过全局注入了 React,但标准 JSX 必须显式 import。
  • 1T 模型的 --model-loader-extra-config 参数中的 JSON 需要正确转义,目前使用单引号包裹双引号,但在某些 shell 中可能解析错误。
  • flash 模型的硬件选择未影响命令生成,用户可能误以为切换硬件会改变命令,实际始终相同,造成困惑。
  • 文档中的部署命令未经过实际验证(PR body 标注 flash 命令未验证),可能导致用户无法直接使用。

对用户:提供了 Ling-2.6 模型家族的部署方案,降低新模型使用门槛,尤其是 1T 的 FP8 单节点部署指导很重要。对系统:无运行时影响。对团队:维护文档的额外负担,但沿用现有 cookbook 模式,可复用。影响程度中等,因为文档针对两个新模型,吸引潜在用户。

缺少 React import 未使用硬件选择器 部署命令未验证

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论