一个大模型动辄几十上百 GB,手机装不下,普通电脑跑不动。量化就是解决这个问题的办法:把模型参数从高精度数字压缩成低精度数字,让模型变小、变快、变便宜。但压缩不是免费的,精度会在这个过程中悄悄流失。
## 量化是什么
模型的参数平时以高精度浮点数存放,比如每个参数占 16 位。量化的做法,是把这些数字映射到更短的表示上,比如 8 位整数甚至 4 位整数。参数数量不变,但每个参数占用的空间减半甚至更少,模型体积随之缩小,计算也更快。这就是为什么量化后的模型能塞进手机、跑在普通显卡上:省的是存储和算力。
## 精度损失从哪来
损失来自取舍。把连续的数值塞进有限的格子,总有一部分信息对不上号。有些参数对精度很敏感,压一下,输出就歪一点;有些则皮实,压狠了也没什么感觉。损失通常不是均匀分布的:模型里总有少数关键部分最怕压缩,而这些部分往往最难提前找出来。量化做得好不好,关键就看能不能把损失控制在不敏感的地方。
## 哪些部分最敏感
实践中,敏感点有几个规律。异常值多的层更容易受损,因为极端数值会拉大映射的误差。长上下文任务对量化更敏感,微小的误差会在多轮推理中累积。需要精确计算的场景,比如数学推理和代码生成,量化带来的退化也更明显。相反,闲聊、摘要这类容错度高的任务,量化后的体验往往几乎不变。
## 实际影响与取舍
对使用者来说,量化是一笔划算的交易:用一点难以察觉的质量损失,换来本地运行、低成本和低延迟。但这笔交易要看场景:追求极致准确的任务,宁可多花算力也别量化;追求随时可用的场景,量化几乎是必选项。还有一个现实考量:量化不是一次性的,不同的量化方法和精度档位,效果差别很大,选错档位比不量化更糟。
## 量化的方法不止一种
量化也不是只有一种做法。训练后量化最省事:拿训好的模型直接压缩,不用重新训练,代价是精度损失相对大。量化感知训练则在训练阶段就让模型适应低精度,效果更好,但成本高得多。还有混合精度:对敏感的部分用高精度,不敏感的部分用低精度,精打细算地分配每一比特。选哪种方法,取决于你有多少预算、能忍受多大损失,以及模型最终要跑在什么样的设备上。
## 量化之后还能做什么
量化往往不是终点,而是部署流水线里的一环。量化后的模型还可以继续剪枝、蒸馏,或者和高效的推理框架配合,进一步压低成本。反过来,量化也有天花板:压到 4 位以下,多数模型的表现会明显滑坡,再往下压,省下的体积已经抵不上丢掉的质量。工程上的智慧,正在于知道在哪里停手:不是压得越狠越好,而是压到刚好够用的那一档。
量化没有让精度凭空消失,只是把它换成了体积和速度。理解这笔交换,才能在“跑得动”和“答得准”之间做出对自己有用的选择。