机器学习工程与系统

量化(quantization)

/ kwon-tih-ZAY-shun /

量化,是通过用「精度低得多」的方式来存储模型的数字,从而把一个练好的模型缩小——拿粗糙的整数台阶,去替代精细的小数值。想象你描述每一种油漆颜色时,都不再给出精确配方,而只报它在一本 256 色色卡里最接近的那一格。你失去了一些微妙,可描述本身急剧变小、处理起来也快了许多。模型那数以百万计的参数,本来以详尽的 32 比特或 16 比特数字存着,如今被舍入到一张粗得多的网格上——通常是 8 比特,有时低到 4 比特。

回报是实打实而且很大的:一个 8 比特模型大约只有 32 比特版本的四分之一大,占的内存更少,跑得也更快,因为芯片搬运和相乘的都是更小的数字。正是这一点,让一个曾经需要机房 GPU 的模型,能在手机或笔记本上跑起来。代价,是舍入带来的一点点准确度损失——仔细做的话通常微不足道,但若压得太狠、或用在一个脆弱的模型上,偶尔也会变得严重。

为什么这很重要:量化是让大模型便宜到足以被广泛部署的、最常用的一招,尤其是在边缘设备和消费级硬件上。诚实的提醒是:它在定义上就是有损的,损害难以预料、只能去测量而不能想当然,而最省的 4 比特版本,可能悄悄地把质量拉低——这种拉低,要等到用户撞上某个不巧的问题时才显形。它是大小、速度与保真度之间一桩实打实的权衡,绝非免费的午餐。

一个在 32 比特里存为 0.7341892 的权重,被舍入到 8 比特网格上最接近的那一格——比如 0.73。在十亿个权重上如此这般,模型就缩小到四分之一,每个值只差那么一点点。大多数时候这些误差会相互抵消;偶尔它们也会堆积起来,造成伤害。

把每个值舍入到更粗的网格上——通常以微小的准确度代价,换来四倍的瘦身。

永远别想当然地以为量化后的模型「基本上一样」。事后务必拿真实任务重新测一遍它的准确度。损失通常很小,可有时偏偏集中在你最在乎的那些罕见、棘手的情形上——而一个平均分,恰恰能把这一点藏起来。

又称
int8 quantization4-bit quantizationpost-training quantization量化整数量化