模型加速
本文最后更新于 2026年7月30日 下午
北京大学信息科学技术学院 生成模型基础(2025秋)的课程笔记
第七讲:Acceleration
前面我们已经详细介绍了五种主流生成模型的原理
它们分别是:VAE AR GAN Flow Diffusion
从这一讲开始我们会介绍一些补充内容,也可称作Special Topic
这些内容相对不那么硬核,比较短小精悍,可以作为之前主干知识的拓展
为什么需要加速
对于自回归模型来说,每生成下一个token都要进行一次前向传播
设当前上下文为$x_{1:t}$,则生成过程为
$x_{t+1} \sim p_\theta(x|x_{1:t})$
因此生成长度为$T$的文本就需要进行$T$次前向计算
耗时耗力,成本高,因此加速必不可少
接下来我们会介绍几种主流的加速方法
推测式解码
这种方法的核心思想是:
使用小模型成本较低,但准确率不够好;使用大模型时则是准确率较高,但成本也高
因此我们可以先用小模型生成,然后用大模型验证
具体可以分成三步:
- Draft Construction:首先给定上下文$s=(x_1,x_2,…,x_t)$,由小模型生成$ (x_{t+1},…,x_{t+m}) $,这一步成本很低
- Draft verification:将小模型生成的 Draft 和 Prompt 一起输入大模型。由于 Transformer 可以并行计算整个序列,因此一次 Forward 即可得到 Draft 每个位置的预测概率。然后判断:哪些 token 可以接受,第一个错误 token 在哪里
- Draft Correction:找到第一个错误的 token,这个 token 改用大模型生成,然后这个 token 之前的内容就可以认为是正确的,全部保留,接着继续让小模型生成新 Draft,如此循环往复
显然,如果 Draft 能够保证有一定成功率的话,是可以降低成本实现加速的
那么问题来了:我们是否能确保,用这种方法生成的结果,等价于直接从大模型中采样?
我们假设大模型分布$q(x)$,小模型$p(x)$,用下面方法采样
ppt上最终用数学推导证明了二者的等价性,这里不再详细说明
模型压缩
除了刚才推理的trick之外,我们还可以直接压缩模型
这主要由于现代深度网络通常具有过参数化(Overparameterization),也即模型参数远大于训练样本数量,存在一些冗余参数,因此删除一部分之后性能通常不会明显下降
下面我们将介绍三种常用的压缩方式:
Pruning(模型剪枝)
基本流程大概就是训练、删除部分参数、微调、剪枝
具体的剪枝又分为两种:
- Unstructured Pruning:删除任意位置的权重
精度损失小,但是GPU很难直接加速,稀疏矩阵也没那么好算 - Structured Pruning:按照结构来删除,例如删除一整个channel,layer这样,把3×5的矩阵变成2×5
精度损失比较明显,好在计算量确实有减少,GPU能起到一定加速作用
对于Transformer的剪枝,有一篇著名论文:Are Sixteen Heads Really Better Than One
主要阐述了对multi-head attention的剪枝
实验结果说明了稍微删去一两个head,准确率的下降其实不太明显
Quantization(模型量化)
基本思想就是把高精度参数变成低精度表示
例如Float64,32,16到Int8,精度逐渐下降的同时
虽然性能会变差,但是显存更小,推理更快
因此量化目标就是:用尽可能低的精度,保持模型性能基本不变
具体可以量化:
- Weight(模型参数)
- Activation(激活值)
- Gradient(训练阶段梯度)
其中LLM 最常见的是 Weight Quantization。
总而言之量化是一种十分有效的方法,但需要工程上的大量投入
量化之后还需要Fine Tuning来解决不稳定性问题,也需要很多trick
Knowledge Distillation(知识蒸馏)
这个应该是出现频率最高的办法了,毕竟现在各大llm厂商天天吵来吵去,说你的模型蒸馏了我的,我的又蒸馏了他的,真可谓百花齐放百家争鸣
主要思想就是用一个老师模型来指导学生模型
假设老师模型是$f()$,学生模型是$g_\theta()$,输入是$x$,ground truth为$y$
那么总损失$L=loss(g_\theta(x),f(x))+\alpha loss(g_\theta(x),y)$
其中第一项保证学生确实学到了老师的知识,第二项保证学生预测的尽可能接近实际
当然知识蒸馏不仅可以用于language model,也可用于diffusion model,用来减少采样步数