从第一性原理理解 LLM 推理经济学:中文导读与总结
说明:本文是对原文论点的中文转述、归纳和关键数据整理,不是全文逐句翻译。原文发表于 2025 年 5 月 14 日,讨论以 Llama 3.3 70B 为例,解释大语言模型推理的硬件成本、吞吐量与单位 token 经济性。
- 原文标题:LLM Inference Economics from First Principles
- 作者:Piotr Mazurek、Felix Gabriel
- 原文链接:Tensor Economics
一句话总结
LLM 推理的经济性,关键不只是“GPU 算得有多快”,还在于每个 token 生成时要从显存读取多少数据、这些读取成本能否由批处理中多个请求共同分摊。预填充(prefill)通常是算力受限,逐 token 解码(decode)通常是显存带宽受限;提高批大小能摊薄模型权重读取成本、提升总吞吐量,但会占用更多 KV cache,并可能降低单个用户的响应速度。
文章的论证脉络
1. 推理成本从哪里来
模型服务商需要为 GPU 的购置或租用付费。GPU 的小时成本相对固定,而每小时能产出的 token 数有限,因此单位 token 成本可粗略理解为:
单位 token 成本 ≈ GPU 运行成本 ÷ token 吞吐量
若同一套硬件能以更高吞吐服务更多请求,固定的硬件成本就能由更多 token 分摊,单位成本随之下降。
2. 为什么以 Llama 3.3 70B 为例
作者从模型参数量推导硬件需求。Llama 3.3 70B 约有 705.5 亿个参数。若以 BF16 存储,每个参数占 2 字节,光模型权重就约需 141 GB 显存。单张 80 GB 的 H100 无法容纳完整权重,因此要使用多张 GPU;多 GPU 又会带来并行和通信开销。
文章列出的主要模型结构因素包括:
- 嵌入层和输出语言模型头(LM head);
- 多个 Transformer 层,每层含自注意力和 MLP;
- Llama 使用 Group Query Attention,因此 K、V 投影规模小于 Q 投影;
- MLP 中间维度约为隐藏维度的 3.5 倍。
参数量公式的目的,是说明“70B”如何转化成显存需求,并非只看模型名称就能忽略数据精度、缓存等资源占用。
3. GPU 的两种关键能力:算力与显存带宽
文章区分了:
- 计算吞吐量:每秒可执行多少浮点运算(FLOPS);
- 显存带宽:每秒可从高带宽显存(HBM)读取多少数据。
程序需要的计算量与数据搬运量之比称为算术强度。算术强度高时更容易受计算能力限制;算术强度低时,瓶颈更可能是数据从显存传到计算单元的速度。
LLM 推理的两个阶段正好呈现不同瓶颈:
| 阶段 | 做什么 | 主要瓶颈 | 直观后果 |
|---|---|---|---|
| Prefill(预填充) | 一次处理输入提示词,计算首个新 token | 通常是计算吞吐量 | 影响首 token 延迟(TTFT) |
| Decode(解码) | 每次生成一个新 token | 通常是显存带宽 | 影响持续生成速度(tokens/s) |
4. Prefill:输入越长,注意力计算越重
预填充阶段需要处理整个输入序列。注意力中的矩阵运算随序列长度增加而变重;朴素注意力的主要计算量包含与 序列长度平方 成正比的项。因此,输入提示越长,首 token 等待时间通常越长,预填充在整次请求耗时中的占比也会升高。
以文章的简化计算为例,Llama 3.3 70B 处理 2,048 个输入 token,估算约需 291 TFLOPs。按文中采用的 H100 理论算力约 989 TFLOPs/s 估算,计算部分约需 0.29 秒;而读取约 141 GB 模型权重、按 3,350 GB/s 显存带宽计算,理论上约需 0.04 秒。由此作者判断:prefill 更偏向算力受限。
这只是理想化估算,实际时间还受内核实现、利用率和调度等因素影响。
5. Decode:KV cache 节省重算,却增加显存读取
如果每生成一个 token 都重新计算此前全部 token 的注意力,会产生大量重复工作。KV cache 会保存先前 token 的 Key、Value 中间结果,使新 token 只需计算与既有上下文的关系,从而避免重复计算。
这会显著减少每步计算量,但并不意味着解码就很轻松:每个生成步骤仍需读取模型权重,同时还要读取历史 KV cache。文章以 2,048 token 的上下文为例:
- 单步解码的计算量约为 291 TFLOPs ÷ 2,048,即 0.14 TFLOPs;
- 在文章采用的 H100 理论参数下,这些计算约需 0.00014 秒;
- 但读取权重本身约需 0.04 秒,远长于计算时间。
所以在该简化模型中,decode 主要是显存带宽受限,GPU 的计算单元会在等待数据时无法充分利用。
KV cache 会随上下文长度和批大小线性增加。Llama 3.3 70B、BF16、单条 2,048 token 序列的 KV cache 约为 671 MB;在约 128K token 的上下文下,单条序列可能达到约 40 GB。上下文很长或批量很大时,KV cache 可能从次要开销变成主要开销。
6. 多 GPU:容量和带宽增加,也有通信税
将模型分到多张 GPU 上有两种常见方式:
- 流水线并行(Pipeline Parallelism):按层拆分模型。设备间通信相对少,可让不同批次在不同 GPU 阶段重叠执行;但单个请求经过各阶段时,延迟可能较高,调度也更复杂。
- 张量并行(Tensor Parallelism):把单层矩阵运算切分到多张 GPU 同时完成,可缩短单层计算时间并合并显存带宽;代价是需要频繁同步和跨卡通信。
更多 GPU 不只是为了“装下模型”:它们还增加可用显存带宽,并为 KV cache 留出空间,从而允许更大的批次。但跨卡通信、同步等待以及实际实现中的开销会让真实性能低于理论峰值。
7. 批处理是单位成本优化的关键
在 decode 阶段,生成一个 token 的主要成本之一是读取模型权重。批处理中可以一次读取权重,并用这份已载入的权重同时处理多个请求。于是:
- 批大小增加,计算工作量和生成 token 数近似随之增加;
- 模型权重不必为每个请求重复读取,读取成本可以由多个请求共同分担;
- 总吞吐量通常会随批大小提高,单位 token 成本因此下降。
这就是文章强调的规模经济:足够稳定的需求、持续形成的大批次,是推理服务获得较好单位经济性的关键条件。
不过,批次并非越大越好。批次越大,KV cache 占用越多,单个用户的生成速度可能下降;在极长上下文或很大批次下,KV cache 的读取成本会逐渐抵消吞吐收益。服务商因此需要在总吞吐/成本与单用户延迟/体验之间取舍。低时效要求的 Batch API 更容易以更大的批次运行,所以往往能提供更低价格。
8. 理论吞吐与真实吞吐有差距
作者将理论模型与 4 张 H100 上运行 vLLM 的 Llama 3.3 70B 测试进行比较。该实验中,小批次实际性能约为理论估算的 60%,批次增大后约降到 40% 左右。这些比例是文章特定硬件、软件、负载和测试设置的结果,不应视为普遍常数。
差距来源包括:
- 理论峰值利用率无法在真实程序中持续达到;
- GPU 内核启动、内存访问模式、同步和跨卡通信开销;
- Flash Attention、Paged Attention、服务引擎和框架实现细节;
- 批次调度、上下文长度及缓存布局带来的额外复杂度。
作者指出,简化模型可建立直觉,但在不同模型、批次、输入输出长度下可能出现明显偏差。要得到可靠吞吐数据,通常应在目标硬件和实际服务栈上做基准测试。
9. 从吞吐量估算 token 价格
文章给出一种简化的成本分摊办法:先测量一组请求的运行时间和 GPU 小时成本,再假设输入 token 与输出 token 的单位成本比例 γ,据此估算单位 token 价格:
|
|
其中 γ 是人为选定的简化参数,并非普适规律。文章示例使用 4 张 H100、每张每小时 2.5 美元、运行 8.96 秒、每个请求约 2,035 个输入 token 和 300 个输出 token、批大小 16,并取 γ = 0.3,估算约为:
- 输出:1.72 美元 / 百万 token
- 输入:0.51 美元 / 百万 token
这些数值是基于特定租赁价格、负载、批次与假设计算的成本示例,并非市场报价或通用价格。输入/输出比例、GPU 利用率、实际延迟和服务开销改变时,结果会变化。文中还指出,现实中的批次未必是所有请求具有相同长度,因而更稳妥的方式是针对多个真实负载进行测量,并用多组样本估算。
关键结论
- 模型权重大小决定基本显存门槛;但部署成本还取决于精度、KV cache、批次和服务实现。
- Prefill 通常偏计算受限,输入上下文越长,首 token 延迟越容易上升。
- Decode 通常偏显存带宽受限,每步读取模型权重和历史 KV cache 是重要开销。
- 批处理通过共享权重读取成本提升吞吐、降低单位 token 成本,但会占用更多 KV cache,并可能牺牲单请求速度。
- 显存容量和带宽都重要:容量关系到能否装下模型与缓存,带宽关系到每秒能喂给计算单元多少数据。
- 多 GPU 带来带宽与缓存容量的同时,也引入通信和同步成本;GPU 数量更多并不自动保证真实吞吐线性提升。
- 第一性原理模型适合建立判断框架,不能替代实测。部署决策应使用目标模型、硬件、软件栈和实际流量形态做 benchmark。
- 对边缘设备而言,通常难以像云服务那样聚合大量并发请求形成大批次,因而不容易享受同等的规模经济;设备折旧、耗电和相对较低的内存带宽也会影响每 token 成本。
术语速查
| 术语 | 中文解释 |
|---|---|
| Inference | 推理:使用已训练模型生成结果 |
| Token | 模型处理文本的基本单元,不等同于一个汉字或一个单词 |
| Prefill | 预填充:处理输入上下文并生成首个新 token 的阶段 |
| TTFT | Time to First Token,首 token 延迟 |
| Decode | 解码:逐 token 生成输出的阶段 |
| KV cache | 键值缓存:保存历史 token 的 Key/Value 中间状态,避免重复计算 |
| HBM | 高带宽显存,GPU 主要权重和缓存驻留的内存 |
| FLOPs / FLOPS | FLOPs 是浮点运算次数;FLOPS 是每秒浮点运算次数 |
| Batch size | 批大小:同一轮同时处理的请求数或样本数 |
| Tensor parallelism | 张量并行:把单层张量运算拆到多张 GPU 上协同完成 |
| Pipeline parallelism | 流水线并行:将模型不同层分配到不同 GPU 阶段 |
阅读时的边界提醒
原文的重点是建立推理成本的直觉,而不是提供可直接套用的商业报价模型。其吞吐估算包含理想化假设,输入/输出 token 定价还依赖人为设定的成本比例。文中的模型规模、硬件参数、租赁价格和实测结果也对应其写作及实验时的具体环境;将这些结论用于今天的部署或预算时,应重新核对目标硬件规格和实际基准测试数据。