什么是 解码阶段(Decode Phase)?

解码阶段(Decode Phase)是 Prefill 之后的自回归 LLM 推理阶段,系统不断接受输出 Token、扩展序列与可复用模型状态,直到满足停止条件。

快速了解

规范文档官方规范

工作原理

测量边界

客户端 Decode Duration 从首个非空流式输出到最后一个非空输出。[AIPerf 指标参考](https://docs.nvidia.com/aiperf/reference/ai-perf-metrics-reference)与 [vLLM 指标设计](https://docs.vllm.ai/en/stable/design/metrics/)给出事件边界。请求级 TPOT 用该区间除以 output_tokens - 1,因为首 Token 结束 TTFT,只有后续间隔位于 Decode Duration 内。ITL 逐个测量输出间隔。Chunk 合并、Reasoning Event、重试与抢占都会使结果不同。

调度与状态

Continuous Batching 会组合多个活跃序列的 Decode 位置,并在调度边界接纳新请求。它可能提高聚合利用率,同时降低单用户 Token 速率或增大 Jitter。Preemption 可能驱逐或重算状态,[DistServe](https://arxiv.org/abs/2401.09670) 也说明分离式设计必须计入 KV Transfer 与 Placement。比较时应同时记录 Queue、Cache Pressure、Preemption、Batch Occupancy 和 Cancellation,不能把所有延迟都归因于模型 Kernel。

优化与质量

量化、优化 Attention、KV Cache 布局、推测解码与并行策略都可能改变 Decode 成本,但只有输出语义仍满足要求时,速度提升才有效。固定模型、Tokenizer、Runtime、精度、采样策略和停止条件;使用相同输入输出分布;同时报告 p50/p95/p99 TPOT 或 ITL、单用户输出 TPS、聚合吞吐、错误与质量。更快但发生截断、重复、Schema 违规或 Tool Call 错误的流式输出,不是成功优化。

主要特点

  • 从已接受前缀持续扩展请求,直到得到终止结果
  • 复用并追加 KV Cache 或架构专属循环状态
  • 单请求存在顺序依赖,但不同请求之间可以批处理
  • 一次模型步骤或流式 Chunk 可能包含多个 Token
  • 常用 Decode Duration、ITL、TPOT 与限定口径的输出 TPS 测量
  • 必须结合质量、停止行为、失败与 Cache Pressure 评估

常见用途

  1. 排查首个输出到达后流式文本过慢或节奏不稳
  2. 在相同 SLO 下比较连续批处理与推测解码
  3. 为长输出和并发序列规划 KV Cache 容量
  4. 区分首个输出响应性与持续生成速度
  5. 发现 Runtime 优化引入的质量或终止行为回退

示例

loading...
Loading code...

常见问题

Decode 阶段每一步一定只生成一个 Token 吗?

传统自回归解码在每个位置上存在顺序依赖,但推测解码和多 Token 方法可以让一次目标模型步骤接受多个 Token。流式传输也可能把多个 Token 合成一个 Chunk,因此步骤、Chunk 与 Token 是不同单位。

Decode Duration 与端到端延迟相同吗?

不同。客户端 Decode Duration 从第一个非空输出开始,到最后一个输出结束;端到端延迟还包含请求传输、排队、预处理、Prefill 和首 Token 生成。

TPOT 与 ITL 有什么区别?

TPOT 是请求级平均值,通常为 `(端到端延迟 - TTFT) / (输出 Token 数 - 1)`;ITL 逐个记录输出事件之间的间隔。Chunk 含多个 Token、节奏不均或聚合权重不同时,两者会不同。

为什么更高的聚合吞吐可能降低单用户 Decode 速度?

调度器可以把更多活跃序列组成 Batch,以摊薄模型权重读取并提高总输出 TPS;但每个序列获得服务的频率可能降低,因此单用户 TPOT 或 Token Delivery Jitter 可能变差。

如何验收 Decode 优化?

在相同模型、Tokenizer、请求分布、输出长度策略和质量测试下回放,对比尾部 TPOT 或 ITL、单用户输出 TPS、聚合吞吐、错误、抢占、显存与合格任务质量,而不是只看峰值 Token 速率。

相关术语

相关文章