Skip to content
🔗 分享本题
查看我的学习进度 →

LLM Prefill 并行处理提示与 Decode 串行生成的阶段瓶颈图

🧠 记忆锚点:Prefill 并行吃完整提示,决定首 token;Decode 串行追加 token,决定流式速度。

💡 答案要点

自回归生成 = 逐个生成 token,每个 token 依赖前面所有 token

两个阶段:

┌─────────────────────────────────────────────────────────┐
│                  LLM 推理两阶段                          │
└─────────────────────────────────────────────────────────┘

Prefill(预填充)阶段:
  输入:用户提示词(如 1000 tokens)
  输出:第一个生成 token
  特点:并行计算,计算密集

Decode(解码)阶段:
  输入:已生成的 tokens
  输出:下一个 token
  特点:串行生成,访存密集

详细对比:

维度PrefillDecode
计算模式并行(整个 prompt)串行(一个 token)
计算量大(O(n²))小(O(n))
瓶颈计算(Compute-bound)内存(Memory-bound)
GPU 利用率高(80-90%)低(5-15%)
延迟一次性(200-500ms)累积(每个 20-50ms)
KV Cache生成复用

示例(生成 "今天天气真好"):

输入:"请用5个字描述今天的天气"(15 tokens)

Prefill 阶段:
  输入:整个 prompt(15 tokens)
  计算:一次性算出所有 token 的 KV
  输出:"今"
  时间:200ms

Decode 阶段:
  循环5次:
    输入:"今" → 输出:"天"(50ms)
    输入:"今天" → 输出:"天"(50ms)
    输入:"今天天" → 输出:"气"(50ms)
    输入:"今天天气" → 输出:"真"(50ms)
    输入:"今天天气真" → 输出:"好"(50ms)
  总时间:250ms

总延迟:200ms + 250ms = 450ms

优化策略:

阶段优化方向技术
Prefill提升计算效率FlashAttention、Tensor并行
Decode减少内存访问KV Cache量化、PagedAttention

面试话术:

"Prefill 是一次性算完 prompt,Decode 是逐个生成。Prefill 吃算力,Decode 吃带宽。优化重点完全不同。"

📚 参考:vLLM 论文:Prefill/Decode 两阶段与自回归生成