温馨提示:
本篇文章已同步至"AI专题精讲" ABQ-LLM:用于大语言模型的任意比特量化推理加速

摘要

大语言模型(LLMs)在自然语言处理任务中取得了革命性的进展。然而,其实际应用受到巨大的内存与计算开销的限制。训练后量化(Post-Training Quantization,PTQ)被认为是一种有效的LLM推理加速方法。尽管PTQ在LLM模型压缩中越来越受欢迎,但其部署仍面临两大挑战:

首先,低比特量化会导致性能下降;其次,受限于GPU中整数计算单元类型的限制,不同精度下的量化矩阵运算无法被有效加速。

为了解决这些问题,我们提出了一种新颖的任意比特量化算法与推理框架 —— ABQ-LLM(Arbitrary-Bit Quantized LLM)。它不仅在各种量化设置下实现了更优的性能,还支持在GPU上进行高效的任意精度量化推理。

ABQ-LLM 引入了以下几个关键创新:

  1. 分布校正方法:针对Transformer模块中的权重和激活值全量化所引起的分布偏移问题,提出校正方法以提升低比特精度下的性能;
  2. 比特平衡策略(Bit Balance Strategy):用于缓解在极低比特(如2-bit)下由于分布不对称带来的性能退化;
  3. 创新的量化加速框架:基于 BTC(二进制TensorCore)等价操作,重新构建任意精度组合下的量化矩阵乘法,不再依赖于INT4/INT8计算单元,从而使每个组件的比特宽度收益都能转化为实际的加速收益,并在混合精度设置下最大化性能(如W6A6、W2A8)。

在LLaMA-7B模型的W2*A8量化配置下,ABQ-LLM在WikiText2数据集上取得了 7.59的困惑度(相比AffineQuant的9.76降低了2.17)。与SmoothQuant相比,ABQ-LLM实现了 1.6倍的推理加速和 2.7倍的显存压缩率。

1 引言

近年来的大语言模型(LLMs)(如 Bubeck et al., 2023;Touvron et al., 2023a,b)在多个自然语言任务上展现了惊人的能力,包括推理(Clark et al., 2019, 2018)、认知处理(Xu et al., 2023a;Hardy et al., 2023)和对话生成(Hu et al., 2023)。然而,这些模型普遍拥有庞大的参数规模,带来了极高的显存占用与带宽瓶颈(Zheng et al., 2024;Kim et al., 2023)。

训练后量化(PTQ) 是一种能够显著减少计算与存储开销的有效手段。该技术通过将LLMs中的权重与激活值从高精度浮点数转换为低精度整数进行存储,并在推理过程中使用高效的整数矩阵乘法算子,从而加速模型推理。

目前,LLMs 中约 80% 的计算与参数访问 都集中在 通用矩阵乘法(GEMM)向量乘法(GEMV) 操作上。尤其在自回归解码阶段,GEMM操作基本退化为GEMV(因为是逐token生成),因此GEMV的计算效率和内存访问效率直接决定了LLM推理的速度与能耗。

为了提升GEMM/GEMV的内存访问效率,LLM推理中通常采用量化推理策略。目前主流方法是仅对权重量化,即内核基于反量化后的FP16值进行计算。然而在高并发场景下,这种方法的性能提升十分有限。

为了进一步增强量化推理的性能,业界开始推进 权重与激活值的全量化(WA全量化),以减少激活内存访问并充分利用GPU上的量化核算能力(如NVIDIA提供的量化核)。但目前该领域的实际应用仍存在多项挑战:

  • NVIDIA仅支持有限数量的硬件加速指令(Lin et al., 2024a;Ashkboos et al., 2024;Zhao et al., 2024),限制了量化算法的设计空间;
  • 非主流组合(如W4A8、W2A4)需要在计算过程中转换为W8A8或W4A4,从而降低效率(Lin et al., 2024b);
  • 由于GEMV操作的存在,在batch size小于8时需进行额外padding,导致W4A4与W8A8量化在小batch推理下效率低下;
  • 最后,在极低比特(如W2A8、W2A6)下,WA全量化模型在精度上仍面临较大挑战。

