Prhub

#27248 [Doc][CPU]Update Cookbook with Xeon support info

原始 PR 作者 ZailiWang 合并时间 2026-06-06 13:39 文件变更 26 提交数 23 评论 22 代码增减 +443 / -121

执行摘要

在 cookbook 中更新 Xeon CPU 支持信息

PR 描述明确说明:“Adding Xeon support info and example commands into cookbook”,目的是为 Xeon CPU 用户提供正确的部署指导和命令示例。

建议阅读该 PR,特别是 disabledWhencondition() 的设计模式,展示了如何优雅地组织硬件依赖的 UI 选项。同时注意交叉检查多个模型页面的一致性,确保命令参数的准确性。

讨论亮点

Review 由 zijiexia 主导,指出了 4 个关键问题:

  • DeepSeek-V3 TP 值:当选择 Xeon 时,组件仍输出 --tp 8,而实际应为 --tp 6(对应 2 路 Xeon 的 6 个 SNC)。作者已修复。
  • DeepSeek-V3 FP4 处理:Xeon 上 FP4 未被禁用,导致错误提示指向 B200/MI355X(误导 CPU 用户)。作者修改为灰色禁用。
  • DeepSeek-V3.1 模型选项:非 INT8 模型在 Xeon 下仍可选,作者解释 Xeon 支持 FP8 模型,因此保持可选。reviewer 认可。
  • Qwen3-Next FP8 一致性:该页面将 Xeon 的 fp8 设为 false,而其他 Qwen 页面设为 true。作者修正以对齐。
    此外,gemini-code-assist[bot] 提出了自动化建议(如切换硬件时自动重置量化),部分被采纳。

实现拆解

实现分为以下步骤:

  1. 更新交互式部署配置器(JSX 组件):在 docs_new/src/snippets/autoregressive/ 下的 13 个组件中新增 { id: 'xeon', label: 'XEON', default: false } 硬件选项。
  2. 禁用 CPU 不支持的策略:对 DP、EP、MTP 策略项添加 disabledWhen: (v) => v.hardware === 'xeon' 条件,并在 UI 上显示禁用原因。
  3. 调整量化选项:对 R1 和 V3.1 组件,新增 int8 量化选项(仅 Xeon 可用),并禁用 FP4(CPU 不支持)。在 Qwen3.5 组件中,Xeon 下默认选择 BF16,禁用 FP8 推荐。
  4. 修正生成命令:在 generateCommand 中添加 Xeon 分支:TP 值设为 6(而非 GPU 的 8),追加 --device cpu--disable-overlap-schedule,并移除 --enable-symm-mem 等不适用于 CPU 的选项。
  5. 优化硬件切换逻辑:在 handleRadioChange 中,当切换到 Xeon 时自动重置禁用选项(如取消选中被禁用的策略),并自动跳转至合适的模型版本(如 DeepSeek-V3.1 切换到 INT8 变体)。
  6. 更新文档页面(MDX):同步更新了 Qwen 系列、DeepSeek 系列等对应的 Markdown 文档,移除硬件无关的警告提示,保持文档与交互式组件一致。
    未涉及测试或配置变更。
文件 模块 状态 重要度
docs_new/src/snippets/autoregressive/deepseek-v3-deployment.jsx 部署配置 modified 7.2
docs_new/src/snippets/autoregressive/deepseek-v31-deployment.jsx 部署配置 modified 6.82
docs_new/src/snippets/autoregressive/deepseek-r1-basic-deployment.jsx 部署配置 modified 6.77
docs_new/src/snippets/autoregressive/qwen35-deployment.jsx 部署配置 modified 6.45
docs_new/src/snippets/autoregressive/hunyuan3-preview-deployment.jsx 部署配置 modified 5.98

关键符号

DeepSeekV3Deployment DeepSeekV31Deployment DeepSeekR1BasicDeployment Qwen35Deployment Hunyuan3PreviewDeployment handleRadioChange generateCommand

关键源码片段

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

为 DeepSeek-V3.1 添加 Xeon 支持,包括 INT8 模型变体、自动切换模型名称、禁用 DP/EP/MTP。

