理解推理优化的第一步,是弄清楚大语言模型推理的瓶颈到底在哪里。
LLM 推理可分为两个截然不同的阶段:
预填充阶段(Prefill):处理用户输入的所有词元,一次性计算它们之间的注意力。这个阶段是计算密集型的——GPU 的算力是瓶颈,类似训练中的前向传播。
生成阶段(Decode/Generation):逐个生成新的词元,每次只计算一个新词元与之前所有词元的注意力。这个阶段是访存密集型(Memory-Bound)的——每生成一个词元,都需要从 GPU 显存中加载完整的模型权重和 KV 缓存,但实际计算量很小。
在生成阶段,每个词元的计算涉及:
加载所有层的权重矩阵(总大小 = 模型参数量 × 字节数/参数)
加载 KV 缓存(总大小随已生成序列长度线性增长)
实际的矩阵-向量乘法运算
以一个 70B 参数的 FP16 模型为例:每生成一个词元需要加载约 140 GB 的权重。即使使用 H100 GPU(显存带宽约 3.35 TB/s),纯加载时间就约 42 毫秒——而实际的计算时间远小于此。
这就是为什么生成阶段的算术强度(每字节访存对应的浮点运算数)极低,GPU 的计算单元大部分时间在等待数据加载。
基于这一分析,推理优化技术大致可分为三类:
减少访存量:量化(用更少的位数存储权重)、剪枝(减少参数数量)
减少重复计算:KV 缓存(避免重新计算之前词元的注意力)
提高并行度:投机解码(一次验证多个词元)、连续批处理(更好地利用 GPU 计算资源)
最后更新于1天前