认识大模型推理

LLM推理在做什么

训练是更新参数;推理是在固定参数下,根据输入token序列计算下一个token的分布,再采样,循环直至结束。推理不关心梯度,关心延迟、吞吐、显存占用

对Decoder-only Transformer(如GPT、Qwen、LLaMA):

  • 输入:一段prompt(可视为token序列(x_1, … , x_T))。

  • 输出:在prompt之后逐个生成token,直到EOS或达到最大长度。

Prefill阶段(填充阶段)

定义:第一次(或某一扩写轮次)对整个prompt(后一批新token)做前向,计算每层的Q、K、V,并写出KV Cache供后续步复用。(用户输入完prompt到生成首个token的过程)

特点

  • 计算密集(Compute-bound):矩阵乘维度大,GPU容易饱和算力

  • 可并行度高:prompt内token之间在因果掩码下仍可做高效注意力。

思考:为什么说矩阵乘维度大,是计算密集型,GPU容易饱和算力

Decode阶段(解码阶段)

定义:从已生成的最后一个位置开始,每步只输入1个新token(或每序列一步),读取历史KVCache,计算当前步注意力,再采样下一个token。(生成首个token到推理停止的过程)

特点

  • 内存/带宽密集(Memory-bound):每步算子相对小,瓶颈常在读KV、写KV、以及内核启动。

  • 步数多:生成长度为(N)时,decode要跑约(N)步。

思考:为什么说Decode阶段是内存/带宽密集型的

问题

  1. 推理和训练反向传播的主要区别?
  2. 为什么说Decode阶段是memory-bound?
  3. 首token延迟主要受什么影响?
  4. 自回归能不能并行生成多个token?
  5. Batch size在Prefill与Decode中含义有何不同?
  6. 显存主要被谁吃掉了?