执行摘要
- 一句话:补齐 H200/B200/B300 的每节点 GPU 数映射
- 推荐动作:值得快速合并(已合并)。这个修复解除了真实的启动阻断,但属于防御性薄弱的小改动。建议后续为
NUM_GPUS_OF_HARDWARE 补充单元测试,或与 GENERATION_HARDWARE 合并维护,避免同源字段不同步。
功能与动机
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 冒烟测试中暴露的。
实现拆解
- 入口定位:
miles/utils/external_utils/command_utils.py 中的模块级字典 NUM_GPUS_OF_HARDWARE,它被 ScriptArgs(miles/utils/arguments.py)用来在只传 --hardware 时推断默认的 num-gpus-per-node。
- 字典扩展:在
"H100": 8 之后依次插入 "H200": 8、"B200": 8、"B300": 8,与 Hopper 和 MI300 系列保持一致,因为这几款 Blackwell/Hopper 变体的 devbox 均为 8 卡节点。
- 演进过程:第一个 commit 先加 H200 与 B300,第二个 commit 补充 B200,说明作者在复查时意识到 Blackwell 系列同样缺失。
- 配套:本次没有任何测试、文档或配置变更。没有为
NUM_GPUS_OF_HARDWARE 增加校验或测试,未来新增硬件名时仍可能漏改。
关键文件:
miles/utils/external_utils/command_utils.py(模块 硬件映射;类别 source;类型 core-logic;符号 NUM_GPUS_OF_HARDWARE): 唯一改动文件,NUM_GPUS_OF_HARDWARE 字典为 --hardware 参数推断每节点 GPU 数提供依据,本次新增 H200/B200/B300 三个键,直接修复 ScriptArgs.__post_init__ 抛 KeyError 的问题。
关键符号:未识别
关键源码片段
miles/utils/external_utils/command_utils.py
唯一改动文件,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 卡 / 节点
}
评论区精华
本 PR 没有实质 review 讨论:comments_count 与 review_comments_count 均为 0,claude[bot] 仅提示仓库配置了手动 review,Zhichenzzz 直接批准。因此无争议点或未决疑虑。
风险与影响
- 风险:变更仅是在字典中增加 3 个键,风险极低。潜在关注点:1)
NUM_GPUS_OF_HARDWARE 与 GENERATION_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 时直接引用。
- 风险标记:缺少测试覆盖, 硬件映射与代际映射不同源
关联脉络
- PR #2564 release: bump miles version to 0.1.0: 本 PR 在 release/v0.1.0 冒烟测试中发现,同一发布周期内版本重置为 0.1.0。
- PR #2538 release: miles version release workflow: 该 PR 建立了版本发布工作流,本次硬件映射缺失正是在该流程的 B300 devbox 冒烟测试中暴露。
参与讨论