量化哪些部分
先是权重;激活值和 KV 缓存也可以跟进。每多一个目标都能省下更多显存,同时也让质量承担更多风险,因此它们是各自独立的决定。
在模型承接流量之前对它所做的工作。有三个杠杆会改变部署的成本和表现:把数值变小(量化)、把模型变小(蒸馏),或者改变模型的行为(微调)。
量化用更少的比特存储数值。由于一个参数在 FP32 下占 4 字节、FP16/BF16 下占 2 字节、FP8/INT8 下占 1 字节、INT4 下占半字节,随着精度下降,一个 7B 模型会从约 28 GB 降到 14、7 和 3.5 GB。收益有三方面:需要购买的显存更少、每个 token 需要搬运的数据更少(decode 受带宽限制),以及在原生支持低精度的硬件上算得更快。
先是权重;激活值和 KV 缓存也可以跟进。每多一个目标都能省下更多显存,同时也让质量承担更多风险,因此它们是各自独立的决定。
服务场景以训练后量化为主:GPTQ(逐层最小化误差)、AWQ(保护那一小部分最关键的权重)、SmoothQuant(把难度从激活值转移到权重,用于 W8A8)。量化感知训练也存在,但在 LLM 上较少见。
多数团队并不自己量化,而是直接下载已量化的检查点(模型库中的发布版本,或面向本地运行时的 GGUF Q4/Q5/Q8 等级)。请确认你的 GPU 世代原生支持目标精度,否则速度收益会消失。
代价是准确率:8 比特通常影响很小,但在更小的模型和更难的任务上会更早显现。不要只凭困惑度就接受一个量化版本;请用你自己的评测集与全精度基线做对比。
蒸馏训练一个紧凑的学生模型去模仿更大的教师模型,把能力迁移到更廉价的产物上。量化压缩的是同一个模型,而蒸馏产出的是一个确实不同的、更小的模型,延迟、显存占用和单请求成本都更低。
微调是在你自己的示例上继续训练一个已有模型:领域用语、输出格式、语气,或者提示词无法稳定产出的任务行为。请在尝试过提示词、少样本示例和检索之后再考虑它,并在训练前建好评测集,这样才能证明微调确实带来了改进。
本站设有专门的板块,深入讲解相关技术、框架,以及本地训练与云端训练的取舍:参见微调。
| 症状 | 推荐做法 |
|---|---|
| 模型放不进 GPU,或者在可接受质量下服务成本过高 | 先做量化;试错成本低且可回退 |
| 任务范围很窄,单个请求用大模型属于过度配置 | 蒸馏出一个小学生模型,或者用现成的小模型加微调 |
| 提示词和检索都做得不错,领域行为、格式或语气仍不对 | 微调(先用 LoRA,适配器不够再做全量微调) |
| 以上问题在大规模场景下同时出现 | 这些手段可以叠加:蒸馏或微调过的模型,通常还会再量化后上线服务 |