ABQ-LLM 针对上述挑战提出解决方案,在保持精度的同时,实现了真正意义上的任意比特量化推理加速。

在这里插入图片描述

在本文中,我们提出了一种面向训练后量化(Post-Training Quantization, PTQ)的新型量化框架,称为 ABQ-LLM。通过分析transformer模块内部各组成部分的量化敏感性(见图1)以及量化前后的注意力图变化(见图2),我们发现 down proj线性层 和 注意力图(attention map)对量化特别敏感。

为此,我们提出了以下两项关键技术:

  • 双余弦相似度分布校正(double cosine similarity distribution correction)
  • 注意力图分布自举(attention map distribution bootstrap)

以对down proj的输出 进行校正,从而精确调整量化常数,恢复在低比特(如 W6A6、W4A4 和 W2A8)下的模型性能。

此外,我们还对低比特量化下的性能下降进行了深入分析,并通过提出比特平衡策略(bit balance strategy),解决了诸如INT2这类低比特表示中常见的不对称损失问题(asymmetric loss),显著提升了INT2配置下的量化性能。

最后,我们实现了一款基于BTC(二进制TensorCore)等价计算的定制化软件引擎,首次在LLM领域实现了真正意义上的量化自由(quantization freedom)。该引擎:

  • 摆脱了INT4/INT8计算单元的限制;
  • 有效规避了GEMV计算瓶颈;
  • 在LLaMA-7B的W2A8配置下,相较于SmoothQuant实现了1.6倍的最终推理加速,并达到了SOTA级别的性能表现。

我们的贡献如下

  • 我们提出了一种新颖的块级分布校正与补偿方案,用于缓解因权重与激活值全量化所引起的分布偏移,从而显著提升低比特下的模型性能;
  • 我们解决了INT2等低比特量化中的不对称损失问题,通过比特平衡策略显著改善了INT2配置下的量化效果,提升了模型在极低比特精度下的表现;
  • 我们设计并实现了首个在LLM领域实现量化自由的软件引擎,打破了INT4/INT8算力限制,有效规避GEMV性能瓶颈。在LLaMA-7B的W2A8配置下,相较于SmoothQuant实现了1.6倍的加速效果,达到当前最优性能。

在这里插入图片描述

2 相关工作

大语言模型(LLM)的量化可以大致分为两类:仅对权重进行量化,以及同时对权重和激活值进行量化。

权重量化。 为了缓解计算负担,一些研究聚焦于仅对权重进行量化。已有方法通过保留关键通道实现精确的8比特量化。也有方法利用基于Hessian的误差补偿,降低LLM中的量化误差,从而实现3比特量化。另有研究考虑激活值中离群点对权重量化的影响,显著提升了量化模型的性能。部分方法通过可学习的码本或引入额外微调,推动了2比特量化的可行性。还有研究通过非结构化的混合精度细粒度权重分组,提升了后训练量化的表现。此外,也有一系列工作采用高效的参数高效微调技术,通过微调进一步压缩模型权重。

权重-激活量化。 与仅对权重进行量化不同,权重-激活量化在加速LLM推理的过程中,同时对权重和激活值(包括KV缓存)进行量化。这类方法的主要挑战在于处理激活值中的离群点,这些离群点可能导致严重的量化误差。为了解决这一问题,已有工作提出了细粒度、硬件友好的全量化方案,对权重和激活值进行处理。还有方法通过数学等效变换,将量化难点从激活值转移到权重,从而实现8比特的权重与激活值联合量化。一些方法则通过训练量化参数进一步增强模型性能。然而受限于GPU平台的指令集限制,尽管某些工作实现了更低比特数的量化(例如6比特),实际推理时仍只能使用8比特的计算单元。此外,即便是实现了低比特量化,这些方法依然难以在推理阶段摆脱硬件限制,无法充分发挥潜力。

在这里插入图片描述

3 方法

