大模型知识之量化
·
上一轮工业革命已成历史,这一轮智能革命正在眼前。
我们正见证历史,关注我,一起学习大模型。
一、原理基础-何为量化
量化(Quantization)是数字化的专业说法,直白理解是把连续的数字变成离散的等级,就想把连续的温度计变成只有间隔刻度的温度计
连续的温度(FP32):
36.5°C, 36.51°C, 36.52°C... (无限精细)
量化后的温度(INT8):
36°C, 37°C, 38°C... (只有整数刻度)
放到大模型中,就是把模型的权重和计算从高精度转换为低精度,目的是减少内存占用,且加速推理。
对比理解
- 原始模型(FP32):就像用精确到毫米的尺子量东西,非常准但很慢;
- 量化后模型(INT8):就像用精确到厘米的尺子量东西,基本够用但快很多;
- 极端量化(INT4):就想用有刻度的棍子量东西,有些细节会丢失
量化的核心目的
1.节省内存:模型大小减少50%-75%
- FP32—>INT8:减少4倍
- FP32—>INT4:减少8倍
2.加速推理:在支持精度计算的硬件上更快
- gpu/npu处理整数比浮点数更快
- 内存宽带压力更小
二、关键名词解释
精度类型
| 类型 | 位数 | 用途 | 特点 |
|---|---|---|---|
| FP32 | 32位 | 训练标准 | 精度最高,计算慢 |
| FP16 | 16位 | 训练/推理 | 平衡选择,支持广泛 |
| INT8 | 8位 | 推理常用 | 显著节省内存,精度损失可控 |
| INT4 | 4位 | 极限压缩 | 内存极致节省,任务选择性使用 |
- FP是Floating Point (浮点数)的缩写
三、量化的是谁,谁被量化了
量化的是权重和激活值,这两个又是新的知识,可点击连接跳转查看详细内容,这里只简单解释,侧重量化
第一优先级:权重(Weights) - 95%的量化收益来自这里
第二优先级:激活值(Activations) - 加速推理的关键
第三优先级:KV缓存(KV Cache) - 优化长上下文
权重量化
直接看下面的例子更好理解
# 量化前的权重(FP32)
weights_fp32 = [
[0.1532, -0.8741, 0.0321], # 每个值都是浮点数
[0.4821, 0.0093, -0.5612],
[-0.1274, 0.6548, 0.2387]
]
# 量化后的权重(INT8)
weights_int8 = [
[42, -121, 9], # 每个值都是整数(-128到127)
[127, 2, -78], # 注意:0.4821 → 127(因为最大值截断)
[-35, 91, 66]
]
# 为什么先量化权重?
# 1. 权重占模型90%+的内存
# 2. 权重是静态的,一次量化终身使用
# 3. 对性能影响最大
激活值量化
# 前向传播时的计算
输入: x = [0.3, 0.5, -0.2]
权重: W = [[0.1, 0.2], [0.3, 0.4]] # 已经量化到INT8
# 中间激活值(FP32)
activation_fp32 = x @ W = [0.3*0.1 + 0.5*0.3, 0.3*0.2 + 0.5*0.4]
= [0.03 + 0.15, 0.06 + 0.2]
= [0.18, 0.26] # 这是激活值
# 激活值也可以量化
activation_int8 = quantize([0.18, 0.26]) = [24, 35]
# 为什么量化激活值?
# 1. 减少中间计算的内存占用
# 2. 支持全整数计算(硬件加速)
# 3. 降低内存带宽需求
更多推荐
所有评论(0)