Prhub

#30614 [Diffusion][Docs] Ascend A2, A3 add basic usage and benchmark results in diffusion cookbook

原始 PR 作者 andrew52522 合并时间 2026-07-29 16:50 文件变更 10 提交数 20 评论 29 代码增减 +1115 / -387

执行摘要

新增 Ascend A2/A3 的 Diffusion 部署文档与交互组件

根据 PR Body 描述:“This PR introduces documentation and interactive UI support for Ascend A2 and Ascend A3 hardware platforms across several diffusion models in SGLang.” 主要动机是让用户能够在 Ascend NPU 上直接参考文档部署 Diffusion 模型,并获取官方 Benchmark 数据。

本 PR 偏文档性质,但交互组件中针对不同硬件动态生成命令的模式值得借鉴,未来支持更多硬件(如 Intel Gaudi)时可复用。核心逻辑在 generateCommanduseEffect,结构清晰。建议阅读以了解 SGLang 文档自动化的实践。

讨论亮点

Review 中主要讨论了以下问题:

  • 硬件 ID 命名不统一:最早使用 ascend2/ascend3 与文档 Tab 标题 a2/a3 不一致,最终统一为 a2/a3
  • Tab 自动切换匹配不充分useEffect 最初只匹配单一 Tab 名称(如 'Ascend A2 / A3'),但部分文档 Tab 标题为 'Ascend A3',导致切换失败。各组件最终单独调整目标标题,但未完美泛化。
  • 本地路径硬编码generateCommand 中包含像 /home/weights/ 的路径,Reviewer 要求替换为标准 Hugging Face repo ID,已修正。
  • 移除 --port 参数:Reviewer Makcum888e 要求删除命令中的 --port,已执行。
  • A2 单卡能力确认:对于 FLUX.1-dev 和 Qwen-Image,Reviewer 询问是否可单卡运行,作者确认并已在命令中实现。

实现拆解

  1. 交互组件硬件选项扩展:在 flux-deployment.jsxwan21-deployment.jsxwan22-deployment.jsxqwen-image-deployment.jsxzimage-turbo-deployment.jsx 的 hardware 选项列表中追加 a2、a3 条目。
  2. 命令生成逻辑:每个组件的 generateCommand 函数新增判断硬件分支,当 hardware === 'a2''a3' 时,根据模型规格、任务类型和 Best Practice 模式输出 --tp-size--sp-degree--num-gpus 等参数。A3 命令前添加注释说明单卡包含 2 个 NPU chip。
  3. Tab 自动切换:使用 useEffect 监听 values.hardware,通过 DOM 选择器 (querySelectorAll) 点击对应标题的 Tab,使 Benchmark 区域自动切换到 Ascend 结果页。不同模型 Tabs 标题略有差异,组件逐一适配。
  4. 文档内容更新:5 篇 .mdx 文件在“基本配置”段落中补充 Ascend A2/A3 支持声明;Benchmark 区域由原始纯文本改为 <Tabs> 分区,分别展示不同硬件平台的性能结果。
  5. Review 后修复:将硬件 ID 由 ascend2/ascend3 统一为 a2/a3;移除命令中的 --port 参数;替换硬编码的本地路径(如 /home/weights/)为 Hugging Face 仓库 ID。
文件 模块 状态 重要度
docs_new/src/snippets/diffusion/flux-deployment.jsx 部署组件 modified 5.38
docs_new/src/snippets/diffusion/wan22-deployment.jsx 部署组件 modified 5.97
docs_new/cookbook/diffusion/FLUX/FLUX.mdx 部署文档 modified 4.24

关键符号

FluxDeployment Wan21Deployment Wan22Deployment QwenImageDeployment ZImageTurboDeployment

关键源码片段

docs_new/src/snippets/diffusion/flux-deployment.jsx doc-component

核心交互组件,新增 A2/A3 硬件选项及对应的命令生成逻辑,体现了不同硬件规格的部署配置

export const FluxDeployment = () => {
  const config = {
    options: {
      hardware: {
        name: 'hardware',
        title: 'Hardware Platform',
        items: [
          { id: 'b200', label: 'B200', default: true },
          { id: 'h200', label: 'H200', default: false },
          // ... 其他选项 ...
          { id: 'a2', label: 'A2', default: false }, // 新增 Ascend A2
          { id: 'a3', label: 'A3', default: false } // 新增 Ascend A3
        ]
      },
      // ...
    },
  };  // 监听硬件变化,自动切换文档中对应的 Benchmark Tab
  useEffect(() => {
    const isAscend = values.hardware === 'a2' || values.hardware === 'a3';
    const targetTabName = isAscend ? 'Ascend A3' : 'NVIDIA B200';
    const allTabs = document.querySelectorAll('button, [role="tab"]');
    allTabs.forEach((tab) => {
      const text = tab.textContent.trim();
      if (text === targetTabName && tab.getAttribute('aria-selected') !== 'true') {
        tab.click();
      }
    });
  }, [values.hardware]);
};

评论区精华

硬件 ID 命名不统一 设计

早期版本使用 ascend2/ascend3 作为选项 id,但文档其他地方(如 Tab 标题)使用 a2/a3。Reviewer 指出不一致,要求统一。

结论:最终所有文件将 id 改为 a2/a3,保持一致性。 · 已解决

Tab 自动切换仅匹配单个名称 正确性

useEffect 仅通过固定的 'Ascend A2 / A3' 或 'Ascend A3' 查找 Tab,但文档中各模型使用了不同的 Tab 标题,导致部分 Tab 无法自动切换。Reviewer 建议匹配多个可能标题。

结论:最终针对每个模型单独调整目标 Tab 名称,但未实现通用匹配方案。仍存在一定局限性。 · 已解决

本地路径硬编码 正确性

generateCommand 中包含 /home/weights/ 等本地路径,不适合公开发布。Reviewer 要求改为 Hugging Face 仓库 ID。

结论:已替换为 ${config.repoId} 变量和标准 Hugging Face 路径。 · 已解决

风险与影响

文档中生成命令的参数(如 --tp-size--sp-degree)基于开发环境验证,用户环境差异可能导致部署失败,但风险较低。Tab 自动切换使用 DOM 操作(useEffect + querySelectorAll),强依赖文档站点的 DOM 结构;后续 UI 重构可能导致此 hack 失效,且无测试覆盖。不同模型文档中 Ascend Tab 标题不统一(有的用 Ascend A3,有的用 Ascend A2 / A3),部分场景下自动切换可能无法触发。

对用户而言,Ascend 平台用户可直接参考文档和交互组件部署 Diffusion 模型,降低上手成本。对系统无运行时影响。对团队需在后续版本中持续维护文档与组件,增加一定维护负担。

文档命令准确性依赖手动审核 Tab 切换使用 DOM Hack 硬件 ID 曾存在不一致 多 Tab 标题兼容风险

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论