1 SpQR: A Sparse-Quantized Representation for Near-Lossless LLM Weight Compression
论文:arxiv.org/abs/2306.03…
github:github.com/Vahe1994/Sp…
被引次数:127
量化规格:Weight 3-4bit
为什么需要SpQR?
边缘设备(电脑、手机等内存受限设备),需要LLM大模型压缩更低比特如3-4比特;对于1-10B较小模型,当前GPTQ算法有显著精度损失问题。
SpQR摘要
SpQR(A Sparse-Quantized Representation for Near-Lossless LLM Weight Compression)是一种针对权重的混合稀疏量化,原理是识别和隔离异常值,对异常值高精度存储,其他权重压缩3-4bit,实现小于1%精度损失。压缩收益是:单张24GB消费级GPU可运行33B LLM模型,推理速度提升15%,精度无损。
SpQR提供高效的权重压缩、解码算法(运行时);同时提供GPU推理算法,达到性能超越fp16基线且精度相当,mem压缩4x收益。
SpQR原理
论文发现LLM 权重量化误差表现出垂直、水平方向的组相关性,对应input feature维度和output hidden维度的系统误差。之前论文已发现input feature离群异常值,本论文首次发现权重特定output hidden维度存在同样离群异常值。
实现原理:
压缩算法隔离离群点并高效压缩模型成SpQR format。论文开发出一个基于CSR(压缩稀疏行格式)专门的稀疏矩阵乘算法,该算法与dense-quantized(权重3-4bit)矩阵乘算法结合使用,用于token-by-token推理。
权重参数灵敏度
GPTQ核心思想:权重参数、是高度相关的,例如权重向下舍入误差,可以被的向上舍入误差补偿。
rounding error(舍入误差): 权重浮点值不靠近量化点,而乘积的输入会放大即使很小的rounding error。
本论文发现:权重矩阵中敏感权重的位置不是随机的,而是具有特定的结构,对LLama65B模型最后一个Attention输出的权重敏感度,发现权重矩阵存在以下规律的模式:
(1)行异常值
(2)列异常值
(3)注意力头
(4)旋转嵌入
(5)非结构化异常值
实现原理
因为敏感权重按单独权重(非结构化异常值)或小组分布在权重矩阵,SpQR量化过程分为捕获敏感小组、捕获单个异常值。
双层量化捕获分组权重:使用极小组进行分组量化,每个group 8-32个权重;再使用非对称量化算法 量化分组统计数据。
高灵敏读异常值:选择以高精度(fp16)保留这些非结构化异常值,采用类似CSR(压缩稀疏行)表示按行单独编码。详细SpQR量化算法见论文。
下图是单个权重的SpQR表示:
相关组件描述:
存储量化组
所有非异常值权重被编码为:
存储异常值
SpQR推理
基于GPU的高效解码实现:算法把组统计数据和量化权重加载到内存,反量化后执行矩阵乘法。具体算法见论文。
实验效果
精度提升
LLama模型: 7B/13B/30B/65B,Falcon模型:7B/40B, 4bit压缩精度提升相当于RTN-GPTQ。
推理性能提升
优化的 SpQR 算法比 16 位基线更快,可实现约 20-30% 的加速;比量化矩阵乘法 + 标准 PyTorch 稀疏矩阵乘法基线快近 2.0 倍。