量化是把模型权重从较高精度,换成用更少位数表示的格式。目的通常不是「让模型更聪明」,而是让同一张卡放下权重,或在同样显存里留出更多地方给 KV cache 和并发。
位数和常见名字
一个参数占的字节大致是位数除以 8。
| 格式 | 大约字节 / 参数 | 常见用途 |
|---|---|---|
| FP32 | 4 | 训练里的主精度,推理很少整模这样放 |
| FP16 / BF16 | 2 | 推理的默认高精度 |
| FP8 | 1 | 新卡上的推理或训练混合精度 |
| INT8 | 1 | 权重量化,误差通常小于 4 bit |
| INT4(GPTQ、AWQ 等) | 0.5 | 显存最紧的时候 |
GPTQ、AWQ 是两种把权重量到大约 4 bit 的算法,差别在校准数据和舍入方式,不是两种完全不同的模型。换算法之后,仍然要用同一组题看效果,不能只看名字。
它省的是什么,不保证省的是什么
权重大小随位数下降,这是稳定的收益。延迟不一定按同样比例下降。量化后的矩阵乘要走另一套 kernel,批量很小、或卡本来就不是算力瓶颈时,延迟可能几乎不变,偶尔还会变慢。
KV cache 是否一起变小,取决于推理引擎。很多部署里量化只动了权重,上下文一长,缓存仍按 FP16 涨。所以「量化之后并发可以翻倍」只在你重新算过 KV 之后才成立。KV 的体积见 KV Cache。
误差出现在哪里
平均分掉零点几,说明不了你的任务。量化误差更常出现在这些地方:
- 专有名词、型号、数字被写错一个字符
- 要求输出的 JSON 少字段或类型错了
- 工具调用的参数名对不上
- 本该拒答的题,开始用「一般来说」补全
聊天窗口里语气仍然通顺,程序一解析就失败。验收集里要有这些题,而不只是让人眼看「答得还行」。
一组可用的最小题集:
- 资料里没有答案、必须拒答的题
- 带专有名词和数字、错一字即失败的题
- 规定 JSON 字段的题
- 规定工具参数的题
条数不必多,几十条、并且是自己的业务句子,比公开榜更有用。FP16 和量化版用同一批题各跑一遍,记下对错、显存和首 token 时间,再决定切不切。
不要量化的东西
做对照的基线、给别的模型打分的裁判模型,留在模型卡要求的精度上。Embedding 模型一旦更换精度或版本,已经写入向量库的向量不能和新查询混用,要重建索引。这件事和 向量库运维 里的版本错配是同一类事故。
小结
量化是用位数换显存。先确认卡是不是放不下权重,再谈要不要降到 8 bit 或 4 bit。延迟和答案对不对,用自己的题和真实上下文测,不从榜单外推。