建模精度与验证
怎么标定效率因子、对标真实硬件、量化误差来源,以及先相对后绝对的升级路径
核心要点:
- 精度不是越高越好,是够用就好——标定成本和精度的权衡是工程判断
- 误差来源可分层:模型误差(公式选错)和标定误差(参数估不准)
- 挂一个显式效率因子 η 是从"仅相对"到"绝对±5~10%"的最小跨步
- 对标验证必须先定口径:对标什么(TTFT/TPOT/吞吐)、在什么配置下
- "先相对后绝对"是业界共识的升级路径,不是两个互斥选项
名词定义
| 名词 | 定义 |
|---|---|
| 模型误差 | 建模假设与真实物理行为之间的偏差,如 roofline 假设完美流水 |
| 标定误差 | 模型结构正确但参数估错,如效率因子 η 取值偏离真实利用率 |
| MFU (Model FLOP Utilization) | 实测吞吐对应的 FLOPs 除以峰值算力,衡量硬件利用效率 |
| 相对误差 | 两个配置之间的预测误差,系统性偏置在比较中抵消 |
| 绝对误差 | 单个配置的预测值与实测值的偏差 |
误差从哪里来?
核心问题: 仿真结果和真实测量对不上,根子在哪?
误差来源分两层,处理方式不同:
模型误差:公式选错,比如用 roofline 的 max(计算,访存) 对一个访存不规则的 scatter/gather 算子建模——roofline 假设访存连续且可流水,实际不是。这类误差加再多标定数据也修不好,只能换公式。识别信号:误差随输入形状的变化有系统性规律,不是噪声。
标定误差:公式结构对,但参数估偏了。最典型的是效率因子 η:datasheet 峰值乘以 η 预测算子时长,η 取 1.0 和取 0.6 的预测差距达 67%。标定误差的识别信号:误差在不同输入形状上稳定偏同一个方向(系统性高估或低估)。
两类误差的修法:模型误差 → 回去改公式;标定误差 → 用少量实测样本回归 η。
效率因子 η 怎么标定?
核心问题: η 不是一个数,是怎么从实测数据里拿到的?
标定步骤:选几个代表性算子(大 GEMM、小 GEMM、elementwise、flash attention),在目标硬件上跑 microbenchmark 测实测时长,再用 η = (FLOPs / 算力) / 实测时长(计算受限算子)或 η = (字节 / 带宽) / 实测时长(访存受限算子)反推。
几个工程要点:
- 按算子类型分 η,不用全局单一 η:大 GEMM 和小 GEMM 的利用率差距可到 2×,用同一个 η 会让其中一类严重偏。Calculon 按算子大小给阶梯曲线[1],不同规模区段用不同 η。
- 标定集要覆盖部署实际范围:如果生产中 batch size 在 4–32 之间跑,标定时要包含这个范围;只标 batch=1 的 η 外推到 batch=32 不可靠。
- η 是当前软件栈的标定:同一芯片换驱动或编译器版本,η 可能变。记录标定时的软件版本。
标定的最小成本路径:选 5–10 个代表性算子形状、跑 10–50 次取中位数、线性回归出按大小分档的 η 曲线。GenZ v3 报告用这种方式把 TTFT 误差从约 6% 降到约 2%[2]。
对标验证怎么做?
核心问题: 拿仿真结果和真实系统对比,方法上有哪些容易踩的坑?
对标验证必须先锁定三件事,再跑数:
① 口径对齐:仿真预测的是什么指标、真实系统测的是什么指标,必须完全一致。预测的是"算子计算时长",对标的是端到端 TTFT,中间差了排队等待、调度开销、框架开销,怎么比都对不上。Vidur 对标时显式区分了算子时长预测误差和调度仿真误差[3]。
② 配置一致:并行度(TP/PP/DP)、批量大小、序列长度、精度格式、是否开 Flash Attention——任一项不同,结果就没有可比性。对标数据集里标清每条实验的完整配置。
③ 稳态 vs 启动:真实系统的前几次推理包含 JIT 编译、内存分配、预热开销,不代表稳态性能。对标用 warmup 后的稳态数据;仿真不模拟启动开销,比较对象必须是稳态实测。
典型验证流程:选 3–5 个代表性(模型规模、并行配置、序列长度)场景,每场景实测 20 次取中位数,和仿真预测比相对误差。误差分析按来源分:计算算子误差、访存算子误差、通信误差、调度误差各占多少。
先相对后绝对是什么意思?
核心问题: 算力标不准,仿真器到底能不能给出可信的绝对数值?
"先相对后绝对"是一条升级路径,不是"只能给相对"。两个阶段:
相对阶段:用 datasheet 峰值 + 经验 η,建模的系统性偏置在同一基准下的比较中抵消。用于回答"配置 A 比配置 B 快多少"、"TP=4 vs TP=8 哪个更好"——比较中偏置约掉,排序结论可信,但绝对数值不可信。这已经满足部署选型的主要需求:不需要知道某配置跑多快,需要知道哪个更快。
绝对阶段:用目标芯片少量实测样本标定 η,把系统性偏置修正掉,绝对误差收敛到 ±5~10%。这时可以给出可信的绝对 TTFT/TPOT 预测,用于容量规划。
业界升级先例:
- ASTRA-sim 的计算后端支持在解析 roofline (相对) 和读真实 trace 的 measured 模式 (绝对) 之间切换[4]
- GenZ 从 v1 的固定经验 η 升级到 v3 的按平台标定 η,TTFT 误差从约 6% 降到约 2%[2]
标定不足时的正确做法:绝对值结果加免责声明"基于经验 η,绝对值仅供参考";相对排序结论不加免责。不要因为绝对精度不足就拒绝给出相对比较——相对比较对选型价值巨大。
什么情况下可以信任仿真结果?
核心问题: 仿真结果什么时候可以直接拿来做决策,什么时候只能作为参考?
按用途和精度需求分三档:
| 用途 | 精度要求 | 信任条件 |
|---|---|---|
| 并行策略排序 (TP/PP/DP 哪个好) | 相对误差 <20% | 经验 η + 相同路径下比较即可 |
| 容量规划 (多少卡服务多少 QPS) | 绝对误差 <15% | 必须标定 η + 验证过相近配置 |
| SLA 承诺 (P99 延迟 <X ms) | 绝对误差 <5% | profile-based 或充分标定,不能靠解析 |
@tbl-ipm-trust-levels 仿真结果可信度与用途对照
解析 roofline 仿真器 (GenZ/Calculon 类) 在标定 η 后可满足前两档;第三档 SLA 承诺级精度通常需要 Vidur 类 profile-based 框架或真实压测。不要把解析仿真器用于 SLA 承诺——它不是为这个设计的。
Takeaway
| 知识点 | 核心结论 |
|---|---|
| 误差两类 | 模型误差改公式,标定误差标定 η,不可混淆 |
| η 标定 | 按算子类型分档,覆盖部署实际范围,记录软件版本 |
| 对标三要素 | 口径 / 配置 / 稳态三项必须对齐,缺一无法比较 |
| 先相对后绝对 | 经验 η 给相对排序,标定 η 升绝对精度,是升级路径不是二选一 |
| 信任级别 | 排序 < 容量规划 < SLA 承诺,精度要求递增,工具选型不同 |
参考资料
- Isaev et al., Calculon: a Methodology and Tool for High-Level Co-Design of Systems and LLMs, SC 2023. https://dl.acm.org/doi/10.1145/3581784.3607102
- Bambhaniya et al., GenZ: LLM Inference Platform Analysis, 2024. https://arxiv.org/abs/2406.01698
- Agrawal et al., Vidur: A Large-Scale Simulation Framework for LLM Inference, MLSys 2024. https://arxiv.org/abs/2405.05465
- Won et al., ASTRA-sim2.0: Modeling Hierarchical Networks and Disaggregated Systems, ISPASS 2023. https://arxiv.org/abs/2303.14006
延伸阅读
- 8.2 Compute 资源域 — 效率因子 η 的设计与业界对比
- 8.6 输入模式与 Workload Spec — 端到端指标的组合方式