大模型开发和微调工具Llama-Factory-->量化1(GPTQ 和 AWQ)

news/2024/12/2 9:11:56/

量化

大语言模型的参数通常以高精度浮点数存储,这导致模型推理需要大量计算资源。

量化技术通过将高精度数据类型存储的参数转换为低精度数据类型存储, 可以在不改变模型参数量和架构的前提下加速推理过程。这种方法使得模型的部署更加经济高效,也更具可行性。

在这里插入图片描述

量化可以根据 何时量化 分为:后训练量化训练感知量化

也可以根据 量化参数的确定方式 分为:静态量化动态量化

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

论文总结
通常量化方法分为两类

  1. 训练后量化 (Post Training Quantization, PTQ):适度地使用一些资源来量化预训练好的模型,如一个校准数据集和几小时的算力。
  2. 量化感知训练 (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,:]XW^l[i,:]X22

    这意味着我们可以独立地对每一行执行量化。即所谓的 per-channel quantization。对每一行 W l [ i , : ] W_{l[i,:]} Wl[i,:],OBQ 在每一时刻只量化一个权重,同时更新所有未被量化的权重,以补偿量化单个权重所带来的误差。所选权重的更新采用一个闭环公式,并利用了海森矩阵 (Hessian Matrices)。
    在这里插入图片描述

    图 2:GPTQ 量化过程。使用 Cholesky 分解中存储的
    逆 Hessian 信息,在给定的步骤中对连续列的块(粗体)进行量化,并在步骤结束时更新剩余的权重(蓝色)。
    量化过程在每个块内递归应用:白色中间列当前正在被量化。

    在这里插入图片描述

实验效果

  1. 量化 OPT 到 4bit 和 量化 BLOOM 到 3bit ,比较 FP16 基线 和 round-to-nearest(RTN)(Yao 等人, 2022),纵轴是 wiki2 的困惑度,GPTQ 逼近于基线

    在这里插入图片描述

  2. 比较视觉模型的 sota 的后训练方法

    在这里插入图片描述

  1. 展示量化速度(从十亿到千亿)

    在这里插入图片描述

  2. 应用情况

    在这里插入图片描述

    生成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%) 的“显著”权重,对模型性能至关重要保护这些显著权重不受量化误差的影响,可以显著减少量化损失

  1. 选择显著权重

    传统的权重量化方法可能依赖于 权重的大小L2 范数 来确定权重的重要性

    AWQ 则提出根据 激活(activation) 的分布来选择显著权重,因为激活值较大的权重处理了更重要的特征

  2. 保护显著权重

    为了保护这些显著权重,AWQ 提出使用 每通道(per-channel)缩放方法。在量化之前,先对权重进行缩放,特别是对那些对应于较大激活值的权重通道进行放大,以减少它们的量化误差。

  3. 量化过程

    AWQ 采用分组量化的方式,将权重分组,并为每组权重确定一个缩放因子

    然后,应用量化函数浮点权重 映射到 较低比特整数

  4. 优化量化误差

    AWQ 通过一个简单的搜索空间来找到最优的缩放因子,该因子能够最小化量化后输出与原始输出之间的差异。具体的,

    • 对每个权重组,确定初始搜索范围[α_min, α_max]
    • 使用二分查找在这个范围内搜索
    • 对每个候选缩放因子 α:
      • 使用它进行权重量化
      • 计算量化误差
      • 根据误差更新搜索范围
    • 选择产生最小量化误差的缩放因子

实验

  1. 瓶颈分析

    在这里插入图片描述

    图 3. NVIDIA RTX 4090 上 Llama-2-7B 的瓶颈分析。
    左:在设备上 LLM 应用程序中,生成阶段比上下文阶段慢得多。
    中:生成阶段受内存限制,运算强度低。 W4A16量化可以有效提高运算强度4倍。
    右图:权重访问量比激活访问量大几个数量级。
    因此,仅权重量化对于设备上的 LLM 更为有效。

  2. LLaMA 模型的量化

    在这里插入图片描述

    表 4. 对于不同模型大小和不同位精度,AWQ 相对于 舍入到最近量化(RTN) 进行了改进。
    它在 LLaMA 和 Llama-2 模型上始终获得比 GPTQ(带和不带重新排序)更好的困惑度。

  3. 指令微调模型量化

    在这里插入图片描述

    图 5. 在 GPT-4 评估协议下比较 INT3-g128 量化 Vicuna 模型与 FP16 模型(Chiang 等人,2023)。更多获胜案例(蓝色)表明性能更好。
    与 RTN 和 GPTQ 相比,AWQ 持续提高了量化性能(Frantar 等人,2022),显示出对指令调整模型的泛化。

  4. 更少的检验集和更好的鲁棒性

    在这里插入图片描述

    图 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 模型完成。

  5. TinyChat 部署到边缘设备的 FP16

    在这里插入图片描述


http://www.ppmy.cn/news/1551709.html

相关文章

第十六届蓝桥杯模拟赛(第一期)-Python

本次模拟赛我认为涉及到的知识点: 分解质因数 Python的datetime库 位运算 简单dp 1、填空题 【问题描述】 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结…

刷题日常(找到字符串中所有字母异位词,​ 和为 K 的子数组​,​ 滑动窗口最大值​,全排列)

找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 题目分析: 1.将p里面的字符先丢进一个hash1中,只需要在S字符里面找到多少个和他相同的has…

python写的服务,用docker制作镜像并且打包

步骤1 简单写一个python服务脚本app.py,通过http访问一个端口,收到helloworld from flask import Flask, request app Flask(__name__) app.route(/, methods[GET]) # 确保包括GET方法 def hello_world(): return Hello, World! if __name__ __main…

鸿蒙技术分享:Navigation页面容器封装-鸿蒙@fw/router框架源码解析(三)

本文是系列文章,其他文章见:鸿蒙fw/router框架源码解析(一)-router页面管理鸿蒙fw/router框架源码解析(二)-Navigation页面管理鸿蒙fw/router框架源码解析(四)-路由Hvigor插件实现原…

后端-mybatis的一对多

分类表和菜单表是一对多的关系,菜单表对分类表是一对一的关系,我们拿前者来写一对多。 在分类表中加上一行属性list集合 最好new一下 写查询方法 写查询的sql语句 写分类表中普通字段的映射 写菜单表的字段映射,是集合。使用collection标…

Docker 清理镜像策略详解

文章目录 前言一、删除 Docker 镜像1. 查看当前镜像2. 删除单个镜像3. 删除多个镜像4. 删除所有未使用的镜像5. 删除悬空的 Docker 镜像6. 根据模式删除镜像7. 删除所有镜像 二、删除 Docker 容器1. 查找容器2. 删除一个或多个特定容器3. 退出时删除容器4. 删除所有已退出的容器…

4.8E-R图

ER图 里面的东西说的是对应关系,就是说股东持有民宿的数量从1到n,民宿对股东就是民宿对应的股东是从1到n 例子 连接数据库

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习还是公司研发需求,都相当合适,包您满…