Prhub

#39373 [Diffusion] docs: give the RTX 5090 its own H3 recipe, measured on a physical desktop

原始 PR 作者 mickqian 合并时间 2026-09-15 09:15 文件变更 2 提交数 2 评论 2 代码增减 +134 / -23

执行摘要

为 RTX 5090 新增独立 H3 部署配方与实测提示

PR body 明确指出问题根源:RTX 5090 单卡落不进 CONSUMER_12G/16G/24G、工作站档位与 UNIFIED_128G 中的任何一个,CONSUMER_SINGLE 永远匹配不到它,于是默认配方 rtx5090-offload-1 解析到为双卡实测的通用 offload 旗标——"二十层驻留 DiT 在 TP2 下每 GPU 只有半层,放到单卡上是 32 GB 板卡上的 24.6 GiB 权重";同时缺少 video_vae=36,decoder 每个 decode 都流式读取 36 个块(实测 40.2 s 对比驻留 6.4 s)。又因为 5090 不在 CONSUMER_SINGLE 中,Host RAM 选择器被隐藏、提示完全缺失——而这恰是主机内存决定成败的一张卡。

值得精读。该 PR 虽然只是文档,但展示了三个可迁移的工程模式:一是为文档化配置建立可验证的定量模型(磁盘吞吐公式),二是用 hard-cap 模拟与物理实测交叉验证的基准方法论,三是"单卡/多卡分流"的部署矩阵判定函数 consumerSingleCard。对部署 H3 的 RTX 5090 用户,重点读 cookbook 新增的 "RTX 5090 single card, physical desktop" 一节与磁盘吞吐提示;对引擎开发者,PR body 中关于 pin budget、O_DIRECT courier 与 compute wall 的分析是理解 diffusion offload 路径的关键背景。

讨论亮点

该 PR 没有实质性 review 讨论:仅有的两条 comment 分别是 Mintlify preview bot 的预览部署通知与作者自己的 /tag-and-rerun-ci 命令,review_comments 为 0。所有设计权衡(14 层 resident 的选择依据、ram96 走 4 层规则、双卡命令保持不变的排除逻辑、磁盘吞吐公式)均由作者在 PR body 中以实测数据与推导形式给出,未引发 reviewer 质疑或返工。

实现拆解

  1. 新增 32 GB 档位定义:在 docs/src/snippets/configs/MiniMaxAI/minimax-h3.jsx 中新增 CONSUMER_32G = ["rtx5090"],并把它并入 CONSUMER_SINGLE 与 CONSUMER_VRAM_16_PLUS。前者让 5090 单卡首次进入消费级单卡分支,从而获得 Host RAM 选择器、consumer hints 与单卡配方;后者让 5090 在 ram96 大主机下也获得 4 层 resident 规则与对应提示。
  2. 新增 consumerSingleCard() 单卡判定:这是本 PR 最关键的逻辑。5090 是唯一有已验证双卡配方的消费级卡(TP2、每 GPU 20 层 resident),双卡选择必须继续走通用 offload 路径;新判定函数用 Number(s.gpus_per_node) > 1 排除双卡场景,保证已有双卡命令字节级不变。auto 下拉框的 flags 与 hints 入口也都从 CONSUMER_SINGLE.includes(s.hw) 切换为 consumerSingleCard(s)。
  3. consumerFlags() 增加 32G 分支:当 5090 单卡且主机非 ram96 时,追加 --dit-layerwise-resident-layers 14(约 17 GiB),依据是 14 层给 decode 留出空间并缩小主机需要 pin 的流式集合;ram96 大主机仍走已有的 4 层规则。
  4. consumerHints() 提示体系重写:新增 5090 实测提示(60 GB 主机 112.2/112.1 s per request,denoise 5.14-5.17 s/step,decode 6.4 s,对比 ComfyUI 140.9-145.9 s);把原"38 s/step 是磁盘瓶颈"的经验提示替换为可计算模型 bytes per step = (50 - resident DiT layers - pin budget 覆盖层数) x 1.23 GiB;新增 4 条通用提示:resident 层收益的 pin 预算边界条件、按目标形状 warmup、95% pin 预算导致的桌面 swap 压力、旧 38 s/step 结论的归因说明。
  5. cookbook 正文:MiniMax-H3.mdx 新增 "RTX 5090 single card, physical desktop" 章节,给出完整测量表与三个封顶模拟测不出的结论(compute wall 而非磁盘、主机内存决定流量规模、两引擎默认命令在这台机器上都无法直接运行);原 5090 章节改名 "(two cards)" 并增加交叉引用;修正 ComfyUI --fast-disk 的表述——实验室机器无差异,60 GB 物理桌面上是避免 OOM 的刚需。
  6. 测试与验证配套:无运行时测试(documentation only);PR body 声称对全部 270 种"硬件 x GPU 数 x 主机内存"组合做了渲染前后对比,仅 5090 单卡命令行发生变化,双卡命令字节级不变;minimax-h3.jsx 作为 ESM 可解析、config 可导入求值。
