候选硬件更便宜,究竟便宜了哪一件事?
你收到一份报价,设备小时单价只有现有方案的一半。先不要把整个平台成本也除以二:同一任务能否正确执行、服务能否达标、故障后能否恢复、迁移需要多少工程时间,都还没有得到回答。本课的“资格认证”是你为自己的工作负载设计验收,不是厂商通用认证,更不是给某类硬件排名。
第 02 课说明算力、带宽和容量是不同限制,第 08 课要求先定义合格工作。换硬件时还多了一层:同一程序经过驱动、运行时、编译器、通信库和算子实现,实际执行路径可能变了。资格判断应沿功能正确、数值与任务质量、性能、恢复和成本逐层收集证据,后一层不能抵消前一层的失败。
先冻结一份能重新搭起来的组合
BOM 在这里指软硬件组成清单。记录设备型号、内存与互联、驱动/固件、运行时、框架、编译器或扩展、关键算子和通信库版本,再记录容器与模型制品哈希。训练任务还要固定优化器、数据版本和并行策略;生成服务还要固定 tokenizer、模板、精度及结束配置。哈希帮助确认内容相同,不能代替兼容性证明。
“支持这个框架”不足以回答你的问题。同一框架下某些算子、shape、精度、动态控制流或通信方式可能走不同路径。先从目标任务列实际用到的算子与张量形状,再用最小用例验证,最后回到端到端任务。编译缓存是否命中、冷启动是否重新编译也要记录,否则预热后的吞吐会掩盖发布时的等待。
Profiler 是记录执行事件、时间与资源活动的工具。比较 CPU 与设备时间线,寻找关键算子是否意外在主机运行、复制是否增加、同步是否挡住流水线;然后用端到端变化验证影响。出现 CPU 活动并不自动意味着“回退”:输入准备、控制逻辑本来就可能在 CPU。也不能靠两张固定算子的截图证明所有工作负载都已原生加速。
把功能、数值与质量写成三个不同问题
功能检查回答“输入是否合法处理,接口、shape、类型和错误分支是否符合合同”。数值检查回答“同一小用例的结果差异是否在事先规定的范围”。任务质量检查回答“这些差异是否伤害最终任务”。一个矩阵输出接近,不代表生成回答或训练收敛就合格;反过来,答案语义合格也不能掩盖越界、NaN 或协议错误。
先规定容差,再看结果
一个纯教学数值检查采用 |候选−参考| ≤ atol + rtol×|参考|。设 atol=0.01、rtol=0.001,参考值 10,则容许差为 0.02。候选 10.015 通过,10.03 不通过;参考为 0 时,容许差只有 0.01。此阈值仅用于练习,正式阈值应由运算、精度和业务误差预算决定,不能看到不通过后再放宽。
固定权重、输入、随机设置和解码策略可以让对照更清楚,但跨设备、实现或精度不应一律承诺逐 token 或逐位相同。为生成任务预先设定任务质量量表,并独立检查结构化输出、结束原因与极端长度。训练则比较一次更新的梯度与参数,再跑固定小数据任务检查优化轨迹和恢复结果,不能只看某个时刻的 loss 接近。
黄金集是事先选定的参考用例集合,应覆盖常见输入、边界 shape、长输入、失败分支和重要子群。它不是“固定 50 条”这个数字。保留一份未用于调优的检查集,避免为了让已知样例通过而改坏陌生请求;数据少时如实报告覆盖不足,而不是把通过率包装成普遍兼容。
正确之后,才在相同负载下谈性能
用第 08 课的原始记录协议,固定输入分布、输出范围、到达过程、预热和测量窗口,同时报告成功、失败、质量与时延。先重放完全相同的基线,再允许候选方案使用不同的最优配置;分别保存“同配置比较”和“各自调优后比较”,不要把两种结论混在一张排行榜上。
单卡正常后,若目标需要多卡,还须检查目标拓扑中的通信、rank 故障、分片保存与恢复。转换格式后能加载模型,不等于旧 checkpoint 能续训;某个后端能跑单层,不等于能处理动态形状的完整服务。结论要落到已验证的模型、版本、精度、负载及拓扑范围,范围外保持未知。
把迁移与合格工作放进同一本成本账
下面是一小时的合成教学记录,金额不是云报价。本表只练成本:假设两方案都已通过各项验收,档位要求成功 TTFT P95≤3s,联合合格数则采用更严格的单次 TTFT≤2s,并同时要求成功和任务质量通过;不沿用上一课示例的默认门槛。表中未给出的原始分布,不能从合格数反推。候选 B 的设备更便宜,但主机开销、维护投入和迁移成本更高。维护与迁移摊销是规划假设,应同时保留未摊销总额与实际工时。
| 项目 | 基线 A | 候选 B |
|---|---|---|
| 设备成本 | 6 | 3 |
| 主机与其余资源 | 2 | 3 |
| 增量维护摊入 | 0 | 2 |
| 迁移摊入 | 0 | 1 |
| 窗口总成本 | 8 | 9 |
| 全部尝试 / 联合合格 | 10,000 / 9,000 | 10,000 / 8,000 |
A 每千次合格成本为 8/9000×1000≈0.889;B 为 9/8000×1000=1.125。设备单价减半,没有使合格工作更便宜。本例 B 的迁移总投入假设为 1,000,预期使用 1,000 小时,所以每小时摊 1;若只使用 100 小时,每小时应摊 10,总成本变成 18,每千次合格成本为 2.25。预测寿命改变就会改变决策,不能隐藏在一个小数里。
试验开始前,约定何时停止
写下不可协商的条件,例如关键输入无法正确执行、质量差异超过合同、目标并行规模不能恢复、关键版本组合无可验证支持路径。再给可修复项一个明确预算:负责人、截止时间、重试范围和复验标准。退出不等于永久否定硬件,而是当前任务在当前约束下证据不足或收益不成立。
退出路径要能够执行:保留基线模型与配置,保留可恢复数据和 checkpoint,验证格式与接口兼容,明确谁把流量或作业切回哪里。先在隔离环境演练恢复,再做小范围试用;若新旧状态无法相互读取,提前设计可接受的重做范围。不要等候选环境故障才发现唯一可用的副本已被清理。
排障从第一个分叉处开始:单算子就不同,查精度、shape 和实现;小用例相同但端到端不同,查模板、预处理和组合路径;单卡通过、多卡失败,查分片与通信;热态快、发布慢,查加载、编译和预热。每次只改变一个解释相关的变量,再回归整份验收合同。
交付一页有证据状态的验收表
- 将功能、数值、任务质量、性能、恢复和成本各写成“输入与版本—阈值—原始证据—通过/失败/未知”,不得只填“支持”。
- 陌生候选 C 的窗口总成本为 7,全部尝试 10,000,联合合格 7,000。假设也通过硬约束,比较它与 A 的单位合格成本。
- 训练可运行,但恢复试验丢失优化器状态;供应商建议先放量再补。写出下一步、退出条件和允许恢复评估所需的新证据。
参考与验收
C 每千次合格成本为 1,高于 A 的约 0.889;不能因为总成本 7 小于 8 就选 C。丢优化器状态没有证明能续训,应停在试验阶段,补齐完整状态恢复并与连续运行核对后再评估。验收表至少要有一条失败或未知的处置办法、明确比较范围、可复算成本,以及可执行的基线恢复路径。
读工具说明,形成一条可复查路径
打开 PyTorch Profiler 示例,找到如何将算子事件与 CPU/设备活动关联。读后为一个目标算子写下“要看哪种事件、要排除哪种误读、如何回到端到端验证”。再对照可复现性边界,把逐位一致与任务质量验收区分开。实际候选平台使用其支持版本的官方工具,不能假定同一分析工具支持所有设备。
下一步:把各课证据放回同一个系统
第 12 课不会要求你再写一套口号。你要把训练恢复、推理负载、集群安排、发布和成本放进同一运行报告;任何无法复建或范围不清的结论,都应退回对应章节补证据。
留下本课的产出
本课产出:候选硬件验收表与成本账。写下条件、证据、结果和仍不确定的事。保存不代表自动通过,下面的状态由你按验收条件自检。
记录只保存在当前浏览器。