Skip to content

LLM 推理的两个阶段

LLM推理过程可以分为两个截然不同的阶段:Prefill阶段和Decode阶段。理解这两个阶段的特性对于推理优化至关重要。

2.4.1 Prefill 阶段(计算密集型)

Prefill 阶段处理输入prompt,计算所有token的KV Cache,为后续生成做准备。Prefill

工作流程

计算特性

特性描述
计算模式乘法 (GEMM)
计算复杂度\(\mathcal{O}(n^2 \cdot d)\)\(n\)
内存访问可预测、连续
瓶颈计算能力 (Compute-bound)
GPU利用率高 (>80%)

性能指标

Prefill阶段的性能通常用 Time-to-First-Token (TTFT) 来衡量:

\(\text{TTFT} = \frac{\text{Prefill计算量}}{\text{GPU峰值算力} \times \text{利用率}}\)

对于 7B 模型在 A100 上的典型数据:

  • 1K tokens prompt: ~50-100ms TTFT
  • 4K tokensprompt: ~200-400ms TTFT
  • 8K tokens prompt: ~500-1000ms TTFT

2.4.2 Decode 阶段(内存密集型)

Decode 阶段是自回归生成过程,每次只生成一个新token,直到遇到结束符或达到最大长度。

工作流程

计算特性

特性描述
计算模式矩阵-向量乘法 (GEMV)
计算复杂度\(\mathcal{O}(n \cdot d)\) 每步
内存访问随机、分散 (访问KV Cache)
瓶颈内存带宽 (Memory-bound)
GPU利用率低 (<30%)

为什么Decode是内存瓶颈?

latex
计算强度分析:

Prefill (GEMM):
  计算量: 2 × M × N × K FLOPs
  内存访问: M×K + N×K + M×N 元素
  计算强度: ~K (高)

Decode (GEMV):
  计算量: 2 × M × N FLOPs
  内存访问: M + N + M×N 元素
  计算强度: ~1 (低)

当计算强度 < 硬件计算/带宽比时,成为内存瓶颈
A100: 312 TFLOPS / 2 TB/s = 156 FLOPs/byteDecode 强度远小于156,因此是内存瓶颈

性能指标

Decode 阶段的性能用 Time-Per-Output-Token (TPOT) 或 Throughput (tokens/s) 衡量:

\(\text{Throughput} = \frac{\text{Batch Size}}{\text{TPOT}}\)

对于7B模型在A100上的典型数据:

  • Batch Size = 1: ~50-100ms/token (10-20 tokens/s)
  • Batch Size = 8: ~60-120ms/token (60-130 tokens/s)
  • Batch Size = 32: ~80-160ms/token(200-400 tokens/s)

2.4.3 两个阶段性能特征对比

特性PrefillDecode
并行度高 (所有token并行)低 (逐个token)
计算类型GEMMGEMV
主要瓶颈算力内存带宽
GPU利用率70-90%10-30%
批处理收益中等
优化重点算力优化内存优化、批处理
典型延迟50-500ms50-150ms/token

2.4.4 端到端推理时间估算

完整的推理请求时间:

\(\text{Total Time} = \text{TTFT} + (\text{Output Length} - 1) \times \text{TPOT}\)

示例:生成256 tokens,Prefill 1K tokens

  • TTFT = 100ms
  • TPOT = 80ms
  • Total Time =100 + 255 × 80 = 20.5 seconds

用心记录,持续成长