大模型压缩:从研究到生产的完整攻略(1)

模型部署的成本挑战

大模型的规模增长真的很疯狂,从2023年开始就像坐火箭一样,一路从几百万参数飙到几千亿,虽然Llama 3的405B让增长速度放缓了,但专家混合架构又重新点燃了这把火,现在Llama 4 Behemoth直接搞到了2万亿参数。
大语言模型依赖GPU进行计算,这导致部署成本极高,以DeepSeek R1这样的671B超大模型为例,其私有化部署成本可达百万级别。面对如此昂贵的部署成本,模型压缩现在不是锦上添花,而是真正的刚需了。
在这里插入图片描述

量化技术(Quantization)详解

量化的介绍

量化的核心思想是将高精度的数值表示映射到低精度空间,这个过程本质上是一种有损压缩。

对于数据的存储有以下四种格式:

FP32
早期AI模型主要使用32位浮点数进行训练和推理,保证计算精度但存储和计算开销巨大。32 bits ÷ 8 = 4 bytes,需要4个字节存储。

FP16
2017年英伟达开始支持FP16精度,标志着现代量化技术的开端,在保持相对精度的同时显著减少存储需求。16 bits ÷ 8 = 2 bytes,需要2个字节存储。

INT8
随着Transformer模型参数量从亿级到达千亿级,INT8量化在2020年成为主流推理方案,实现了精度与效率的良好平衡。8 bits ÷ 8 = 1 byte,需要1个字节存储。

INT4
2022年发布的GPTQ模型首次实现INT4量化,将显存占用降低至原始FP32模型的1/8,成为大模型部署的重要突破。4 bits ÷ 8 = 0.5 bytes,需要0.5个字节存储。

主流量化技术分类

目前主流的量化技术可分为三大类:

  1. 训练后量化(Post-Training Quantization)

    • 代表:GPTQ和GGUF(Llama.cpp使用的格式)
    • 原理:采用逐层校准原则,对每层神经网络权重进行动态范围分析,将FP32/FP16权重映射到INT4整数空间
    • 优势:不需要重新训练模型,实施简单
    • 最新进展:2025年AMD推出了针对ROCm优化的GPTQ实现,可高效支持INT4量化,为非英伟达GPU提供高效推理选项
  2. 量化感知训练(Quantization-Aware Training)

    • 代表:AWQ
    • 原理:识别不同权重通道对激活值分布的敏感性差异,对重要参数保持高精度,非关键参数进行激进压缩
    • 最新进展:2025年发布的研究表明AWQ在Llama3系列模型上的表现优于GPTQ,特别是在保持模型推理质量方面
  3. 混合精度量化(Mixed-Precision Quantization)

    • 原理:根据参数重要性采用不同精度,平衡模型性能和资源占用
    • 最新进展:2025年的CrossBlock量化(CBQ)和SpinQuant等新方法在ICLR会议上展示了更优异的混合精度量化效果
  4. 高效KV缓存量化

    • 2024-2025年出现的新方向,如KVQuant和ZipCache,专注于减少推理过程中KV缓存的内存占用
    • 使模型能够处理更长的上下文窗口(甚至达到1000万tokens)而不会大幅增加内存需求

线性量化

对称量化:简单直观的方案

对称量化是最容易理解的量化方式,它将浮点数范围对称地映射到整数范围。

假设我们要将一组数量化到 INT8 范围:[-127, 127](为了保持对称性,舍弃 -128)

步骤很简单

  1. 找到这组数中绝对值最大的那个数
  2. 计算缩放系数:scale = max_abs_value / 127
  3. 所有数除以这个缩放系数并取整

假设有一组数:[0.5, -1.2, 2.1, -0.8, 1.7]

  1. 绝对值最大的是 2.1
  2. 缩放系数 = 2.1 ÷ 127 ≈ 0.0165
  3. 量化结果:[30, -72, 127, -48, 103]
  4. 反量化(乘以缩放系数):[0.496, -1.189, 2.1, -0.794, 1.7]

可以看到,量化后再反量化的结果和原始数据很接近,但有轻微误差。


对称量化的局限性

对称量化有个明显问题:整数范围浪费

如果数据都是正数,比如 [0.1, 0.5, 1.2, 2.1],按对称量化仍然会占用 [-127, 127] 的完整范围,负数部分完全浪费了。这种情况下,非对称量化更合适。

非对称量化:最大化利用整数空间

非对称量化的核心思想是让浮点数的最小值映射到整数最小值,最大值映射到整数最大值,充分利用每一个整数位。

对于无符号 8 位整数(UINT8),范围是 [0, 255]:

缩放系数计算

scale = (max_value - min_value) / 255

零点计算

zero_point = round(-min_value / scale)

量化公式

quantized_value = round(original_value / scale + zero_point)

反量化公式

original_value = (quantized_value - zero_point) × scale

零点(zero_point)的作用是确保原始数据中的 0 值在量化-反量化过程中保持精确。这对于 ReLU 等激活函数至关重要,因为这些函数会产生大量的零值。


非对称量化的优势

用同样的数据 [0.5, -1.2, 2.1, -0.8, 1.7] 测试:

对称量化误差:[0.004, 0.011, 0, 0.006, 0] 非对称量化误差:[0.003, 0.006, 0, 0.003, 0.003]

可以看到非对称量化的误差普遍更小,这是因为:

  1. 更充分利用了整数范围
  2. 缩放系数更小,量化粒度更细
  3. 零值保持精确
异常值

在实际应用中,数据中的异常值是量化效果的最大威胁。

假设大部分数据在 [-2, 2] 范围内,但有一个异常值是 100。按标准量化:

  • 缩放系数 = 100 / 127 ≈ 0.79
  • 正常数据 [-2, 2] 量化后只占用 [-3, 3] 范围
  • 大量整数位被浪费,精度大幅下降

解决策略

截断异常值:使用 99.9% 分位数而非绝对最值来计算量化参数

分层量化粒度

  • 张量级:整个张量用一套量化参数,简单但可能精度不够
  • 通道级:每个通道独立量化,平衡精度和复杂度
  • 分组级:更细粒度的分组,精度最高但计算开销大
  • 混合处理:异常值单独用浮点处理,正常值用量化处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一切皆有可能!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值