🎯 概述
模型压缩通过减少模型大小和计算量,使大模型能够在资源受限的环境中部署。
🏗️ 压缩技术
1️⃣ 权重量化
● INT8量化:将FP32权重压缩到INT8,4倍压缩
● INT4量化:进一步压缩到4位,8倍压缩
● GPTQ:基于二阶信息的量化方法
2️⃣ 激活量化
● 动态量化:运行时量化激活值
● 静态量化:校准数据集预计算量化参数
● SmoothQuant:解决激活异常值问题
3️⃣ 稀疏化
● 非结构化稀疏:随机权重置零
● 结构化稀疏:通道/块级稀疏
● N:M稀疏:每M个权重保留N个
4️⃣ 知识蒸馏
● 量化感知蒸馏:结合量化和蒸馏
● 渐进式量化:逐步降低精度
📊 量化方法对比
方法 压缩比 精度损失 推理速度 实现难度
INT8 4x <1% 2-3x 低
INT4 8x 1-3% 3-4x 中
GPTQ 8x <1% 3-4x 中
AWQ 8x <0.5% 3-4x 中
🎯 实战代码
使用bitsandbytes进行量化
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
INT4量化配置
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
加载量化模型
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-hf",
quantization_config=bnb_config,
device_map="auto"
)
剪枝
🎯 面试重点
- INT8和INT4量化的区别?
- 如何解决量化后的精度损失?
- GPTQ和AWQ的算法原理?
- 量化对推理速度的影响?