❤️ 15/15

地基:推理分两段,输出 token 才是延迟与成本的大头

做成本 / 延迟工程,第一步是理解 LLM 生成分两个阶段(NVIDIA 推理优化指南):

- Prefill(预填充)——一次性并行处理整段 prompt、算出第一个 token,是矩阵-矩阵运算,能打满 GPU 算力,属计算受限(compute-bound),决定首 token 时间(TTFT)
- Decode(解码)——按自回归逐个吐 token,每步是矩阵-向量运算、算力利用率低,瓶颈是把权重和 KV 从显存搬进 GPU 的带宽,属显存带宽受限(memory-bound),决定逐 token 间隔(ITL)

这条分界就是后面所有优化的地基:减 prompt 长度主要省 prefill / TTFT,减输出长度主要省 decode / 总时长。

🔆把推理想成做菜:prefill 是把所有食材一次性下锅爆炒,火力(算力)拉满、一下就出第一口(首 token);decode 是之后一勺一勺往外盛,瓶颈不在灶火,而在你来回跑储藏室(显存)取料的速度。所以菜(输出)越长,跑储藏室的次数越多,总耗时就越久。

由此得到一条反直觉但很实用的结论(Anthropic 降延迟文档 + NVIDIA):输出 token 通常单价高于输入 token,而且因为 decode 是逐 token、显存受限的串行过程,生成长度往往是端到端总时长的主导项——少生成 token 比少喂 token 对延迟影响更大。

Anthropic 官方给的降延迟三招正对应这点:

1. 选对模型——速度敏感的场景用更快的 Claude Haiku;
2. 优化 prompt 和输出长度——让模型简洁、用 max_tokens 设硬上限;
3. 用流式(streaming)——让首 token 尽早到达,改善体感响应。

一个细节坑:要求「按句 / 段限制」比「按精确字数限制」更有效,因为模型是按 token 而非按词计数的。

📷 配图位:一条横向时间轴,左段标「Prefill(compute-bound,决定 TTFT)」一整块并行处理 prompt,右段标「Decode(memory-bound,决定 ITL/总时长)」一个个串行吐出的小方块,箭头标注「输出越长,这段越长」