附录 A 公式与速查
这一页把全书用到的账集中在一处,做估算时可以直接查。所有公式都是近似,忽略固定开销和碎片,用来判断量级,不用来做验收。
显存
权重体积等于参数量乘以每参数字节。FP16 和 BF16 是二字节,FP8 和 INT8 是一字节,INT4 是半字节。7B 模型 FP16 约 14 GB。
KV 缓存每条请求的字节数等于二乘以层数、KV 头数、每头维度、序列长度和每元素字节数。8B 的 GQA 模型每 token 约 128 KiB,8K 请求约 1 GiB。
可用并发约等于(显存减去权重再留两到四 GiB 余量)除以单条请求的缓存。这是上限,实际要按块内碎片和淘汰策略打折。
时间
预填充的计算量约为两倍参数量乘以输入长度。8B 模型 8K 输入约 131 TFLOP,加上注意力部分约 166 TFLOP。
逐字生成的单步时间约等于权重字节数除以显存带宽。7B 模型 FP16 在 A100 上约 6.9 毫秒。
总时间约等于首字延迟加输出长度乘以单步时间。批处理时单步时间不变,多出来的计算被并行的请求摊掉。
瓶颈判断
硬件的算力带宽比等于峰值算力除以显存带宽,单位是每字节多少次运算。A100 约 153,H100 约 295。
任务的算术强度等于运算量除以读取字节数。逐字生成接近一,远低于硬件比值,所以是带宽受限;预填充可以到几千,高于硬件比值,所以是算力受限。
批处理的交叉点约等于硬件的算力带宽比。A100 上约 153,超过它之后每步时间开始随批量上升。
容量与成本
利特尔法则:系统中的平均请求数等于到达率乘以平均停留时间。每秒 10 条、每条 5 秒,就需要能同时容纳 50 条。
每百万 token 成本等于每小时成本除以每小时产出的百万 token 数。产出一百万 token 需要的时间,等于一百万除以单步产出。
硬件常数
| 型号 | FP8 稠密算力 | 显存 | 带宽 |
|---|---|---|---|
| A100 | 不适用 | 80 GB | 2.04 TB/s |
| H100 | 1979 TFLOPS | 80 GB | 3.35 TB/s |
| H200 | 1979 TFLOPS | 141 GB | 4.8 TB/s |
| B200 | 约 5 PFLOPS | 192 GB | 8 TB/s |
| L40 | 362 TFLOPS | 48 GB | 864 GB/s |
A100 没有 FP8 张量核心,表里不填。跨卡带宽:节点内 NVLink 在 Hopper 上 900 GB/s,机器间 InfiniBand 每张网卡 50 GB/s。
五步判断
第一步,看 config.json 里的层数、隐藏维度、KV 头数、词表大小。
第二步,算权重和单条缓存,判断装不装得下。
第三步,算首字延迟和出字速度,判断达不达标。
第四步,用利特尔法则算并发需求,折算成卡数。
第五步,看瓶颈在哪一段,再决定用量化、缓存、投机还是并行。
顺序不能反。先加优化再判断瓶颈,是最常见的浪费。