上一轮工业革命已成历史,这一轮智能革命正在眼前。
我们正见证历史,关注我,一起学习大模型。

一、原理基础-何为量化

量化(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. 降低内存带宽需求

更多推荐