精炼模型
随着各类AI模型的高速发展,模型和深度学习系统的体量正在以指数级别逐渐膨胀。越发巨量的计算,存储,能耗等问题让AI从业者们迫不得已寻求对应的解决方案: 如何将巨大的AI模型适配在有
模型量化的一个本质是节约小数点。五年级数学课上,一个重要的问题是确定圆周率3.1415926约到第几位能做到方便估算。GPU等计算硬件同样需要简化小数。节约小数点位可以节省资源,圆周率节约到几位小数可以决定这种估算到底有多准确,模型量化也要面对这样的问题。是否模型量化后精简的模型和原来的模型达到相同的能力,量化-精度平衡。
PTQ量化前身-OBS剪枝
模型剪枝是把模型裁剪部分权重的过程。1993年Hassibi 指出由于剪枝一个深度学习模型时造成的错误 相对于剪掉的权重
可以被泰勒展开模拟:
当一个神经网络的权重训练到局部最优或者聚合稳定状态时,上式的首项一阶导数即会无线趋近为零,但是第二项二阶导数不会为零,至于高阶导数,在泰勒展开模拟中往往都会被忽略。抹除具体某个后,更新权重矩阵中其他值
,泰勒展开式第二项二阶因式(海森矩阵)的最小值,该最小值可由拉格朗日乘数法求得。
模型OBS压缩 = 剪枝 + 量化
Elias Frantar 他们使模型的剪枝和量化等价化。对于裁剪 - > 0 的过程只需要转换成量化
- >
的过程。很明显,当
,问题又回归到了权重裁剪。
他们另一个重要的工作是归纳并解决了Optimal Brain Surgeon算法复杂度上问题。原本得更新一层权重的海森矩阵,求逆等过程将消耗
复杂度,落实到整个模型将会是将消耗
的复杂度,这对于现代模型来说是无法接受的。
取而代之使用cpu通过记录每一次造成最小错误 的位置,按所谓贪心的顺序记录一定次数,降低整体权重更新的计算复杂度。
通用Transformer模型量化
Elias 又一次提出了大体积模型基于OBS压缩的优化方案,他们重新审视了前面的方法中,针对超大体积多层transformer模型(GPT BLOOM)的实际效果。成功的达到了让超巨大模型的PTQ压缩在两个小时左右完成。
OBS压缩提到的按照最小错误 的层位置依次更新单独那一层权重,这条原则对于大transformer模型来说毫无意义, 即便刚开始将错误值大的权重更新可能会产生额外的误差
,在后续更新其他值小
时也会相应的把那些额外的误差
抵消。所以纵观量化中所有权重的过程不再遵循
贪心顺序的原则,而是在确定层与层之间无关的情况下,任意顺序进行量化。
于是他们将按照每层的量化过程进一步优化成按照Batch(每N层)一起量化的过程。但一起量化对于大模型来说这个过程的中间计算量Hessian逆矩阵的计算容量要求异常巨大,于是设计了科列斯基分解的内核解决庞大中间值要求。