本节将详细介绍我们提出的 ABQ-LLM 方法。我们首先描述分布校正与比特平衡策略,然后介绍任意比特精度的推理框架。

3.1 预备知识

已有研究通过缩放激活值中的离群点来实现权重-激活全量化,但这会增加权重数值范围的变化,从而使得权重量化更加敏感。相反,也有研究通过缩放权重来优化权重量化,但这会显著增加激活值的多样性,进一步加剧激活量化的难度。这些方法的共同缺陷在于:人为设定激活值与权重之间的缩放平衡因子存在局限性,难以实现理想的量化平衡。

为了解决这一问题,我们引入了一种基于分布校正的缩放方法。借鉴已有方法的思想,我们将权重与激活之间的平衡向量设置为可学习参数,并为权重引入了可学习的截断参数。通过分布校正和比特平衡策略来优化模型性能,我们的目标函数如下:

arg⁡min⁡s,α,β∥WX−Q(clip(W)⋅diag(s))Q(diag(s)−1⋅X)∥(1)\underset{s, \alpha, \beta}{\arg\min} \ \| WX - Q(\text{clip}(W) \cdot \text{diag}(s))Q(\text{diag}(s)^{-1} \cdot X) \|\quad(1) s,α,βargmin WXQ(clip(W)diag(s))Q(diag(s)1X)(1)

其中,WWWXXX 分别表示全精度权重和激活值,Q(⋅)Q(\cdot)Q() 表示对权重与激活的量化操作,clip(⋅)\text{clip}(\cdot)clip() 表示截断操作,sss 为缩放因子,同时定义 Wmax=α⋅max⁡(W)W_{\text{max}} = \alpha \cdot \max(W)Wmax=αmax(W)Wmin=β⋅min⁡(W)W_{\text{min}} = \beta \cdot \min(W)Wmin=βmin(W),用于控制权重的截断范围。

3.2 通过分布校正提升量化效果

我们在对大语言模型进行量化过程中观察到,不同层对量化的敏感度差异显著,其中某些层对整体量化性能有关键影响。为验证这一现象,如图 1 所示,我们在对 LLaMA-7B 模型进行权重-激活全量化的过程中,对各个组成模块进行了定量分析。实验发现,对 MLP 和注意力模块中的 gate proj 和 up proj 层进行量化仅会导致轻微的性能下降,而对 down proj 线性层进行量化则会引发明显的性能退化。这表明,提升模型量化性能的关键在于解决 down proj 层的量化问题。

进一步分析发现,导致性能下降的主要原因是 down proj 层中激活值的量化。在 INT4、INT3、INT2 等低比特宽度下,激活值的表达能力受限,导致模型的分布与全精度情况相比发生了严重偏移。如图 3 所示,在进行块级量化校准时,我们在 down proj 层的输出上施加双对数余弦相似度损失,用于修正量化模型的分布。该损失函数被称为 DLC 损失,记为 LDLCiL^i_{\text{DLC}}LDLCi
LDLCi=−log(dqi⋅dfpi∥dqi∥∥dfpi∥)−log(dqi⋅dfp∗i∥dqi∥∥dfp∗i∥)(2)\mathcal { L } _ { D L C } ^ { i } = - l o g ( \frac { \boldsymbol { d } _ { q } ^ { i } \cdot \boldsymbol { d } _ { f p } ^ { i } } { \lVert \boldsymbol { d } _ { q } ^ { i } \rVert \lVert \boldsymbol { d } _ { f p } ^ { i } \rVert } ) - l o g ( \frac { \boldsymbol { d } _ { q } ^ { i } \cdot \boldsymbol { d } _ { f p ^ { * } } ^ { i } } { \lVert \boldsymbol { d } _ { q } ^ { i } \rVert \lVert \boldsymbol { d } _ { f p ^ { * } } ^ { i } \rVert } )\quad(2) LDLCi=log(dqidfpidqidfpi)log(dqidfpidqidfpi)(2)
其中,dqid^i_qdqi 表示第 iii 个 transformer 块的量化输出,dfpid^i_{fp}dfpi 表示第 iii 个 transformer 块的全精度输出,dfp∗id^i_{fp*}dfpi 表示该块在输入来自第 i−1i-1i1 个 transformer 块的量化输出情况下的全精度输出。

