蒸馏与量化。
两者都让模型跑起来更便宜,也经常被混为一谈,但它们作用的对象不同:蒸馏是训练一个全新的、更小的模型去模仿大模型,而量化是把同一个模型的权重以更低精度存储。这个区别决定了下游的一切——蒸馏是一个以 GPU 天计的训练项目,量化是一次以分钟计的文件转换,而且其中只有一个是可逆的。
量化:每个数字用更少的比特。
一个以 16 比特训练出来的权重,并不需要 16 比特才有用。量化把这些数值映射到更小的数值类型——8 比特、4 比特,有时更低——而内存收益几乎是线性的:
- 4 比特下大约每十亿参数 0.6 GB,而 16 比特下约为 2 GB。这正是让一个 8B 模型变成 5 GB、能塞进笔记本的原因。
- 它通常也让生成更快,因为单请求推理受制于显存带宽。提速来自每个令牌搬运的字节更少——而不是算术运算变少。
- KV 缓存是另一笔账。权重是一次性开销;缓存随上下文长度与并发量增长,而真正耗尽显存的往往正是长上下文。
降到 4 比特左右为止,质量损失都很小,再往下就不再细微了。现代方法不会朴素地做舍入——它们会在样本数据上做校准,并保护少数影响格外大的离群权重,这也是为什么一次好的 4 比特量化会胜过一次朴素的 8 比特量化。
人们最容易搞错的比较:一个被重度量化的大模型,并不自动优于一个轻度量化的小模型。4 比特的 30B 与 8 比特的 14B 占用的内存相近,谁赢完全取决于任务。请在你自己的负载上把两者都测一遍,而不要想当然地认为参数量取胜。
蒸馏:由大模型教出来的小模型。
这里的学生是一个确实不同的、更小的网络,被训练来复现教师的行为。它之所以优于从零训练同样大小的模型,是因为教师的输出比原始数据集携带更多信息——完整的概率分布,或一条推演出来的推理链,而不只是唯一那个正确答案。
- 回答蒸馏——在教师的输出上训练。简单、有效,也是大多数所谓「蒸馏版」开源模型的真实做法。
- 推理蒸馏——在教师的中间步骤上训练,小模型正是借此获得通常需要大得多的规模才具备的行为。它也是把一个又慢又贵的推理模型压缩到足以上线服务的手段。
- 任务蒸馏——应用团队真正会做的那一种:用前沿模型为一个狭窄任务打标或求解,再用这些数据训练一个小模型。任务足够窄时,小模型可以追平教师,因为它只需要在一件事上做得好。
代价是蒸馏本身就是一次训练:数据准备、超参数、评测,以及「你究竟能否用托管模型的输出来训练」这一许可问题——参见合成数据,那是同一条流水线从数据侧看过去的样子。
如何在两者之间选择。
与其说它们是互斥选项,不如说是对不同约束的不同回答,而且它们可以叠加——你下载的大多数本地模型,都是先蒸馏、再量化的产物。
- 模型对你的硬件来说太大→ 量化。几分钟的活儿,无需训练,而且可逆:原始权重还在你手里。
- 模型能力够用,但在高频窄任务上太慢或太贵→ 蒸馏。几周的活儿,只有当任务稳定、量确实大时才值得。
- 你需要的是通用能力→ 两者都不选。它们都是拿广度换经济性。如果这活儿确实需要前沿推理,就去买前沿推理。
另有两种相关技术常被归到这里,但不该归。剪枝移除的是权重或整块结构,而不是降低它们的精度。微调调整的是模型行为,完全不改变其体量——那是另一个目标,见微调、RAG 与提示词。
什么会坏,以及该测什么。
两种技术对能力的损伤都是不均匀的,而这恰恰使得随手评测它们很危险——平均分看着还行,某项具体能力却已悄悄失效:
- 长程智能体任务最先垮掉。每一步掉一个点,在二十步的循环里复合成每个任务掉一大截。量化和蒸馏后的模型在单轮聊天里看着挺好,做智能体就散架。
- 冷门知识与长尾语言先于常见内容退化。压缩对分布中稀薄的部分打击最重——与模型崩塌是同一种形状的损失。
- 结构化输出与指令跟随变脆。schema 遵从性与拒答行为是常见的牺牲品,而这两者在智能体中都是承重的。
- 安全行为不保证幸存。教师习得的对齐不会自动被学生继承,也不会在激进量化下自动保留。如果你依赖它,就重新测它。
所以不要用基准平均分来评测。请在你实际使用的步数下,对自己的任务评测做前后对比,并看长尾而不是均值。
永远先试量化。它是几小时而非几周的工作量,可逆,而且往往一步到位就拿到了你想要的全部节省——到那时,你原本在规划的蒸馏项目就纯属多余。只有当你手上确有一个狭窄、稳定、高频的任务,一条量化过的质量基线,以及「单靠量化没能达标」的证据时,才动用蒸馏。
延伸阅读:小模型与本地模型讲如何运行这些成果,开源与闭源模型讲你究竟能不能这么做,智能体成本控制讲在动用这两者之前该先试的更省事的抓手。