【大模型】- 量化
量化
减少模型大小,加速推理
类型: 学习 | 语言: Python | 🏷 前置:《量化》(本系列第 10 篇)
学习目标
- 理解量化的原理
- 实现常见的量化方法
- 使用 GPTQ 和 AWQ 量化模型
- 评估量化后的模型质量
- 选择合适的量化策略
量化概述
量化是将模型权重从高精度(FP32/FP16)转换为低精度(INT8/INT4)的过程,以减少模型大小和加速推理。
量化的好处
- 减少内存:INT4 量化可将模型大小减少 4-8 倍
- 加速推理:低精度计算更快
- 降低能耗:更少的内存带宽和计算
量化类型
| 类型 | 精度 | 大小减少 | 质量影响 |
|---|---|---|---|
| FP16 | 16位 | 2x | 极小 |
| INT8 | 8位 | 4x | 小 |
| INT4 | 4位 | 8x | 中等 |
| INT3 | 3位 | 10x | 较大 |
| INT2 | 2位 | 16x | 显著 |
基本量化方法
线性量化
1 | import torch |
对称量化
1 | def symmetric_quantize(tensor, num_bits=8): |
分块量化
1 | def block_quantize(tensor, block_size=128, num_bits=8): |
GPTQ 量化
GPTQ 是一种训练后量化方法,通过最小化量化误差来优化权重:
1 | from transformers import GPTQConfig, AutoModelForCausalLM |
GPTQ 实现
1 | class GPTQQuantizer: |
AWQ 量化
AWQ(Activation-aware Weight Quantization)根据激活值的重要性来量化权重:
1 | from transformers import AwqConfig |
评估量化质量
1 | def evaluate_quantization(original_model, quantized_model, eval_dataset): |
量化策略
选择量化精度
1 | def select_quantization_precision(model_size_gb, target_size_gb, quality_requirement): |
混合精度量化
1 | def mixed_precision_quantization(model, sensitivity_threshold=0.1): |
部署量化模型
1 | # 使用 bitsandbytes 量化 |
总结
量化通过降低权重精度来减少模型大小和加速推理。常见方法包括 GPTQ 和 AWQ。选择合适的量化策略需要平衡模型大小、推理速度和质量。
下一步
下一课将介绍推理优化技术,进一步加速模型推理。
📚 本文改编自 AI Engineering from Scratch(MIT License · 作者 Rohit Ghumare),中文内容来自官方中文镜像。原课程共 503 课 · 20 阶段 · 免费开源,教程网站见 aiengineeringfromscratch.com。
📝 自我检查(课程配套测验)
Q1(学前) 70B 参数模型在 FP16 下仅权重需要多少 VRAM?
A. 35 GB
B. 70 GB
C. 140 GB
D. 280 GB
答案: C 解析: 700 亿参数 × 每个 FP16 参数 2 字节 = 1400 亿字节 = 140 GB。这超过单张 A100(80GB),仅加载权重至少需要两张 GPU。
Q2(学前) 在 LLM 语境中,quantization 是什么?
A. 移除未使用的 model layer
B. 降低权重的数值精度(例如 FP16 到 INT4)以减少内存占用并提高 inference 速度
C. 压缩训练数据
D. 缩小 vocabulary 大小
答案: B 解析: quantization 将高精度浮点 weight 映射到低精度整数。INT4 quantization 每个 weight 用 4 bit 而非 16 bit 存储,内存减少约 4 倍,精度损失通常很小。
Q3(学后) 训练后 quantization(PTQ)与 quantization-aware training(QAT)的关键区别是什么?
A. PTQ 更准确
B. PTQ 在训练后量化、无需 retraining;QAT 在训练中模拟 quantization,使 model 学会适应降低的精度
C. QAT 不使用 gradient
D. PTQ 需要更多数据
答案: B 解析: PTQ 快速(校准并量化即可)但可能损失精度。QAT 在训练中包含 fake quantization,让 model 调整 weight 以更好适应精度损失。QAT 通常精度更好。
Q4(学后) 「per-channel」quantization 是什么意思?为什么优于「per-tensor」?
A. 分别量化每个 output channel,每个 channel 使用不同的 scale/zero-point,减少 quantization 误差
B. 一次处理一个 color channel
C. 每个 channel 使用独立 GPU
D. 一种 data parallelism
答案: A 解析: per-tensor 对整个 weight matrix 使用一个 scale factor。per-channel 对每个 output channel(行)使用独立 scale。不同 channel 数值范围不同,per-channel 能更准确地捕捉。
Q5(学后) 为什么 Llama 3 70B 中 95% 的 weight 落在 -0.1 到 +0.1 之间?
A. model 训练不佳
B. 训练中的 weight decay 和 normalization 将 weight 推向较小值,使完整 FP16 范围显得浪费
C. weight 尚未收敛
D. 这是 Llama architecture 特有的
答案: B 解析: weight decay regularization 将 weight 向零收缩。layer normalization 使 activation 居中。两者结合产生集中在零附近的 weight 分布,使低精度 quantization 非常有效。
- 标题: 【大模型】- 量化
- 作者: 宋
- 创建于 : 2026-08-19 09:11:00
- 更新于 : 2026-08-21 16:20:11
- 链接: https://sxl-space.tk/2026/08/19/010_LLM/010_LLM-11-Quantization/
- 版权声明: 版权所有 © 宋,禁止转载。