此外,我们还分析了 LLaMA-7B 模型中解码器各层的输入与输出激活之间的余弦相似度。结果表明,模型的前几层和最后几层的余弦相似度存在显著差异,表明这些层对模型推理性能有较大影响。为此,我们在这些层的 down proj 层引入了分布补偿向量,利用公式 (3) 对其分布偏差进行修正。
Wq=clamp(⌈W+γab⊤Δ⌋+z,0,2n−1)(3)W _ { q } = c l a m p ( \lceil \frac { W + \gamma a b ^ { \top } } { \Delta } \rfloor + z , 0 , 2 ^ { n } - 1 )\quad(3) Wq=clamp(⌈ΔW+γab+z,0,2n1)(3)
其中,⌈·⌋ 表示四舍五入操作,nnn 表示目标比特宽度,Δ\DeltaΔ 表示步长,zzz 为零点。WqW_qWqWWW 分别表示量化后的权重和全精度权重。向量 aaabbb 是分布补偿向量,其中当 γ=1\gamma = 1γ=1 时表示执行补偿,当 γ=0\gamma = 0γ=0 时表示不进行补偿。

为了提升量化模型的性能,我们分析了量化前后 Attention Map 分布的变化,如图 2 所示。在全精度模型中,注意力显著集中在第一个 token 上,凸显其在引导文本生成过程中的关键作用,这一现象也与 LLM-QAT(Liu 等,2023)的结论一致。然而,量化过程会破坏这种注意力分布,使模型对第一个 token 的关注度降低。为了解决这一问题并在量化过程中恢复模型的注意力机制,我们引入了基于注意力的 KL 散度方法,用于重构注意力图。
LAKLi=DKL(attnqi∥attnfpi)+DKL(attnfpi∥attnqi)(4)\mathcal { L } _ { A K L } ^ { i } = D _ { K L } ( a t t n _ { q } ^ { i } \parallel a t t n _ { f p } ^ { i } ) + D _ { K L } ( a t t n _ { f p } ^ { i } \parallel a t t n _ { q } ^ { i } )\quad(4) LAKLi=DKL(attnqiattnfpi)+DKL(attnfpiattnqi)(4)
其中,attnqi\text{attn}^i_qattnqi 表示第 iii 个 transformer 块的量化后注意力图输出,attnfpi\text{attn}^i_{fp}attnfpi 表示同一块的全精度注意力图输出。
在这里插入图片描述

最后,我们将 DLC 损失与 AKL 损失结合起来,最终的优化目标为:

s∗i,α∗i,βi∗=arg⁡min⁡si,αi,βi(LDLCi+LAKLi)(5)s^i_*, \alpha^i_*, \beta_i^* = \arg\min_{s_i, \alpha_i, \beta_i} (L^i_{DLC} + L^i_{AKL})\quad(5) si,αi,βi=argsi,αi,βimin(LDLCi+LAKLi)(5)

其中,s∗is^i_*siα∗i\alpha^i_*αiβi∗\beta_i^*βi 是第 iii 个 transformer 块经过校准后的参数。当量化输出与全精度输出的分布匹配时,损失接近于零,从而有效地指导量化过程。

3.3 比特平衡策略

通常,预训练的大语言模型权重呈现近似正态分布,具有对称性。通过QQ图(Quantile-Quantile图)我们验证了预训练模型权重分布的强对称性(详见附录A)。然而,在标准的2比特整数(INT2)量化中,数值表示仅限于四个值,且量化范围是对称的,如{-2, -1, 0, 1} 或 {-1, 0, 1, 2},这破坏了原有的权重对称分布(详见附录A)。这种不对称导致了显著的性能下降,如表1所示,性能从W4A16下降到W3A16降低了0.46,而从W3A16下降到W2A16则降低了5.19,降幅非常明显。

