> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/09_decoding/summary.md).

# 本章小结

本章沿着一条链展开：前向交出一行 logits，经约束与偏置、惩罚、温度、截断、选词、停止判定六个环节，变成一个词元，再送回模型。各节的结论如下。

**自回归解码（9.1 节）。** 选出 n 个词元需要 1 次 Prefill 加 `n − 1` 次 Decode，带 KV 缓存时每轮只送入 1 个词元。Llama 3 8B 的 LM head 约占一轮 Decode 矩阵乘法的 7%，此后各环节的运算量比前向低约五个数量级。循环有四种出口；“模型停不下来”多数是停止集合配漏，例如对话模型只配了 `<|end_of_text|>` 而漏了 `<|eot_id|>`。批量生成用左填充并让位置索引跳过填充，服务引擎则用不填充的一维批。流式输出要按窗口增量反分词，等 UTF-8 字节凑齐再发。

**贪心与束搜索（9.2 节）。** 贪心只看单步，两步小树里它得到 0.200，束宽 2 得到 0.360。束搜索每轮从 `W × n_vocab` 个候选中取 W 个（W 是束宽，全书其余各处的 B 是批大小），KV 缓存按 `beam_idx` 重排。累积对数概率偏好短序列，长度归一化的指数是要按任务调的旋钮。Prefill 只做一次，共享 Prompt 后 KV 占用由 `W × (P + t)` 降到至多 `P + W × t`。束宽并非越大越好：对翻译模型做精确搜索，51.8% 的句子最高分输出是空译文。概率最高不等于最好。

**采样（9.3 节）。** 温度 $\tau$ 等价于对概率取 $1/\tau$ 次幂，不改变 argmax，只改变熵。Top-k 看名次，Top-p 看累积质量，Min-p 看相对峰值的比例；分布被拉平时 Top-p 的核里会装进大量尾部词元，Min-p 在峰值很高时退化为贪心。乘性的重复惩罚对 logit 尺度敏感，加性的频次惩罚随输出长度累积。处理顺序是结果的一部分：同样的 $\tau = 2$、`top_p = 0.9`，先调温度保留 4 个词元，先截断只保留 3 个，而各引擎的默认顺序并不相同。最后的抽取用指数竞赛实现，即逐元素除以指数噪声再取 argmax，与 Gumbel-Max 等价；指定 Top-k 或 Top-p 时，vLLM 在 CUDA 上默认改走 FlashInfer 的拒绝采样内核。`temperature = 0` 不保证可复现，规约顺序随批组成变化，并列的 logit 会被翻转。

**约束解码（9.4 节）。** 每一轮按语法状态遮掉不合法词元，输出的每个前缀必然合乎语法。难点在于语法写在字符上而模型选的是词元，一个词元可以横跨几个语法成分，合不合法取决于状态。代价是逐步归一化不等于原分布在合法输出上的条件分布；它也不保证输出在截断之前写完，更不保证语义正确。引擎一侧的索引、缓存与重叠执行见 [11.7 节](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/11_serving/11.7_constrained_decoding.md)。

**解码侧的推理时扩展（9.5 节）。** 二元简化下，单条正确率 0.6 时 5 票多数的正确率是 0.683；单条正确率低于一半且错误集中时，票越多错得越稳。采到正确答案容易，选出它才是瓶颈，奖励模型作选择器时 n 过大还会选中钻空子的样本。并行采样共享 Prefill，Decode 受带宽限制，采 8 条的单轮耗时只增加约 8%，按 N 倍增长的是词元数和 KV 占用；单路径加长则直接拉长延迟。训练一侧的内容见 [14.6 节](/llm_internals/di-si-bu-fen-mo-xing-yu-qian-yan-pian/14_future_trends/14.6_test_time_scaling.md)。

**扩散语言模型（9.6 节）。** 掩码去噪把前向次数从生成长度中解耦出来，代价是同一步内解开的位置按条件独立采样。块扩散在画布内并行去噪、画布间自回归，已定稿的画布写入 KV 缓存。按模型卡的数字，生成 256 个词元的计算量是自回归的 13 到 17 倍，前向次数是它的 1/15 到 1/20。收益来自把瓶颈从访存转向算力，套利的是低并发时闲置的算力，随并发升高而消退。

9.5 节和 9.6 节的成本账都借用了“访存受限”“拐点”这两个概念，其定义和推导在[第十章](/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/10_inference_optimization.md)。

***

> 📝 **发现错误或有改进建议？** 欢迎提交 [Issue](https://github.com/yeasy/llm_internals/issues) 或 [PR](https://github.com/yeasy/llm_internals/pulls)。
