量化
大语言模型的参数通常以高精度浮点数存储,这导致模型推理需要大量计算资源。
量化技术通过将高精度数据类型存储的参数转换为低精度数据类型存储, 可以在不改变模型参数量和架构的前提下加速推理过程。这种方法使得模型的部署更加经济高效,也更具可行性。
量化可以根据 何时量化 分为:后训练量化 和 训练感知量化,
也可以根据 量化参数的确定方式 分为:静态量化 和 动态量化。
1.PTQ(大约 2018)
后训练量化(PTQ, Post-Training Quantization)一般是指在模型预训练完成后,基于校准数据集(calibration dataset)确定量化参数进而对模型进行量化。
1.GPTQ(2023.3)
GPTQ 是一种静态的后训练量化技术。
This merges the name of the OPT model family with the abbreviation for post-training quantization (PTQ).
这将 OPT 模型系列的名称与训练后量化(PTQ)的缩写合并在一起。
(可是 OPT 哪有 G 啊)
”静态” 指的是预训练模型一旦确定,经过量化后量化参数不再更改。
GPTQ 量化技术将 fp16 精度的模型量化为 4-bit ,在节省了约 75% 的显存的同时大幅提高了推理速度。
为了使用GPTQ量化模型,您需要指定量化模型名称或路径,例如 model_name_or_path: TechxGenus/Meta-Llama-3-8B-Instruct-GPTQ
论文总结
通常量化方法分为两类
- 训练后量化 (Post Training Quantization, PTQ):适度地使用一些资源来量化预训练好的模型,如一个校准数据集和几小时的算力。
- 量化感知训练 (Quantization Aware Training, QAT):在训练或进一步微调之前 执行量化。
GPTQ 属于训练后量化,这对于大模型而言格外有趣且有意义,因为对其进行全参数训练以及甚至仅仅是微调都十分昂贵
该方案有以下两方面的优点:
- int4 量化能够节省接近 4 倍的内存,这是因为反量化操作发生在算子的计算单元附近,而不是在 GPU 的全局内存中。
- 由于用于权重的位宽较低,因此可以节省数据通信的时间,从而潜在地提升了推理速度。
GPTQ 论文解决了分层压缩的问题:
为解决这一分层压缩问题,论文作者采用了最优脑量化 (Optimal Brain Quantization, OBQ) 框架 (Frantar et al 2022) 。
OBQ 方法的出发点在于其观察到:以上等式可以改写成权重矩阵 W l W_l Wl 每一行的平方误差之和 ∑ i = 0 d r o w ∣ ∣ W l [ i , : ] X − W ^ l [ i , : ] X ∣ ∣ 2 2 \sum^{d_{row}}_{i=0}||W_{l[i,:]}X-\hat{W}_{l[i,:]}X||^2_2 ∑i=0drow∣∣Wl[i,:]X−W^l[i,:]X∣∣22
这意味着我们可以独立地对每一行执行量化。即所谓的 per-channel quantization。对每一行 W l [ i , : ] W_{l[i,:]} Wl[i,:],OBQ 在每一时刻只量化一个权重,同时更新所有未被量化的权重,以补偿量化单个权重所带来的误差。所选权重的更新采用一个闭环公式,并利用了海森矩阵 (Hessian Matrices)。
图 2:GPTQ 量化过程。使用 Cholesky 分解中存储的
逆 Hessian 信息,在给定的步骤中对连续列的块(粗体)进行量化,并在步骤结束时更新剩余的权重(蓝色)。
量化过程在每个块内递归应用:白色中间列当前正在被量化。实验效果
量化 OPT 到 4bit 和 量化 BLOOM 到 3bit ,比较 FP16 基线 和 round-to-nearest(RTN)(Yao 等人, 2022),纵轴是 wiki2 的困惑度,GPTQ 逼近于基线
比较视觉模型的 sota 的后训练方法
展示量化速度(从十亿到千亿)
应用情况
生成128序列的每个 token 迟延
2.QAT(大约 2017)
在训练感知量化(QAT, Quantization-Aware Training)中,模型一般在预训练过程中被量化,然后又在训练数据上再次微调,得到最后的量化模型
1.AWQ(2023.2)
AWQ(Activation-Aware Layer Quantization)是一种静态的后训练量化技术。
其思想基于:有很小一部分的权重十分重要,为了保持性能这些权重不会被量化。
AWQ 的优势在于其需要的校准数据集更小,且在指令微调和多模态模型上表现良好。
为了使用 AWQ 量化模型,您需要指定量化模型名称或路径,例如 model_name_or_path: TechxGenus/Meta-Llama-3-8B-Instruct-AWQ
看论文,貌似要解决部署到边缘设备上的问题
AWQ(Activation-aware Weight Quantization)的方法,用于大型语言模型(LLMs)的量化,旨在减少模型部署时的硬件要求并提高推理速度。
论文总结
背景
大型语言模型(LLMs)如 GPT 和 OPT 在各种任务上展现了卓越的性能,但同时也因其庞大的模型尺寸带来了硬件上的挑战,尤其是在内存大小和内存带宽方面。这限制了这些模型在边缘设备上的部署和使用。
图 1.
我们介绍 AWQ,这是一种用于 LLM 的多功能权重量化方法。
为了实现 AWQ,我们开发了 TinyChat,将 4 bit 量化 LLM 部署到各种边缘平台,与 FP16 相比,性能提升了 3-4 倍。
值得一提的是,我们还制造了一台由 TinyChat 驱动的 TinyChat 计算机,它包含英伟达 Jetson Orin Nano,仅有 8GB 内存和 15W 功耗。演示:https://youtu.be/z91a8DrfgEw。原理
图 2. 根据激活分布(中),我们可以在 LLM 中找到 1%的突出权重。
将突出权重保留在 FP16 中可以显著提高量化性能(PPL 从 43.2(左图)降至 13.0(中图)),但混合精度格式的硬件效率不高。
我们遵循激活感知原则,提出了 AWQ(右图)。AWQ 对每个通道进行缩放,以保护突出权重并减少量化误差。我们测量了在 INT3-g128 量化条件下 OPT-6.7B 的低的迷惑性。AWQ 基于一个关键观察:在大型语言模型中,并非所有权重对模型性能的贡献都是相同的。存在一小部分 (0.1%-1%) 的“显著”权重,对模型性能至关重要。保护这些显著权重不受量化误差的影响,可以显著减少量化损失。
选择显著权重
传统的权重量化方法可能依赖于 权重的大小或 L2 范数 来确定权重的重要性。
AWQ 则提出根据 激活(activation) 的分布来选择显著权重,因为激活值较大的权重处理了更重要的特征。
保护显著权重
为了保护这些显著权重,AWQ 提出使用 每通道(per-channel)缩放方法。在量化之前,先对权重进行缩放,特别是对那些对应于较大激活值的权重通道进行放大,以减少它们的量化误差。
量化过程
AWQ 采用分组量化的方式,将权重分组,并为每组权重确定一个缩放因子。
然后,应用量化函数将 浮点权重 映射到 较低比特整数。
优化量化误差
AWQ 通过一个简单的搜索空间来找到最优的缩放因子,该因子能够最小化量化后输出与原始输出之间的差异。具体的,
- 对每个权重组,确定初始搜索范围[α_min, α_max]
- 使用二分查找在这个范围内搜索
- 对每个候选缩放因子 α:
- 使用它进行权重量化
- 计算量化误差
- 根据误差更新搜索范围
- 选择产生最小量化误差的缩放因子
实验
瓶颈分析
图 3. NVIDIA RTX 4090 上 Llama-2-7B 的瓶颈分析。
左:在设备上 LLM 应用程序中,生成阶段比上下文阶段慢得多。
中:生成阶段受内存限制,运算强度低。 W4A16量化可以有效提高运算强度4倍。
右图:权重访问量比激活访问量大几个数量级。
因此,仅权重量化对于设备上的 LLM 更为有效。LLaMA 模型的量化
表 4. 对于不同模型大小和不同位精度,AWQ 相对于 舍入到最近量化(RTN) 进行了改进。
它在 LLaMA 和 Llama-2 模型上始终获得比 GPTQ(带和不带重新排序)更好的困惑度。指令微调模型量化
图 5. 在 GPT-4 评估协议下比较 INT3-g128 量化 Vicuna 模型与 FP16 模型(Chiang 等人,2023)。更多获胜案例(蓝色)表明性能更好。
与 RTN 和 GPTQ 相比,AWQ 持续提高了量化性能(Frantar 等人,2022),显示出对指令调整模型的泛化。更少的检验集和更好的鲁棒性
图 8.
左:AWQ 需要更小的校准集就能达到良好的量化性能。与 GPTQ 相比,它可以使用小 10 倍的校准集来实现更好的困惑度。
右图:我们的方法对于校准集分布更加稳健。总体而言,使用相同的校准和评估分布效果最好(PubMed-PubMed、Enron-Enron)。但当使用不同的校准分布(PubMed-Enron、Enron-PubMed)时,AWQ 仅增加了 0.5-0.6 的困惑度,而 GPTQ 的困惑度则较差 2.3-4.9。
所有实验均在 INT3-g128 量化下使用 OPT-6.7B 模型完成。TinyChat 部署到边缘设备的 FP16