EfficientQAT: 大型语言模型的高效量化感知训练

news2024/12/26 19:10:51

安装

  1. 克隆此仓库并导航到 EfficientQAT 文件夹
git clone https://github.com/OpenGVLab/EfficientQAT.git
cd EfficientQAT
  1.  安装包
conda create -n efficientqat python==3.11

conda activate efficientqat

pip install -r requirements.txt

 模型库

我们提供多个预量化的 EfficientQAT 模型,如下所示:

  • WikiText2 PPL 是在 2048 上下文长度下测量的。
  • 平均准确率表示在 5 个零样本推理任务(WinoGrande, PIQA, HellaSwag, Arc-Easy, Arc-Challenge)中的平均准确性,版本为 lm-eval v0.4.2。
  •  1GB = 位
  • Hub Link: EQAT 表示原始检查点。我们还将检查点转换为 GPTQ 和 BitBLAS 格式, 可以通过 GPTQModel 直接加载。(PS: GPTQModel 是 AutoGPTQ 的官方修复仓库,未来将并入 AutoGPTQ。)
Model 量化WikiText2 PPL 平均准确率 模型大小 (GB)Hub链接
Llama-2-7Bfp165.4764.8613.2-
Llama-2-7Bw4g1285.5364.273.7EQAT|GPTQ|BitBLAS
Llama-2-7Bw3g1285.8164.023.1EQAT
Llama-2-7Bw2g646.8660.142.3EQAT|GPTQ|BitBLAS
Llama-2-7Bw2g1287.1759.502.2EQAT|GPTQ|BitBLAS
Llama-2-13Bfp164.8867.8125.4-
Llama-2-13Bw4g1284.9367.526.8EQAT|GPTQ|BitBLAS
Llama-2-13Bw3g1285.1267.285.6EQAT
Llama-2-13Bw2g645.9664.884.0EQAT|GPTQ|BitBLAS
Llama-2-13Bw2g1286.0863.883.8EQAT|GPTQ|比特 BLAS
Llama-2-70Bfp163.3272.41131.6-
Llama-2-70Bw4g1283.3972.6235.8EQAT|GPTQ|BitBLAS
Llama-2-70Bw3g1283.6171.7629.1EQAT
Llama-2-70Bw2g644.5269.4820.1EQAT|GPTQ|BitBLAS
Llama-2-70Bw2g1284.6168.9318.9EQAT|GPTQ|BitBLAS
Llama-3-8Bfp166.1468.5813.0-
Llama-3-8Bw4g1286.4768.435.4EQAT|GPTQ|BitBLAS
Llama-3-8Bw3g1287.0967.354.7EQAT
Llama-3-8Bw2g649.4160.763.9EQAT|GPTQ|BitBLAS
Llama-3-8Bw2g1289.8059.363.8EQAT|GPTQ|BitBLAS
Llama-3-70Bfp162.8575.33137.8-
Llama-3-70Bw4g1283.1774.5738.9EQAT|GPTQ|BitBLAS
Llama-3-70Bw3g1284.1972.4232.2EQAT
Llama-3-70Bw2g646.0867.8923.2EQAT|GPTQ
Llama-3-70Bw2g1286.3867.5722.0EQAT|GPTQ|BitBLAS
Llama-3-8B-Instructfp168.2968.4313.0-
Llama-3-8B-Instructw4g1287.9368.395.4EQAT|GPTQ|BitBLAS
Llama-3-8B-Instructw3g1288.5567.244.7EQAT
Llama-3-8B-Instructw2g6411.1960.663.9EQAT|GPTQ|BitBLAS
Llama-3-8B-Instructw2g12811.7360.163.8EQAT|GPTQ|BitBLAS
Llama-3-70B-Instructfp165.3373.78137.8-
Llama-3-70B-Instructw4g1285.3573.4738.9EQAT|GPTQ|BitBLAS
Llama-3-70B-Instructw3g1285.6572.8732.2EQAT
Llama-3-70B-Instructw2g647.8667.6423.2EQAT|GPTQ|BitBLAS
Llama-3-70B-Instructw2g1288.1467.5422.0EQAT|GPTQ|BitBLAS
Mistral-Large-Instruct-2407fp162.7477.76228.5-
Mistral-Large-Instruct-2407w2g645.5873.5435.5GPTQ

 训练

EfficientQAT 包括两个连续的训练阶段:所有参数的块级训练 (Block-AP) 和量化参数的端到端训练 (E2E-QP)。详细的训练脚本可以在 ./examples 中找到。我们在下面提供了关于 Llama-2-7B 的 w2g64 量化的训练脚本示例。

  1. Block-AP

在运行以下命令之前,您应该将 --model 修改为脚本中全精度模型的文件夹。