文件 模块 状态 重要度
docs/src/snippets/configs/MiniMaxAI/minimax-h3.jsx 配置矩阵 modified 6.86
docs/cookbook/diffusion/MiniMax/MiniMax-H3.mdx 文档正文 modified 4.68

关键符号

consumerSingleCard consumerFlags consumerHints

关键源码片段

docs/src/snippets/configs/MiniMaxAI/minimax-h3.jsx core-logic

H3 部署矩阵的渲染核心,新增 CONSUMER_32G 档位与 consumerSingleCard() 单卡判定,重写 consumerFlags 与 consumerHints,是本 PR 的配置逻辑主体。

// 档位定义:每个 VRAM 档位对应一份配方。
// RTX 5090 是唯一在真实物理桌面(60 GB 主机 + PCIe 5.0 NVMe)上
// 实测过的档位,其余档位的数据来自硬性分配器上限的模拟。
const CONSUMER_12G = ["rtx4070", "rtx5070", "rtx3060"];
const CONSUMER_16G = ["rtx4080", "rtx5080", "rtx5070ti", "rtx4060ti"];
const CONSUMER_24G = ["rtx4090", "rtx3090"];
const CONSUMER_32G = ["rtx5090"];
​
// 单卡判定:5090 是唯一有已验证双卡配方的消费级卡(TP2、每 GPU 20 层驻留),
// 双卡选择必须留在通用 offload 路径上,只有单卡才走下方档位配方。
function consumerSingleCard(s) {
  return (
    CONSUMER_SINGLE.includes(s.hw)
    && !(CONSUMER_32G.includes(s.hw) && Number(s.gpus_per_node) > 1)
  );
}
​
function consumerFlags(s) {
  if (UNIFIED_128G.includes(s.hw)) return unified128Flags();
  if (WORKSTATION_96G.includes(s.hw)) return workstation96Flags();
  const flags = [
    "--performance-mode memory",
    "--layerwise-offload-components dit,text_encoder,vae",
    "--layerwise-resident-layers video_vae=36",
  ];
  // 单卡 5090 驻留 14 层 DiT(约 17 GiB):给 decode 留出空间,
  // 同时缩小主机侧需要 pin 的流式集合,缓解桌面 swap 压力。
  // ram96 大主机仍走上方 4 层规则,这里只覆盖 ram32/ram64。
  if (CONSUMER_32G.includes(s.hw) && s.host_ram !== "ram96") {
    flags.push("--dit-layerwise-resident-layers 14");
  }
  return flags;
}

评论区精华

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

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

风险与影响

  1. 配置矩阵逻辑的连带影响:CONSUMER_SINGLE 与 CONSUMER_VRAM_16_PLUS 同时纳入 32G,会改变 bigHost 分支的提示选择与 ram96 的 resident 规则取值分支;auto 下拉框入口函数被替换为 consumerSingleCard,未来新增硬件或修改 tier 时若遗漏双卡排除分支,可能再次出现配方错配。作者已用 270 种组合渲染对比把关,但该验证不在 CI 中,属于离线人工校验。
  2. 实测数据的外推边界:cookbook 中 4090 在 32 GB 主机上的性能是推导值而非重新测量,作者也明确标注"that machine has not been re-measured";磁盘吞吐模型预测 49 GiB/request、实测 51.3 GiB,约 5% 误差,模型假设每层固定 1.23 GiB。768P 等分辨率变化下的指导仍是经验规则。
  3. 文档误导面:hint 文案大量重写,其中"resident DiT 层只在流式集合超过 pin 预算时才减少磁盘流量"这类带边界条件的结论若被读者断章取义,可能造成无效配置;不过整体上 PR 的条件限定写得很清楚。
  4. 无运行时回归面:不涉及生产代码;CI 的 PR Test (Extra) 显示失败,但与文档变更无关,纯 docs 变更不触发运行时测试。

对用户:RTX 5090 单卡用户是直接受益者——此前部署 H3 会拿到双卡 TP2 配方,单卡上 24.6 GiB 驻留权重、decode 全程流式(约 40 s);修复后自动获得 14 层 DiT 驻留 + video_vae=36 + Host RAM 选择器 + 磁盘吞吐提示,实测 112.2 s/request,较 ComfyUI 快约 30%。对团队:确立了"物理桌面实测 + 可计算模型"的文档标准,纠正了被旧路径误导的历史结论(38 s/step 是旧路径而非磁盘),避免后续开发者重复踩坑;consumerSingleCard 的单卡/多卡分流逻辑为后续消费级显卡配方模板提供了可复用范式。对系统:零运行时影响,不触碰任何生产代码路径。

纯文档变更,无运行时回归面 渲染矩阵逻辑变更,验证不在 CI 4090 推导值未重新测量 磁盘模型存在约 5% 误差

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论