一、量化的核心是精度换显存

模型权重默认十六位浮点。量化把它压到八位甚至四位,显存需求直接减半或再减半。

代价是精度损失。损失多少,取决于量化方法和模型大小。

量化解决的是显存和带宽,不是速度。这句话先记住,很多人以为量化之后什么都变快,结果发现反而慢了一点。

原因是解量化有开销。权重压成 4 位之后,每次计算前要还原,这部分操作要花时间。在小 batch 下,这个开销尤其明显。

所以量化的正确预期是:显存省一半以上,能跑更大的模型或更长的上下文;速度基本持平,偶尔略慢。想靠量化提速,方向就错了。

二、8bit 与 4bit 的取舍

8bit 基本无损,多数任务上的差异很难感知,显存减半。这是最稳的选择。

4bit 显存再减半,但小模型上损伤明显。经验规律:模型越大,越抗量化。

所以七十 B 用 4bit 通常没问题,七 B 用 4bit 容易开始胡言乱语。

配色失败常见两种:一是灰,二是闹。灰是因为饱和度全压低,闹是因为高饱和全撞一起。

解决灰最简单的办法是加一个高饱和的点缀色,只用在小面积。

解决闹的办法是降低面积比例。高饱和不是不能用,是不能大面积用。

三、量化方法怎么选

两类常见做法:

一、训练后量化。直接压权重,速度快,适合快速验证。

二、量化感知训练。训练时就模拟量化误差,质量更好,成本更高。

先跑训练后量化看效果,不够再上第二种。

8bit 与 4bit 的取舍,我的经验是:8bit 几乎无损,闭着眼都能上;4bit 要挑方法,也要挑场景。

如果任务是抽取、分类这类结构化输出,4bit 通常够用;如果是长文写作、复杂推理,4bit 的表现会明显不如 8bit。

一个折中做法是分层量化。注意力层用 8bit,前馈层用 4bit。这个组合我试过,效果和纯 8bit 差得不远,显存却省了不少。

还有一个变量是模型本身。同一个方法,用在不同的模型上效果差别很大。所以别信「某方法无损」这种说法,一定要自己在自己的任务上测。

四、量化后必须重测的四项

一、格式输出。JSON、代码、表格这类结构化输出最容易先崩。

二、长上下文。量化对长文的注意力影响更大。

三、数值计算。涉及精确数字的任务要单独测。

四、多语言。小语种的退化通常比中文英文明显。

比例我按六三一:六主色,三次色,一强调。

这个比例不是硬规定,但它能避免「每块都想当主角」。

强调色只出现在需要点击或需要注意的地方。用多了就没有重点了。

五、部署时的两个坑

一、只看平均分。平均分不掉,但某一类任务掉得很惨。要分类看。

二、只看生成质量,不看速度。4bit 的解量化会带来额外开销,实测吞吐未必线性提升。

两个部署坑。第一个是量化后上下文变短。有些实现在量化时把缓存也压了,长对话直接溢出。

第二个是精度问题被掩盖。量化模型在常规输入上表现正常,遇到极端值才崩。这个坑最难查。

防法很土但有效:上线前用自己的边界样本跑一遍,专门找那类「数值很大、格式很怪」的输入。

再补一句:量化之后一定要重测四项——抽取准确率、长文连贯性、极端数值、拒答行为。四项里任何一项掉得厉害,就退回 8bit。

六、一个判断流程

先用 8bit 跑通全流程,记录基线;再试 4bit,用同一批题对比;差距可接受就留 4bit,不能接受就回到 8bit。

不要为了省显存,把质量赌上去。

检查三件事:灰度是否分层、色盲是否可分、以及深色模式是否还成立。

第一条最有效。转成灰度看,如果主次分不清,说明明度设计有问题。

第二条用工具跑一遍,红绿搭配是最常见的坑。

补一句:配色方案要写成文档。只存在设计稿里,三个月后没人知道哪个是主色。

文档里写清用途,比写清色值重要。

延伸参考

遇到看不懂的参数名,前端 Wiki 的词条比搜索页干净。

前端 Wiki

留一句:量化是省钱手段,不是免费午餐,先测再上线。