Prhub

#2585 fix: add H200, B200 and B300 to NUM_GPUS_OF_HARDWARE

原始 PR 作者 yueming-yuan 合并时间 2026-08-18 07:18 文件变更 1 提交数 2 评论 0 代码增减 +3 / -0

执行摘要

补齐 H200/B200/B300 的每节点 GPU 数映射

PR body 描述:运行 scripts/run_qwen3_30b_a3b.py --hardware B300 而不带 --num-gpus-per-node 时,ScriptArgs.__post_init__ 会抛 KeyError: 'B300',因为 NUM_GPUS_OF_HARDWARE 只列了 H100/GB200/GB300/MI350X/MI355X。H200 和 B200 同样缺失。该问题是在 release/v0.1.0 nvfp4 训练的 B300 devbox 冒烟测试中暴露的。

值得快速合并(已合并)。这个修复解除了真实的启动阻断,但属于防御性薄弱的小改动。建议后续为 NUM_GPUS_OF_HARDWARE 补充单元测试,或与 GENERATION_HARDWARE 合并维护,避免同源字段不同步。

讨论亮点

本 PR 没有实质 review 讨论:comments_countreview_comments_count 均为 0,claude[bot] 仅提示仓库配置了手动 review,Zhichenzzz 直接批准。因此无争议点或未决疑虑。

实现拆解

  1. 入口定位:miles/utils/external_utils/command_utils.py 中的模块级字典 NUM_GPUS_OF_HARDWARE,它被 ScriptArgsmiles/utils/arguments.py)用来在只传 --hardware 时推断默认的 num-gpus-per-node
  2. 字典扩展:在 "H100": 8 之后依次插入 "H200": 8"B200": 8"B300": 8,与 Hopper 和 MI300 系列保持一致,因为这几款 Blackwell/Hopper 变体的 devbox 均为 8 卡节点。
  3. 演进过程:第一个 commit 先加 H200 与 B300,第二个 commit 补充 B200,说明作者在复查时意识到 Blackwell 系列同样缺失。
  4. 配套:本次没有任何测试、文档或配置变更。没有为 NUM_GPUS_OF_HARDWARE 增加校验或测试,未来新增硬件名时仍可能漏改。
文件 模块 状态 重要度
miles/utils/external_utils/command_utils.py 硬件映射 modified 4.59

关键源码片段

miles/utils/external_utils/command_utils.py core-logic

唯一改动文件,`NUM_GPUS_OF_HARDWARE` 字典为 `--hardware` 参数推断每节点 GPU 数提供依据,本次新增 H200/B200/B300 三个键,直接修复 `ScriptArgs.__post_init__` 抛 `KeyError` 的问题。

# 硬件名 -> 每节点 GPU 数的映射表
# 供 ScriptArgs 解析 --hardware 参数时推断默认的 num-gpus-per-node 使用
NUM_GPUS_OF_HARDWARE = {
    "H100": 8, # H100 节点按 8 卡配置
    "H200": 8, # 新增:H200 与 H100 同规格,也是 8 卡 / 节点
    "B200": 8, # 新增:B200 按 8 卡 / 节点
    "B300": 8, # 新增:B300 devbox 为 8 卡 / 节点
    "GB200": 4, # GB200 NVL 机柜按 4 卡 / 节点
    "GB300": 4, # GB300 NVL 机柜按 4 卡 / 节点
    "MI350X": 8, # AMD MI350X 按 8 卡 / 节点
    "MI355X": 8, # AMD MI355X 按 8 卡 / 节点
}

评论区精华

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

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

风险与影响

变更仅是在字典中增加 3 个键,风险极低。潜在关注点:1)NUM_GPUS_OF_HARDWAREGENERATION_HARDWARE 是两处独立字典,本 PR 未同步更新 GENERATION_HARDWARE(该字典仍只有 H100/GB200/GB300),未来若需要把 H200/B200/B300 映射到代际名,可能再次遗漏;2)没有测试覆盖,无法防止未来新增硬件名时再次出现 KeyError;3)假设 B200/B300 均为 8 卡 / 节点,若实际节点拓扑不同(如 4 卡机柜),推断的 num-gpus-per-node 会不准确,但当前 devbox 场景符合。

影响范围较小。对用户:使用 --hardware H200/B200/B300 且不显式传 --num-gpus-per-node 的脚本命令不再崩溃,黑盒行为与 H100 一致。对系统:仅影响参数解析路径,不影响训练核心逻辑。对团队:修复了 release/v0.1.0 冒烟测试中遇到的启动报错,也统一了硬件规格声明方式,便于后续新增模型 recipe 时直接引用。

缺少测试覆盖 硬件映射与代际映射不同源

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论