下载本地模型时,文件名里常见 Q4、INT8、GPTQ 和 AWQ。它们都在回答一个现实问题。完整精度的模型太大,现有显存或内存装不下,能不能用更少的位数保存和计算。
我翻了 Hugging Face、ONNX Runtime 与 PyTorch 的量化文档。量化确实能减少模型占用,让更大的模型进入普通设备。它也会带来精度损失、校准工作和硬件差异。只看文件小了多少,很容易选错版本。
位数少了,表示会变粗
模型权重原本常用 16 位或 32 位浮点数保存。量化把它们映射到 8 位、4 位等更低精度的表示。Hugging Face 的文档说明,这样可以降低内存与计算成本,原本装不进设备的模型也可能运行起来。
低精度表示可选的数值更少,映射时会发生取舍。ONNX Runtime 明确写到,量化属于有损变换,可能影响准确率。不同层受到的影响也不一样。发现质量下降时,可以比较量化前后的权重与激活,找出差异大的位置,把部分节点保留在较高精度,或者换一种量化和校准方法。
动态量化和静态量化的准备工作也不同。ONNX Runtime 的动态方案会在运行时根据输入计算部分量化参数,通常更准,却增加计算开销。静态方案先用校准数据计算固定参数,运行时更省事。校准样本若全是短英文,实际任务却是长中文合同,得到的范围未必合适。样本要接近准备处理的内容。
Hugging Face 的 TGI 文档给了另一个容易忽略的区别。bitsandbytes 的部分方案可以在加载时直接量化,不需要额外校准数据。GPTQ 通常要先用数据做校准。前者操作方便,推理速度却可能慢于 GPTQ 或 FP16。体积小和生成快是两项指标,要分别测。
硬件决定省下来的能不能用上
量化后的计算需要硬件和运行库支持。ONNX Runtime 提醒,旧设备可能缺少高效的 int8 指令,量化与反量化本身还有开销,结果可能比原模型更慢。GPU 上想获得收益,也要有相应的低精度计算能力。
同一个模型文件换一台机器,速度和内存占用都会变化。评测时应固定目标设备,记录模型加载后的峰值内存、首个 token 等待时间、持续生成速度和并发数量。只在开发者的高配显卡上跑过,不能说明办公室那台电脑能承担日常工作。
PyTorch 的公开基准也显示,不同低精度配置在同一硬件上的加速幅度与质量差异并不相同。有些配置减小模型却降低吞吐,有些在新硬件上才有明显收益。工具提供的推荐值适合起步,最后还得让自己的机器说话。
用业务问题比较两个版本
企业可以先选一个较稳的高精度版本作基线,再挑一两个量化版本。用同一批真实问题比较回答正确率、格式遵循、引用与速度。涉及数字、型号、代码和长文本的任务要单独看,这些地方更容易暴露质量变化。
量化版若省下一半内存,准确率只小幅变化,并且目标机器确实更快,它就有使用价值。关键字段错误明显增多,或者速度没有改善,省下来的空间也不能抵消人工复核成本。
模型量化让本地运行多了很多选择。采购显卡或决定部署方案以前,把候选文件放到目标设备上跑完同一套评测,才能知道这次压缩到底省了什么,又交出了什么。