export const DeepSeekV31Deployment = () => {
  const options = {
    // 硬件选项新增 XEON
    hardware: {
      name: 'hardware',
      title: 'Hardware Platform',
      items: [
        // ... GPU 选项
        { id: 'xeon', label: 'XEON', default: false }
      ]
    },
    // 模型名称新增 INT8 变体,标记为 xeonOnly
    modelname: {
      name: 'modelname',
      title: 'Model Name',
      items: [
        { id: 'v31', label: 'DeepSeek-V3.1', default: true },
        { id: 'v31terminus', label: 'DeepSeek-V3.1-Terminus', default: false },
        { id: 'v31terminusint8', label: 'DeepSeek-V3.1-Terminus-Channel-int8', default: false, xeonOnly: true }
      ]
    },
    // 策略禁用同 V3
    strategy: {
      name: 'strategy',
      title: 'Deployment Strategy',
      type: 'checkbox',
      items: [
        { id: 'tp', label: 'TP', default: true, required: true },
        { id: 'dp', label: 'DP attention', default: false, disabledWhen: (v) => v.hardware === 'xeon' },
        { id: 'ep', label: 'EP', default: false, disabledWhen: (v) => v.hardware === 'xeon' },
        { id: 'mtp', label: 'Multi-token Prediction', default: false, disabledWhen: (v) => v.hardware === 'xeon' }
      ]
    },
    // ... 其余选项
  };  // 硬件切换时自动选择模型:切到 Xeon 选 INT8,切出 Xeon 恢复默认
  const handleRadioChange = (optionName, value) => {
    setValues(prev => {
      const next = { ...prev, [optionName]: value };
      if (optionName === 'hardware') {
        if (next.hardware === 'xeon') {
          next.modelname = 'v31terminusint8'; // 自动切到 INT8
        } else {
          const m = options.modelname.items.find(i => i.id === next.modelname);
          if (m && m.xeonOnly) {
            next.modelname = options.modelname.items.find(i => !i.xeonOnly && i.default)?.id || 'v31';
          }
        }
        // 过滤被禁止的策略
        const strategyItems = options.strategy.items || [];
        const current = Array.isArray(next.strategy) ? next.strategy : [];
        next.strategy = current.filter(id => {
          const item = strategyItems.find(s => s.id === id);
          if (!item) return false;
          if (typeof item.disabledWhen === 'function' && item.disabledWhen(next)) return false;
          return true;
        });
      }
      return next;
    });
  };  // 生成命令时处理模型路径和 Xeon 特定参数
  const generateCommand = () => {
    const { hardware, modelname, strategy } = values;
    const isXeon = hardware === 'xeon';
    const modelMap = {
      'v31': 'deepseek-ai/DeepSeek-V3.1',
      'v31terminus': 'deepseek-ai/DeepSeek-V3.1-Terminus',
      'v31terminusint8': 'IntervitensInc/DeepSeek-V3.1-Terminus-Channel-int8'
    };
    const modelName = modelMap[modelname];
    let cmd = 'python3 -m sglang.launch_server \\n';
    cmd += `  --model-path ${modelName}`;
    if (isXeon) {
      cmd += ' \\n  --device cpu \\n  --disable-overlap-schedule'; // CPU 特有参数
      cmd += ' \\n  --quantization w8a8_int8'; // INT8 量化
    }
    // ... 其他策略和参数
    return cmd;
  };

(注:片段展示了模型自动切换和命令生成逻辑,注释解释了 Xeon 下的行为。)

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

为 DeepSeek-R1 添加 Xeon 支持,包括量化选项中的 INT8、FP4 禁用、TP 值 6 以及命令参数。

export const DeepSeekR1BasicDeployment = () => {
  const options = {
    hardware: {
      name: 'hardware',
      title: 'Hardware Platform',
      items: [
        // ... GPU 项
        { id: 'xeon', label: 'XEON', default: false },
      ],
    },
    quantization: {
      name: 'quantization',
      title: 'Quantization',
      getDynamicItems: (values) => {
        const isXeon = values.hardware === 'xeon';
        const fp4Disabled = values.hardware === 'h100' || values.hardware === 'mi300x' || isXeon;
        return [
          { id: 'fp8', label: 'FP8', default: true },
          {
            id: 'fp4', label: 'FP4', default: false,
            disabled: fp4Disabled,
            disabledReason: isXeon
              ? 'Intel Xeon CPUs do not support FP4 quantization'
              : 'H100 and MI300X only support FP8 quantization',
          },
          {
            id: 'int8', label: 'INT8', default: false,
            disabled: !isXeon, // 仅在 Xeon 下可用
            disabledReason: 'INT8 is only available when XEON hardware is selected',
          },
        ];
      },
    },
    strategy: {
      name: 'strategy',
      title: 'Deployment Strategy',
      type: 'checkbox',
      items: [
        { id: 'tp', label: 'TP', default: true, required: true },
        { id: 'dp', label: 'DP', default: false, disabledWhen: (v) => v.hardware === 'xeon' },
        { id: 'ep', label: 'EP', default: false, disabledWhen: (v) => v.hardware === 'xeon' },
        { id: 'mtp', label: 'MTP', default: false, disabledWhen: (v) => v.hardware === 'xeon' },
      ],
    },
    // thinking, toolcall 保持不变
  };  // ... getInitialState, useEffect 等  const generateCommand = (values) => {
    const { hardware, quantization, strategy } = values;
    const isXeon = hardware === 'xeon';
    // 模型路径选择:FP4、INT8、FP8
    const modelPath = quantization === 'fp4'
      ? 'nvidia/DeepSeek-R1-0528-FP4-v2'
      : quantization === 'int8'
      ? 'Conexis/DeepSeek-R1-0528-Channel-INT8'
      : 'deepseek-ai/DeepSeek-R1-0528';
    let command = 'python3 -m sglang.launch_server \\n';
    command += `  --model-path ${modelPath}`;
    if (strategyValues.includes('tp')) {
      command += isXeon ? ' \\n  --tp 6' : ' \\n  --tp 8'; // Xeon 用 6
    }
    // ... 其他策略
    if (!isXeon) {
      command += ' \\n  --enable-symm-mem # Optional: improves performance, but may be unstable';
    }
    if (isXeon) {
      command += ' \\n  --device cpu \\n  --disable-overlap-schedule'; // CPU 特有
    }
    // ... thinking, toolcall 参数
    return command;
  };

(注:代码展示了量化动态获取、模型路径选择与 TP 值的条件分支,注释说明了 Xeon 下的不同行为。)

评论区精华

DeepSeek-V3 Xeon TP 值应为 6 正确性

zijiexia 指出 DeepSeek-V3 的 TP 值在 Xeon 上仍输出 --tp 8,而其他页面(R1、V3.1)已改为条件判断,应改为 --tp 6。

结论:作者已修复,添加 isXeon 条件判断。 · 已解决

DeepSeek-V3 Xeon FP4 处理不完备 正确性

zijiexia 指出 Xeon 上 FP4 未被禁用,导致错误提示指向 GPU 硬件;切换硬件时未重置量化。建议类似 R1 的禁用方式。

结论:作者将 FP4 改为灰色禁用,并在 handleRadioChange 中添加自动回落逻辑。 · 已解决

DeepSeek-V3.1 非 INT8 模型在 Xeon 上应禁用 设计

zijiexia 建议在 Xeon 下禁用非 INT8 模型选项(v31、v31terminus),只保留 INT8。

结论:作者解释 Xeon 支持 FP8 模型,因此保持可选,不需要禁用。reviewer 认可。 · 已解决

Qwen3-Next FP8 on Xeon 跨页不一致 style

zijiexia 指出 Qwen3-Next 页面将 Xeon 的 fp8 设为 false,而其他 Qwen 页面(VL、3.5、Coder)设为 true,造成不一致。

结论:作者修改以对齐,统一为 true。 · 已解决

风险与影响

主要风险是文档错误导致用户使用错误的部署命令。例如:

  • 若 TP 值不正确(如给 Xeon 用 --tp 8),可能导致启动失败或性能下降(已在 DeepSeek-V3 中修复)。
  • 若缺少 --device cpu 等参数,用户可能在 CPU 上运行不支持的 GPU 路径,导致不可用。
  • 量化选项与硬件不匹配(如 Xeon 选择 FP4)会被 UI 禁用或自动纠正,但用户仍可能通过手动修改命令出错。
    由于是文档类 PR,不影响核心代码,但影响力较大(用户参考文档部署)。

用户影响:Xeon CPU 用户能通过 cookbook 获得正确的部署指导,减少了探索成本。现有 GPU 用户不受影响(Xeon 选项默认隐藏)。系统影响:无。团队影响:文档维护量增加,但 Xeon 支持信息集中在一个 PR 中,便于后续更新。

命令参数正确性 跨页面一致性 用户依赖文档部署

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论