为了解决这种不对称对LLM量化的影响,我们采用了比特平衡策略,类似于(Li等,2016;Ma等,2024a),将INT2的对称量化空间扩展为{-2, -1, 0, 1, 2}。这一修改使模型性能恢复到7.50,与W3A16相比处于合理范围内。

温馨提示:
阅读全文请访问"AI深语解构" ABQ-LLM:用于大语言模型的任意比特量化推理加速

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90308.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90308.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90308.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka的shell操作

Kafka 提供了丰富的 shell 命令工具,位于 Kafka 安装目录的 bin/ 目录下(Windows 系统为 bin/windows/)。这些命令用于管理主题、生产者、消费者、分区等核心组件。以下是常用的 Kafka shell 操作大全:一、主题(Topic&…

client-go: k8s选主

快速上手 下面这个代码就是一个选主的大概逻辑 package mainimport ("context""flag""fmt"_ "net/http/pprof""os""path/filepath""time""golang.org/x/exp/rand"v1 "k8s.io/api/core/v…

为什么Java的String不可变?

为什么Java的String不可变? 场景: 你在开发多线程用户系统时,发现用户密码作为String传递后,竟被其他线程修改。这种安全隐患源于对String可变性的误解。Java将String设计为不可变类,正是为了解决这类核心问题。 1️⃣…

在Ubuntu上使用QEMU学习RISC-V程序(1)起步第一个程序

文章目录一、 引言二、 环境准备三、编写简单的RISC-V程序四、 编译步骤详解五、使用QEMU运行程序六、程序详解七、退出QEMU八、总结附录:QEMU中通过UTRA显示字符工作原理1、内存映射I/O原理2、add.s程序工作流程3、关键指令解析4、QEMU模拟的UART控制器5、为什么不…

R拟合 | 一个分布能看到三个峰,怎么拟合出这三个正态分布的参数? | 高斯混合模型 与 EM算法

1. 效果已知数据符合上图分布,怎么求下图的三个分布的参数mu, sigma,及每个分布的权重 lambda? 2. 代码: 高斯混合模型(Gaussian Mixture Model,简称GMM) library(mixtools) set.seed(123) # 确保结果可重复…

Excel自动分列开票工具推荐

软件介绍 本文介绍一款基于Excel VBA开发的自动分列开票工具,可高效处理客户对账单并生成符合要求的发票清单。 软件功能概述 该工具能够将客户对账单按照订单号自动拆分为独立文件,并生成可直接导入发票清单系统的标准化格式。 软件特点 这是一款体…

【自用】JavaSE--Stream流

概述获取Stream流集合的stream流集合名.stream( );collection集合List集合与Set集合都属于Collection集合,因此可以直接调用stream方法获取stream流,示例如下结果>map集合map集合存在键值对,因此无法使用该方法直接获取stream流&#xff0…

【Elasticsearch】快照与恢复功能详解

《Elasticsearch 集群》系列,共包含以下文章: 1️⃣ 冷热集群架构2️⃣ 合适的锅炒合适的菜:性能与成本平衡原理公式解析3️⃣ ILM(Index Lifecycle Management)策略详解4️⃣ Elasticsearch 跨机房部署5️⃣ 快照与恢…

技嘉z370主板开启vtx

技嘉z370vtx应该默认就是开启状态,虽然主板开启的vtx但是系统默认设置会导致vtx不能使用 1. 关闭hyper-V,Windows虚拟机监控程序平台,虚拟机平台 控制面板->程序->启用或关闭windows功能 2.以管理员身份运行CMD bcdedit /set hypervisorlaunchtype off 3.…

Springmvc的自动解管理

中央转发器&#xff08;DispatcherServlet&#xff09;控制器视图解析器静态资源访问消息转换器格式化静态资源管理一、中央转发器Xml无需配置<servlet><servlet-name>chapter2</servlet-name><servlet-class>org.springframework.web.servlet.Dispatc…

C#_定时器_解析

问题一:这里加lock是啥意思?它的原理是, 为什么可以锁住? private readonly Timer _timer;/// <summary>/// 构造函数中初始化定时器/// </summary>public FtpTransferService(){// 初始化定时器_timer new Timer(_intervalMinutes * 60 * 1000);_timer.Elapsed…

Trae开发uni-app+Vue3+TS项目飘红踩坑

前情 Trae IDE上线后我是第一时间去使用体验的&#xff0c;但是因为一直排队问题不得转战Cursor&#xff0c;等到Trae出付费模式的时候&#xff0c;我已经办了Cursor的会员&#xff0c;本来是想等会员过期了再转战Trae的&#xff0c;但是最近Cursor开始做妖了 网上有一堆怎么…

低代码中的统计模型是什么?有什么作用?

低代码开发平台中的统计模型是指通过可视化配置、拖拽操作或少量代码即可应用的数据分析工具&#xff0c;旨在帮助技术人员及非技术人员快速实现数据描述、趋势预测和业务决策。其核心价值在于降低数据分析门槛&#xff0c;使业务人员无需深入掌握统计原理或编程技能&#xff0…

Linux 下在线安装启动VNC

描述 Linux中的VNC就类似于Windows中的远程桌面系统 本文只记录在Cent OS 7的系统下在线安装VNC。 安装VNC 1、安装VNC yum install tigervnc-server2、配置VNC的密码 为用户设置 VNC 密码&#xff08;首次运行会提示输入&#xff0c;也可以提前输入&#xff09; vncpasswd密码…

支持OCR和AI解释的Web PDF阅读器:解决大文档阅读难题

支持OCR和AI解释的Web PDF阅读器&#xff1a;解决大文档阅读难题一、背景&#xff1a;为什么需要这个工具&#xff1f;问题场景解决方案二、技术原理&#xff1a;如何实现这些功能&#xff1f;1、核心技术组件2、工作流程3、关键点三、操作指南1、环境准备2、生成Html代码3、We…

研发过程都有哪些

产品规划与定义 (Product Planning & Definition) 在详细的需求调研之前&#xff0c;通常会进行市场分析、竞品分析、确立产品目标和核心价值。这个阶段决定了“我们要做什么”以及“为什么要做”。 系统设计与架构 (System & Architectural Design) 这是开发的“蓝图”…

旧物回收小程序系统开发——开启绿色生活新篇章

在当今社会&#xff0c;环保已经成为全球关注的焦点话题。随着人们生活水平的提高&#xff0c;消费能力不断增强&#xff0c;各类物品的更新换代速度日益加快&#xff0c;大量旧物被随意丢弃&#xff0c;不仅造成了资源的巨大浪费&#xff0c;还对环境产生了严重的污染。在这样…

UE5 UI 水平框

文章目录slot区分尺寸和对齐方式尺寸&#xff1a;自动模式尺寸&#xff1a;填充模式对齐常用设置所有按钮大小一致&#xff0c;不受文本影响靠右排列和unity的HorizontalLayout不太一样slot 以在水平框中放入带文字的按钮为例 UI如下布置 按钮的大小受slot的尺寸、对齐和内部…

【Golang】Go语言变量

Go语言变量 文章目录Go语言变量一、Go语言变量二、变量声明2.1、第一种声明方式2.2、第二种声明方式2.3、第三种声明方式2.4、多变量声明2.5、打印变量占用字节一、Go语言变量 变量来源于数学&#xff0c;是计算机语言中能存储计算结果或能表示值抽象的概念变量可以通过变量名…

Qt WebEngine Widgets的使用

一、Qt WebEngine基本概念Qt WebEngine中主要分为三个模块&#xff1a;Qt WebEngine Widgets模块&#xff0c;主要用于创建基于C Widgets部件的Web程序&#xff1b;Qt WebEngine模块用来创建基于Qt Quick的Web程序&#xff1b;Qt WebEngine Core模块用来与Chromeium交互。网页玄…