大模型量化技术
大模型量化(Quantization) 本质上是用更少的比特表示模型参数/激活值,从而减小显存占用、加快推理,同时尽量不破坏模型的"智能"。
分层讲。
一、为什么需要大模型量化技术?
现在的大模型(如 GPT、LLaMA 等):
-
参数量:7B / 13B / 70B…
-
原始权重通常用 FP32(32 bit)或 FP16/BF16(16 bit) 存储
问题来了:
-
显存爆炸:70B 模型 FP16 需 ≈140GB 显存
-
推理慢:内存带宽成为瓶颈
-
部署难:消费级 GPU / 手机跑不动
👉 量化的目的:
把浮点权重映射到低比特整数(INT8 / INT4 /甚至 INT2/1),压缩模型体积、降低显存/带宽压力、加速计算,尽量不显著掉性能。
二、量化的基本机理(核心)
1️⃣ 最朴素的线性量化(以对称均匀量化为例)
假设某层权重 w的真实范围在 [min, max]
量化公式(FP → INT):
q = round( w / scale ) + zero_point
scale ≈ (max - min) / (2^b - 1)
反量化(INT → 近似 FP):
ŵ = (q - zero_point) * scale
-
b= 量化比特数(8 / 4 / 2 / 1) -
scale / zero_point可从校准集统计得到
✅ 本质:用少量整数格点去近似原来的连续浮点分布
2️⃣ LLM 常用的 Weight-only Quantization(如 GPTQ / AWQ / GGUF Q4_K 等)
-
权重被量化(W → INT4/INT8)
-
激活仍用 FP16 做计算
-
推理时:
output ≈ dequant(W_int) × act_fp16
这类方法对 LLM 特别友好,因为:
-
权重读取占带宽大头
-
矩阵乘可用
INT4×FP16或 先反量化再 Tensor Core
三、为什么量化后还能保留原模型"部分功能"?
这是大家最疑惑也最神奇的一点。
✅ 原因 1:神经网络对局部扰动不敏感
-
经过充分训练的 LLM 位于一个平坦的损失谷底(flat minima)
-
轻微改变权重(±几 %)通常 不会改变 logits 的相对大小
-
只要语义/语法概率分布不被打乱,生成质量就还在
数学上:ℓ₂ 小扰动 → softmax 输出近似不变(尤其在高维)
✅ 原因 2:权重分布集中,适合低比特拟合
-
LLM 的全连接权重通常呈 近似零中心、钟形分布
-
用少量量化区间就能覆盖主要概率质量
-
极端离群值(outliers)可单独处理(channel-wise / group-wise scale)
✅ 原因 3:大模型有强"冗余"
-
参数量巨大 → 单个权重误差被集体投票稀释
-
类似过参数化带来的鲁棒性
四、为什么还有 4bit / 2bit / 1bit 的量化版本?
这是精度–效率权衡(Trade-off):
|
量化位宽 |
压缩比(vs FP16) |
典型用途 |
风险 |
|---|---|---|---|
|
FP16/BF16 |
1× |
训练 / 高质量推理 |
— |
|
INT8 |
~2× |
工业常用 |
很小掉点 |
|
INT4 |
~4× |
本地部署(llama.cpp / GPTQ / AWQ) |
轻微退化 |
|
INT2 |
~8× |
实验 / 极限压缩 |
明显掉能力 |
|
1-bit (TERNARY/BINARY) |
~16× |
研究(1-bit / BitNet) |
需重训练/特殊结构 |
-
4bit:目前"甜点区",70B 模型可塞进 24–32G 显存
-
2bit / 1bit:探索极限压缩,通常需要:
-
分组量化(group size,如 32/64)
-
或 从零训练 1-bit 模型(如 BitNet)
-
-
位宽越低 → scale/zero_point 相对越重要,否则直接崩
五、为什么不能无限压到 1-bit 而不损失能力?
-
1-bit只能表示 ±1(或 0/1)
-
信息熵严重受限
-
除非:
-
模型架构专门为二值设计
-
或接受大幅能力下降
-
所以普通 FP-trained LLM 事后量化到 1-bit 基本不可用,但原生 1-bit 模型(BitNet b1.58 等)是活跃研究方向。
六、一句话总结
量化 = 将浮点权重线性映射到低比特整数并保存缩放因子;
因 LLM 权重分布集中、对微小扰动鲁棒、参数量大,低比特近似仍可保留大部分推理能力;
4/2/1-bit 是不同压缩–精度权衡,4-bit 是目前实用极限,更低通常需要特殊算法或重训。
更多推荐




所有评论(0)