bash examples/block_ap/Llama-2-7b/w2g64.sh

具体来说,--weight_lr 在我们的实验中对于 2 位是2e-5,而对于 3/4 位是1e-5

一些其他重要的论点:

  • --train_size: 训练数据样本数量,默认值为 4096
  • --val_size:验证数据样本数量,默认值为 64
  • --off_load_to_disk:将训练数据集保存到磁盘,节省 CPU 内存,但可能会降低训练速度
  1. E2E-QP

然后,您可以加载 Block-AP 的量化模型以进行进一步的 E2E-QP。具体而言,E2E-QP 可以通过更改训练数据集适应不同的场景。您应该在运行以下命令之前,将 --quant_model_path 修改为脚本中量化模型的文件夹。

1) Train on RedPajama

bash examples/e2e_qp/Llama-2-7b/w2g64-redpajama.sh

 2) 在阿尔帕卡上训练

bash examples/e2e_qp/Llama-2-7b/w2g128-redpajama.sh

具体而言,--learning_rate 在我们的实验中对 2 位数为 2e-5,而对 3/4 位数为 1e-5。您可以减少 --per_device_train_batch_size 来降低训练过程中的内存占用,并确保 --gradient_accumulation_steps 按相同比例增加,以保持相同的批量大小。

 推断

  1. 从 Huggingface 下载预量化的 EfficientQAT 模型
pip install huggingface_hub

huggingface-cli download ChenMnZ/Llama-2-7b-EfficientQAT-w2g64 --local-dir ./output/pre_quantized_models/Llama-2-7b-EfficientQAT-w2g64
  1. 评估预量化的 EfficientQAT 模型
CUDA_VISIBLE_DEVICES=0 python main_block_ap.py \
--resume_quant ./output/pre_quantized_models/Llama-2-7b-EfficientQAT-w2g64 \
--net Llama-2 \
--wbits 2 \
--group_size 64 \
--output_dir ./output/inference_results/ \
--eval_ppl \
--eval_tasks  piqa,arc_easy,arc_challenge,hellaswag,winogrande

 模型传输

首先,您应该安装gptqmodel包以支持 GPTQ 和 BitBLAS 量化格式:

git clone https://github.com/ModelCloud/GPTQModel.git && cd GPTQModel
bash install.sh
  • 根据我们的经验,我们使用gptqmodel v0.9.8进行测试。

然后,我们提供以下三种转账方式:

  1. 将 EfficientQAT 检查点转移到 GPTQ 格式
bash examples/model_transfer/efficientqat_to_gptq/llama-2-7b.sh
  • 注意: 目前 AutoGPTQ 存在用于非对称量化的溢出错误。因此,我们选择官方修复错误的版本 GPTQModel 来传输我们的非对称量化模型。因此,该库提供的 GPTQ 模型只能通过 GPTQModel 成功加载,否则是 AutoGPTQ。
  1. 将 EfficientQAT 检查点转移到 BitBLAS 格式
bash examples/model_transfer/efficientqat_to_bitblas/llama-2-7b.sh
  • 加速存在一些问题,详见此问题。
  1. 将 EfficientQAT 检查点中的 fp32 数据转移到半精度对应项。一些参数在训练时以 fp32 保存,您可以将它们转移为半精度,以进一步减少训练后的模型大小。
bash examples/model_transfer/fp32_to_16/llama-2-7b.sh

其他格式的推断

以下是使用 GPTQ 或 BitBLAS 量化格式进行推理的示例。

from transformers import AutoTokenizer
from gptqmodel import GPTQModel

quant_dir = "ChenMnZ/Llama-2-7b-EfficientQAT-w2g128-GPTQ"
# quant_dir = "ChenMnZ/Llama-2-7b-EfficientQAT-w2g128-BitBLAS"
# or local path

tokenizer = AutoTokenizer.from_pretrained(quant_dir, use_fast=True)


# load quantized model to the first GPU
model = GPTQModel.from_quantized(quant_dir)

# inference with model.generate
print(tokenizer.decode(model.generate(**tokenizer("Model quantization is", return_tensors="pt").to(model.device))[0]))

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5动漫主题网站——天空之城 10页 html+css+设计报告成品项目模版

📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 五、⚙️网站代码 🧱HTML结构代码 💒CSS样式代码 六、🔧完整源码下载 七、📣更多 一、&#…

day2 美化后的登录

