1. 什么是模型量化
模型量化是将高精度的模型(通常为 32 位浮点数 FP32 或 16 位浮点数 FP16 )的权重和激活值转换为低精度模型(如 8 位整数 INT8)的过程。
FP32 的值范围为 -3.4*10^38
到 3.4*10^38
,有 40 亿个值。而对于 INT8,我们只能看到可能值集内的 256 个值,值范围为 -128 到 128。计算 INT8 矩阵比 FP32、FP16 的速度要快很多。
模型量化的过程就是建立高精度数值映射到低精度数值的映射关系。
2. 模型量化的好处
- 降低模型的显存占用
以 https://huggingface.co/Qwen/Qwen2.5-7B 为例,默认使用的是 bfloat16 精度,估算一下模型权重占用的显存为 7B _ 16/8 Byte = 14 GB 显存。如果进行 Int8 量化,模型权重的显存占用降为 7B _ 8/8 Byte = 7 GB 显存,只有之前的一半。
- 提高模型的推理速度
首先是计算量会大大减少,W8A16(权重 8 位,激活 16 位)计算量减少 30~40%,W8A8(权重 8 位,激活 8 位)计算量减少 60-75%。
其次,还有数据传输量能减少 50% 左右,能够有效降低显存带宽占用。传输相同数据量,量化版本的模型比非量化版本的传输时间要短很多。
3. 常见的量化位数
简写 | 含义 | 应用场景 |
---|---|---|
W16A16 | 权重 FP16/BF16,激活 FP16/BF16 | 常见的混合精度训练、推理 |
W8A8 | 权重 INT8,激活 INT8 | 经典 INT8 量化,推理部署广泛(TensorRT、ONNX Runtime、OpenVINO 等) |
W8A16 | 权重 INT8,激活 FP16/BF16 | 折中方案,降低权重存储与带宽但保持较高精度 |
W4A16 | 权重 INT4,激活 FP16/BF16 | 大模型推理常用配置(如 GPTQ、AWQ、QLoRA) |
W4A8 | 权重 INT4,激活 INT8 | 激进的低精度方案,压缩率更高,但精度下降风险大 |
4. 常见的量化方法
4.1 GGUF
GGUF 全称 GPT-Generated Unified Format,是由 Georgi Gerganov(llama.cpp 开源项目创始人)定义发布的一种大模型文件格式。
原理:
- 使用 GPT 生成的统一格式
- 采用块级量化技术,将权重按块进行量化处理
- 通过块级结构平衡模型大小和精度损失
特点与优势:
- 支持多种量化精度(Q4_0, Q4_1, Q5_0, Q5_1, Q8_0 等)
- 对硬件要求低,普通 CPU 即可运行
- 模型文件相对较小,便于存储和传输
- 社区支持度高,工具链完善
- 支持流式生成,用户体验良好
- 采用块级量化,有效平衡了模型大小和精度
使用场景:
- CPU 推理
- 本地个人电脑运行大模型
- 边缘设备部署
- 资源受限环境
4.2 GPTQ
GPTQ 全称 Gradient-based Post-Training Quantization,是一种基于梯度的训练后量化方法。
原理:
- 基于梯度信息进行训练后量化
- 使用梯度下降法优化量化过程中的误差
- 通过梯度信息指导量化参数的选择
特点与优势:
- 基于梯度的训练后量化技术
- 通常量化到 4bit 或 8bit
- 在 4bit 量化下仍能保持较好的模型性能
- 相比原始模型显著减少显存占用
- 推理速度较快
- 适合在消费级 GPU 上部署大模型
使用场景:
- GPU 推理
- 需要较高精度的生产环境
- 中等规模的推理服务
4.3 AWQ
AWQ 全称 Activation-aware Weight Quantization,是一种基于激活感知的权重量化方法。
原理:
- 基于激活值分布进行权重量化
- 使用梯度下降法优化量化误差
- 通过最小化量化误差来确定量化参数
- 量化参数包括量化范围、量化步长等
特点与优势:
- 基于激活感知的权重量化技术
- 保护重要权重通道不被量化,保持关键信息
- 通常实现 4bit 量化
- 在相同量化位数下精度更高
- 推理速度快,显存占用少
- 特别适合需要高质量输出的应用
使用场景:
- GPU 推理
- 高性能推理需求
- 对模型精度要求较高的场景
4.4 FP4
FP4 全称 4-bit Floating Point,是一种 4 位浮点数表示方法。
原理:
- 使用 4 位浮点数格式表示权重
- 保持浮点数的指数和尾数结构
- 相比整数量化能更好地保持原始数值分布
特点与优势:
- 4 位浮点数表示,保持数值精度
- 极低的存储和计算开销
- 相比 4bit 整数量化精度更好
- 相比整数量化能更好保持数值分布
- 适合大规模部署
- 通常结合特殊的硬件优化
使用场景:
- 极端资源受限环境
- 需要最大化压缩比的场景
- 特定硬件加速器
4.5 NVFP4
NVFP4 全称 NVIDIA 4-bit Floating Point,是 NVIDIA 专门优化的 4 位浮点数表示方法。
原理:
- 基于 NVIDIA 硬件优化的 4 位浮点数格式
- 针对 NVIDIA GPU 架构进行专门优化
- 保持浮点数特性的同时实现极致压缩
特点与优势:
- NVIDIA 专用的 4 位浮点数表示
- 极低的存储和计算开销
- 相比 4bit 整数量化精度更好
- 相比整数量化能更好保持数值分布
- 适合大规模部署
- 针对 NVIDIA 硬件进行了特殊优化
使用场景:
- NVIDIA GPU 环境下的极端资源受限场景
- 需要最大化压缩比的 NVIDIA 硬件部署
- NVIDIA 特定硬件加速器