模型量化:PTQ 与 QAT 实战
模型量化将浮点权重和激活转换为低精度整数表示,大幅减少模型大小和推理延迟。
量化方法
python
import torch.quantization as quant
# PTQ(训练后量化)
model.eval()
model.qconfig = quant.get_default_qconfig('fbgemm')
prepared = quant.prepare(model)
with torch.no_grad():
for batch in calibration_dataloader:
prepared(batch) # 校准
quantized = quant.convert(prepared)
# QAT(量化感知训练)
model.train()
model.qconfig = quant.get_default_qat_qconfig('fbgemm')
prepared = quant.prepare_qat(model)
for epoch in range(num_epochs):
for batch in train_dataloader:
prepared(batch) # 模拟量化训练
quantized = quant.convert(prepared)PTQ vs QAT
PTQ 简单快速,适合大多数场景;QAT 精度更高但需要完整训练。INT8 量化通常只损失 <1% 精度,INT4 需要更精细的校准。