适用读者:要写容量评估、要判断"这套配置能不能跑、能跑多快"的人。
前置:S23-J05(方法论与五问法)。
覆盖旧文:A-4334 §1.2(系统设计的关键数字,110 点)→ 110 点。
扩展点:E-S23-014(四类资源与三项时间下界)、E-S23-015(Amdahl 定律用于工程判断)。
上一篇:S23-J05 · 导论:为什么应用开发者要懂 AI Infra
下一篇:S23-J07 · 用几个数字估算一次模型执行。
1. 一句话结论
AI Infra 的全部估算只用四类数字:容量、算力、带宽、延迟。 前三个给出时间下界,第四个决定等待能不能被重叠。记住这四类数字的量级,比记住任何框架 API 都值钱。
容量:M ≤ M_cap (能不能装下)
算力:T_compute ≥ F / Π (算多久)
带宽:T_memory ≥ R / β (搬多久)
延迟:串行等待 + 启动/往返 (等多久)
出处:AI Infra 教材 §1.2(
id 4334)。
2. 数量级直觉:Jeff Dean 的 12 项操作(2009)
原文完整列出这张著名幻灯片的 12 项数值(单位 ns;1 μs = 1000 ns,1 ms = 1000 μs):
| 操作 | 时间(ns) |
|---|---|
| 访问一级缓存 | 0.5 |
| 分支预测错误后的恢复 | 5 |
| 访问二级缓存 | 7 |
| 对互斥锁加锁或解锁 | 25 |
| 访问主存 | 100 |
| 用 Zippy 压缩 1 KB | 3,000 |
| 经 1 Gbit/s 网络发送 2 KB | 20,000 |
| 从主存连续读取 1 MB | 250,000 |
| 同一数据中心内往返 | 500,000 |
| 磁盘寻道 | 10,000,000 |
| 从磁盘连续读取 1 MB | 20,000,000 |
| 数据包从加州到荷兰再返回 | 150,000,000 |
三个关键换算(原文点名):
主存访问 ≈ 100 ns = 0.1 μs
同机房往返 ≈ 500,000 ns = 0.5 ms
磁盘寻道 ≈ 10,000,000 ns = 10 ms
判据:一次磁盘寻道 ≈ 十万次主存访问。 凡是"要不要落盘""要不要跨机房"的设计,先用这条比例判断量级。
注意:这组数字对应 2009 年设备,用于理解数量级关系;今天的绝对值更快,但相对比例(缓存≪主存≪磁盘≪跨洲往返)依然成立。
3. Amdahl 定律:为什么"局部加速"常常没用(E-S23-015)
原文的例子:请求串行 20 次寻道(每次 10 ms)+ 全部 CPU 计算 1 ms → 总时间 201 ms。
| 优化 | 效果 |
|---|---|
| 计算速度翻倍 | 省 0.5 ms(计算只占 1/201) |
| 寻道次数 20 → 10 | 省 100 ms |
Speedup = 1 / ((1 − f) + f/s)
f= 可加速部分在原时间中的占比;s= 该部分的加速倍数。- 上限:即使
s → ∞,总加速比也不超过1/(1−f)。
3.1 同一把尺子量"AI 编程工具"
原文用同一个公式解释"为什么同样上 AI 编程工具,不同团队收益差很大":
| 团队 | 编码占原时间 | 编码加速 5× | 整体加速比 |
|---|---|---|---|
| 大公司(协调多) | 20%–30% | 20h → 4h(原 100h) | 1.19–1.32× |
| 创业团队(沟通少) | 70%–80% | 80h → 16h | 2.27–2.78× |
以"编码占 80%、原 100 小时"为例:20 + 80/5 = 36 小时 → 2.78×。
判据:先问"被加速的部分占多少",再谈加速倍数。 这句话对 CPU、推理、开发流程都成立。
4. 四类资源的定义与用法(E-S23-014)
| 资源 | 回答什么 | 单位 | 常见误用 |
|---|---|---|---|
| 容量 | 能同时放下多少数据 | byte(GB/GiB) | 用 TiB 与 TB 混算 |
| 计算吞吐 | 单位时间能算多少 | FLOP/s(TFLOP/s) | 拿稀疏峰值当稠密用 |
| 带宽 | 单位时间能搬多少 | byte/s(GB/s、TB/s) | 把网络 bit/s 直接当 byte/s |
| 延迟 | 一次操作要等多久 | ns / μs / ms | 只看带宽,忽略启动与往返 |
4.1 三个时间下界
T_compute ≥ F / Π F = 计算量(FLOPs),Π = 峰值算力
T_memory ≥ R / β R = 读写字节数,β = 接口带宽
容量约束:M ≤ M_cap M = 需同时驻留的字节数
利用率指标(原文定义,全书反复用):
| 指标 | 公式 | 含义 | 上限 |
|---|---|---|---|
| MFU | F / (Π·T) |
算力被用掉多少 | ≤ 1 |
| MBU | R / (β·T) |
带宽被用掉多少 | ≤ 1 |
判据:MFU 低而 MBU 高 → 带宽瓶颈;MFU 高而 MBU 低 → 算力瓶颈。 这一条比"看 profiler 猜"快得多。
4.2 单位换算(最容易出错的地方)
容量:1 GB = 10^9 B;1 GiB = 2^30 B(差 7.4%)
网络:8 bit = 1 byte
400 Gbit/s 网卡 → 400/8 = 50 GB/s 线速
传输 1 GB → 1/50 s = 20 ms(理想、不含启动与开销)
原文的例子:141.11 GB ≈ 131.42 GiB。混用单位是容量评估最常见的错误。
5. GPU 资源速查表(原文表 1-3)
| 资源或操作 | RTX 4090 | A100 80GB SXM | H100 SXM |
|---|---|---|---|
| 显存容量(GB) | 24 | 80 | 80 |
| 显存带宽(TB/s) | 1.008 | 2.039 | 3.35 |
| BF16 矩阵峰值(TFLOP/s) | 165.2 | 312 | 989.4 |
| 按带宽峰值读 1 GB(ms) | 0.99 | 0.49 | 0.30 |
用法:R/β 与 F/Π 都从这张表取数。改写任何一项,结论按比例变。
口径:容量为厂商名义 GB;带宽为十进制 TB/s;算力为 BF16 输入、FP32 累加、稠密峰值。稀疏峰值通常是稠密的 2 倍——不要混用。
6. 容量预算:三件套一起算(衔接 J07)
原文把容量检查写成一条不等式:
M_W + M_state + M_work ≤ M_cap
M_W : 权重(含量化附加数据)
M_state : 上下文状态(KV 缓存)
M_work : 运行时临时工作区
真实例子(原文):DeepSeek-R1-Distill-Llama-70B
| 项 | 数值 |
|---|---|
| 参数量 | 70,553,706,496(约 705.5 亿) |
| BF16 权重 | N × 2 B = 141.11 GB(≈131.42 GiB)→ 超过一张 H100 的 80 GB |
| 8 比特分组量化(每 128 权重共享 scale) | 73.73 GB → 单卡可放,剩约 6.27 GB |
| 单条 8192 token 请求的 BF16 KV | 2.5 GiB ≈ 2.68 GB |
| 工作区预留 | 2 GiB ≈ 2.15 GB |
| 合计 | 73.73 + 2.68 + 2.15 = 78.56 GB ≤ 80 GB ✅ |
换成 RTX 4090(24 GB):73.73 GB 权重超过 三张 4090 合计的 72 GB → 至少 4 张,且每张还要各自留 KV 与工作区。
判据:"装得下"从来不是只看权重。 权重 + KV + 工作区三者一起算,才是可用容量。
7. 前提与边界
| 结论 | 成立条件 | 不成立时 |
|---|---|---|
用 max(F/Π, R/β) 当步长时间 |
计算与读取能充分重叠 | 强依赖链 → 只能相加,下界变差 |
| 峰值算力可直接用 | 稠密矩阵、精度匹配 | 稀疏/混合精度 → 取对应口径 |
| 名义容量当可用容量 | 预留工作区后可近似 | 碎片、显存对齐 → 实际可用更少 |
| 2009 年比例仍适用 | 看相对量级 | 具体数值须换成当前设备 |
8. 常见误区
| 误区 | 纠正 |
|---|---|
| 用 GB 与 GiB 混算 | 差 7.4%,跨 80 GB 边界时结论会反转 |
| 把 Gbit/s 当 GB/s | 差 8 倍(400 Gbit/s = 50 GB/s) |
| 只看算力不看带宽 | 带宽瓶颈时加算力几乎无效(J07 会算) |
| 忘了工作区 | 显存"差一点"往往就差在工作区 |
| 用稀疏峰值算稠密负载 | 高估性能 2 倍 |
9. 自测
- 400 Gbit/s 传 1 GB 的理想时间是多少?加上 0.1 ms 启动开销后是多少?
- 141.11 GB 权重放到两张 80 GB 卡上,每卡占多少、剩多少?
- 某流程中数据传输占原时间 80%,把传输加速到 10 倍,整体加速比是多少?
- MFU 0.2、MBU 0.85,说明瓶颈在哪?
答案
- 50 GB/s → 20 ms;加启动约 20.1 ms。
- 每卡 70.55 GB,剩约 9.45 GB(名义容量)。
1/((0.2)+0.8/10) ≈ 3.57×(上限 5×)。- 带宽瓶颈(MBU 接近 1,MFU 低)。
10. 下一篇
S23-J07 · 用几个数字估算一次模型执行 —— 把本节四类数字用到具体模型上:70B 模型 10 ms 目标能不能达到、算力翻倍为什么没用、batch 的转折点在哪。