大模型量化:int8 与 int4

量化把模型权重与激活从 FP16/BF16 转为 INT8 或 INT4,显著降低显存与带宽占用,让更大模型在有限硬件上跑起来。代价是低比特会引入误差,需要精心处理离群值。

int8:对称与分词化

LLM.int8() 把矩阵按行/列分词(token-wise),用向量量化处理离群值,其余用 8 比特对称量化,基本无损地压缩到约一半显存。

int4:GPTQ 与 AWQ

INT4 更激进。GPTQ 用二阶信息逐层补偿量化误差;AWQ 发现仅少数「显著权重」决定性能,对其保留高精度。二者都能把 16 比特模型压到 4 比特而不崩。

from transformers import AutoModelForCausalLM, BitsAndBytesConfig

cfg = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype="bfloat16")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B",
                                             quantization_config=cfg)   # 4-bit 加载

取舍

量化提升吞吐、降显存,但可能略损精度,且某些 kernel 对低比特支持不一。推理部署常选 int4/int8,训练仍需高比特。

小结

量化以 INT8/INT4 压缩权重与激活,靠离群值处理(LLM.int8)与误差补偿(GPTQ/AWQ)保精度,是低成本部署大模型的关键手段。

参考与延伸阅读

本文累计阅读