import sysfrom PyQt6.QtGui import QIcon, QPixmap from PyQt6.QtWidgets import QApplication, QWidget, QLabel from PyQt6 import uicclass MyWidget(QWidget):def __init__(self):super().__init__()self.setWindowTitle("猫咪乐园")uiuic.loadUi("./untit…

uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊

实现效果如图 抽成组件navbar.vue&#xff0c;放入分包 <template><view class"header-nav-box":style"{height:Props.imgShow?:statusBarHeightpx,background:Props.imgShow?:Props.bgColor||#ffffff;}"><!-- 是否使用图片背景 false…

Android KEY的哪些事儿

目录 一、APK应用签名 1、什么是APK应用签名&#xff1f; 1.1 目的和作用&#xff1f; 1.2 长什么样子&#xff1f; 2、APK应用签名使用流程 步骤一&#xff1a;如何生成APK应用签名文件&#xff1f; 步骤二&#xff1a;如何集成APK应用签名文件&#xff1f; 步骤三&am…

Docker中安装GeoServer

一、准备工作 #创建数据持久化目录 mkdir -p /usr/local/application/geoserver/data_dir#授权 chmod 777 -R /usr/local/application/ 这一步是为了在容器外部管理GeoServer的数据&#xff0c;使得数据能够持久化存储。 二、拉取GeoServer镜像 从Docker Hub拉取GeoServer的…

Create Stunning Word Clouds with Ease!

Looking to craft breathtaking word clouds? WordCloudStudio is your go-to solution! Whether you’re a marketer, educator, designer, or simply someone who loves visualizing data, this app has everything you need. Download now: https://apps.apple.com/app/wor…

【JavaEE初阶】落霞与孤鹜齐飞,秋水共长天一色 - (重点)线程

本篇博客给大家带来的是线程的知识点, 由于时间有限, 分三天来写, 本篇为线程第二篇. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅…

java_判断语句——acwing

题目一&#xff1a;倍数 665. 倍数 - AcWing题库 代码 import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.nextInt(), b sc.nextInt();if(a%b0 || b%a0) System.out.printf("Sao Mu…

深度解析棋牌游戏开发:从搭建到运营的全流程实战分享

作为从事游戏开发十五年的技术老兵&#xff0c;经历了国内游戏市场从端游到手游的全流程变迁。市面上大多数棋牌产品&#xff0c;无论是传统房卡模式还是创新竞技玩法&#xff0c;自己曾经都参与设计和研发过。今天&#xff0c;我将结合多年的实战经验&#xff0c;分享棋牌游戏…

mfc110u.dll是什么意思,mfc110u.dll丢失解决方法大全详解

mfc110u.dll是Microsoft Foundation Classes (MFC)库的一个特定版本&#xff08;版本11.0&#xff09;的Unicode动态链接库文件。MFC是Microsoft为C开发者设计的一个应用程序框架&#xff0c;主要用于简化Windows应用程序的开发工作。这个框架封装了很多Windows API函数&#x…

【C++跬步积累】—— 继承

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;C跬步积累 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日一题 &#x1f7e1; Linux跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0…

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介&#xff1a;本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点&#xff0c;随后深入讲解 GET 请求&#xff0c;以百度页面为例&#xff0c;展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索&#xff0c;以及正确设置 encoding 避…

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前&#xff0c;我们学习了传输层中的TCP和UDP&#xff0c;重点是TCP协议&#xff0c;他帮我们解决具体到主机的哪个应用&#xff08;端口&#xff09;、传输的可靠&#xff08;序列号、校验和…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

C++设计模式(装饰模式)

一、介绍 1.动机 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”&#xff0c;由于继承为类型引入的静态特质&#xff0c;使得这种扩展方式缺乏灵活性&#xff1b;并且随着子类的增多&#xff08;扩展功能的增多&#xff09;&#xff0c;各种子类的组合&#xff0…

【VMware】Ubuntu 虚拟机硬盘扩容教程(Ubuntu 22.04)

引言 想装个 Anaconda&#xff0c;发现 Ubuntu 硬盘空间不足。 步骤 虚拟机关机 编辑虚拟机设置 扩展硬盘容量 虚拟机开机 安装 gparted sudo apt install gparted启动 gparted sudo gparted右键sda3&#xff0c;调整分区大小 新大小拉满 应用全部操作 调整完成

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

SpringCloud Alibaba第十二章&#xff0c;升级篇&#xff0c;服务注册与配置中心Nacos 一、为什么SpringCloud Alibaba 1、为什么 有了spring cloud这个微服务的框架&#xff0c;为什么又要使用spring cloud alibaba这个框架了&#xff1f;最重要的原因在于spring cloud中的…

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议&#xff1f; 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介&#xff1a;本文章主要是演示如何用java代码以及TCP协议实现网络通信&#xff0c;实…

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了&#xff0c;那就是-协程池&#xff0c;无论你是日常工作还是面试中面试官都无法避免协程池&#xff0c;掌握协程池你也就算是入门go的并发编程了&#xff0c;打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…