认识大模型推理
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阶段是内存/带宽密集型的
问题
- 推理和训练反向传播的主要区别?
- 为什么说Decode阶段是memory-bound?
- 首token延迟主要受什么影响?
- 自回归能不能并行生成多个token?
- Batch size在Prefill与Decode中含义有何不同?
- 显存主要被谁吃掉了?