2221 字
约 7 分钟
7
S23-J06 · 关键数字:容量、算力、带宽、延迟

适用读者:要写容量评估、要判断"这套配置能不能跑、能跑多快"的人。
前置: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. 自测

  1. 400 Gbit/s 传 1 GB 的理想时间是多少?加上 0.1 ms 启动开销后是多少?
  2. 141.11 GB 权重放到两张 80 GB 卡上,每卡占多少、剩多少?
  3. 某流程中数据传输占原时间 80%,把传输加速到 10 倍,整体加速比是多少?
  4. MFU 0.2、MBU 0.85,说明瓶颈在哪?
答案
  1. 50 GB/s → 20 ms;加启动约 20.1 ms。
  2. 每卡 70.55 GB,剩约 9.45 GB(名义容量)。
  3. 1/((0.2)+0.8/10) ≈ 3.57×(上限 5×)。
  4. 带宽瓶颈(MBU 接近 1,MFU 低)。

10. 下一篇

S23-J07 · 用几个数字估算一次模型执行 —— 把本节四类数字用到具体模型上:70B 模型 10 ms 目标能不能达到、算力翻倍为什么没用、batch 的转折点在哪。

S23-J06 · 关键数字:容量、算力、带宽、延迟
https://www.clxhxhhr.top/posts/5533/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。