LLM 量化算法AutoRound 0.3 发布及原理浅析

news2024/9/19 10:33:47

这里写自定义目录标题

      • AutoRound V0.3 特性
      • 原理浅析
        • 其他工作
        • AutoRound 原理

AutoRound(https://github.com/intel/auto-round)在Llama3.1-8B-Instruct上效果明显优于AWQ/GPTQ等方法,在10个任务的平均准确率上我们以63.93%由于AWQ的63.15%和GPTQ的63.04%,具体数据可参考在 低比特开源LLM排行榜。

AutoRound V0.3 特性

支持了更多的设备

AutoRound格式支持CPU、HPU和CUDA推理,并且解决了2-bit kernel精度问题

模型量化recipe

在低比特开源LLM排行榜上发布了,另外发布了少量QWEN2的量化模型。由于公司政策问题,发布模型都要很长时间的审核,因此大部分的量化模型不能发布。

实验性功能

引入了包括激活量化和mx_fp数据类型在内的多个实验性功能,但是目前不支持实际部署。我们发现AutoRound这这些场景中也有很大的作用。

多模态模型支持

支持了Llava, phi3-vision, Qwen-vl的tuning和推理

其他

另外我们也实现了对low_cpu_mem_usageauto_awq格式、校准数据集连接以及带有chat_template的校准数据集的支持。

接下来我们也会尝试整合不同的算法来提升类似2bit和W4A4等场景的精度,欢迎关注。

觉得我们的工作有帮助的话, 麻烦github上加个小星星

原理浅析

其他工作

post traning量化如GPTQ和AWQ在业界已经非常出名了,但是在有些模型上还是有不小的损失,另外各有各的缺点(所有算法都有自己的缺点,包括AutoRound). GPTQ相当于伤了左脑补右脑,并且由于hessian矩阵的存在,有时候会不正定。 AWQ相当于转移问题,将量化的难度转移到activation或者不敏感的weight上,它需要插入一个op,这个op大部分可以融合到 layernorm,但是有些只能融合到其他weight上或者只能放弃处理,对精度有一定的影响。此外一些框架会为提速支持compute_dtype为int8,也就是说激活也会量化,AWQ模型一般在这些上面就容易掉点。最后 GPTQ/AWQ共有的缺点就是标定数据不能很多,不然会很慢,因为基本上是相当于batch_size等于数据集大小。

类似于QAT的方法也有很多,不少论文证明的效果非常好。但是个人不太喜欢这样的算法,主要有两点原因,

1 一般速度明显更慢并且需要调学习率和epoch. 虽然我个人也有点训练的经验,但是在调学习率和epoch上感觉还是门外汉,如果大家有好的调参资料可以分享一下。

2 有overfit的风险。一般QAT用的微调数据其实也不是很多,但是大模型训练的数据明显要高几个数量级并且instruct模型或者chat模型都是经过特殊数据(一般拿不到)训练过的来提升安全性等能力。 而QAT的算法或者其他的训练算法一般都会用Adam 优化器,但是Adam优化器对weight的调整是不可空的,有可能经过训练后模型跟原来的差别很大。大部分的论文只会报少量任务的数据,我个人理解就是就算在这些任务上表现比较好,如果模型改动挺大,那没测的一些能力有可能跟原始模型差别比较大。

AutoRound 原理

AutoRound主要是用signSGD也就是在梯度上去正负号来微调网络,微调的参数主要包括两个部分,一个是rouding的值,一个是weight clip,用来控制scale和zp

请添加图片描述

这里引入一点简单的公式来说明
W ~ = s ∗ c l i p ( ⌊ W s + z p ⌉ , n , m ) , n , m ∈ N \widetilde{W} = s*clip(\left\lfloor\frac{W}{s}+zp \right\rceil,n,m),n,m \in \mathbb{N} W =sclip(sW+zp,n,m),n,mN

s = m a x ( W ) − m i n ( W ) 2 b i t − 1 s = \frac{max(W)-min(W)}{2^{bit}-1} s=2bit1max(W)min(W)

如上面的公式,一般想把一个浮点的权重W量化成一个整数的公式如上,搜一下网上资料很多,不赘述。

我们综合之前的工作在这上面加了两个可调整的参数,一个是V用来控制up-down rounding值,V一般是在[-0.5,0.5],一个是alpha/beta用来控制s和zp , 一般是在[0.5, 1], 有些模型用[0,1]更好些
W ~ = s ∗ c l i p ( ⌊ W s + z p + V ⌉ , n , m ) , n , m ∈ N s = m a x ( W ) ∗ α − m i n ( W ) ∗ β 2 b i t − 1 \widetilde{W} = s*clip(\left \lfloor\frac{W}{s}+zp +V \right \rceil,n,m),n,m \in \mathbb{N} \\ s = \frac{max(W)*\alpha-min(W)*\beta}{2^{bit}-1} W =sclip(sW+zp+V,n,m),n,mNs=2bit1max(W)αmin(W)β
区别于其他的工作,我们采用signSGD来微调这么参数而不是常用的Adam.

为什么这么设计

1 为什么只允许调up-down rounding

一个是为了防止overfit的问题,让调整后的模型还是接近原始模型;另外一个我们也测过放开这个限制,印象中在我们测试的场景中没有优势;第三个是如果范围扩大用SignSGD不好微调,具体原因可以看下面。

2 为什么用SignSGD

2.1 上面提到了,V/alpha/beta都是有界的,所以用SignSGD可以快速的为每一个参数快速的探索整个空间。因为SignSGD是这么调整权重的
W = W − S i g n ( g r a d ) ∗ l r W = W-Sign(grad)*lr W=WSign(grad)lr
如果我们控制所有iter下lr的和, 那在一定步数下,我们就能遍历整个空间。比如我们的默认参数是200步,然后初始lr是1.0/200, 然后用的是linear decay,那这200步lr的和是200*1.0/200 *0.5 = 0.5,刚好是0.5, 由于sign有正负,所有它搜索的范围是[-0.5, 0.5]刚好是我们想要的区间。

2.2 搜索精度够足够用

V: V的最优解空间很大,比如原始是4.6,本来是要往上rounding,如果最优解是向下rounding,那么V的取值可以是[-0.5, -0.1),所以只要搜到其中的任何一个值就可以,因此不需要很精确的搜索

alpha, beta:由于我们的lr是线性下降的,虽然没有数学证明或者实际测过,我们用signround能搜到理论的解还是很多的,所以两点的间隔应该不会很大,就算最优解刚好落到这两点之间,实际上损失也不大。

2.3 节省显存和提速。

Adam会存下不少的state,有momentum和variance. 不要小看这些临时变量,因为在AMP训练中,这些都是FP32的,具体可以参考ZeRO: Memory Optimizations Toward Training Trillion Parameter Models

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

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

相关文章

Qt登录窗口

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),btn(new QPushButton("取消", this)),login_btn(new QPushButton("登录", this)) { ui->setupUi(this);thi…

R 语言学习教程,从入门到精通,R 数据重塑(15)

1、R 数据重塑 合并数据框 R 语言合并数据框使用 merge() 函数。 merge() 函数语法格式如下: # S3 方法 merge(x, y, …) # data.frame 的 S3 方法 merge(x, y, by intersect(names(x), names(y)),by.x by, by.y by, all FALSE, all.x all, all.y all,sort…

【JS逆向学习】AES加密文本如何在python中自我解密

一、查看解密后的内容 二、未解密前的内容 三、分析网页 import requestsheaders = {Accept: application/json, text/plain, */*,Accept-Language: zh-CN,zh;q=0.9,Cache-Control: no-cache,Connection: keep-alive,Origin: https://www.swguancha.com,Pragma: no-cache,Ref…

喷淋温湿度氙灯老化试验箱

氙灯试验箱是一种模拟全阳光光谱的试验设备,主要用于测试材料在紫外光、可见光和红外光等不同光谱环境下的耐候性能。它采用氙弧灯作为光源,通过设定各种试验参数,如温度、湿度和辐照度等,来模拟自然环境中的光照条件,…

使用排名前三的华为解锁工具来绕过忘记的华为锁屏密码

如果您在未使用“设置”应用的情况下将华为手机恢复出厂设置,同时启用了出厂重置保护 (FRP) 安全功能,您的华为设备将卡在帐户验证界面。您可以使用帐户凭据轻松绕过此锁定。但是,假设您无法回忆起旧的帐户信息。在这种情况下,您应…

Apache Flink中TaskManager,SubTask,TaskSlot,并行度之间的关系

Apache Flink 中Application 与 Job 一个完整的Flink Application 一般组成如下: Source 数据来源Transformation 数据转换处理等Sink 数据传输 Flink 中一个或者多个Operator(算子)组合对数据进行转换形成一个 Transformation,一…

优化业务流程的关键:深入探讨BPA流程设计

在当前竞争激烈的商业环境中,业务流程自动化(BPA)已经成为企业提升效率、减少成本和提高业务灵活性的关键工具。今天,我们将深入探讨BPA流程设计的重要性及其实施步骤,为企业提供实用的指南。 什么是BPA? …

spring揭秘00-ioc定义与ioc容器及集成工厂模式

文章目录 【README】【1】IOC概述【1.1】ioc定义【1.2】IOC三种依赖注入方式 【2】ioc服务提供者【2.1】 ioc服务提供者职责【2.2】ioc服务提供者如何管理对象间依赖关系 【3】IOC容器【3.1】BeanFactory 【4】集成工厂模式创建bean【4.1】静态工厂方法【4.2】非静态工厂方法【…

QT+CUDA 同时编译Qt和CUDA代码

工作需要把cuda的代码移植到QT中,和Qt项目一起编译,这里记录一下。 前期准备 1.安装CUDA 电脑需要安装好 CUDA,可以看我的这篇文章安装:Windows和WSL安装CUDA-CSDN博客 使用命令 nvcc --version 查看安装的 CUDA 版本。 CUDA 的默…

通过API构建开放式外卖系统平台:合作伙伴的集成与管理

随着外卖行业的迅速发展,外卖系统平台的开放性和可扩展性变得尤为重要。通过API构建一个开放式的外卖系统平台,企业可以更轻松地与合作伙伴进行集成和管理。本文将探讨如何通过API构建开放式外卖系统平台,并通过代码示例展示与合作伙伴的集成…

md-editor-v3适配VUE3的MarkDown编辑器-好用-简单-免费

官方文档: https://imzbf.github.io/md-editor-v3/zh-CN/indexhttps://imzbf.github.io/md-editor-v3/zh-CN/index 效果演示:(支持黑暗模式切换) toolbar包括: [bold,underline,italic,strikeThrough,title,sub,sup…

系统编程 day13 进程5

前提: 信息量:线程间有序的进行工作 资源的个数 机制:描述可使用资源的个数 操作: p操作:使用这个资源,表示资源个数减1 v操作:产生这个资源,表示资源个数加1 p操作逻辑&…

CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models

摘要 随着预训练的视觉语言模型(如 CLIP)的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中,来调整预训练的视觉语言模型。具体来说,CoOp 将提示中的上下文…

DataGridView用法合集(9):添加控件

目录 45. DataGridView列中显示选择框CheckBox 46. DataGridView中显示下拉框ComboBox 47. DataGridView单击打开下拉框 48. DataGridView中显示按钮 49. DataGridView中显示链接 50. DataGridView中显示图像 45. DataGridView列中显示选择框CheckBox [VB.NET] 添加Chec…

MySQL5.7数据库---入门教程(小白教程)

一、MySQL安装 本文以MySQL5.7安装为例。在设置完root密码和添加一个用户后,一路默认。 1、 2、通过点击红圈里的箭头选择对应的版本。 3、 4、端口(Port)一般默认不需要更改。 5、 二、配置环境变量 配置环境变量可以方便在win系统中cmd…

HarmonyOS 端云一体化 -- 项目初始化

HarmonyOS 端云一体化 – 项目初始化 端云一体化官方简介 本文档基于 api9 编写本来我想用最新版的api搞,但是在 AppFallery Connect 上创建项目的时候有bug,没没办法成功创建应用,无奈只能切换到 api9 版本。 1.新建项目 1.1 登录华为官…

突破大模型极限!GLM-4-long百万长文本模型上线bigmodel.cn

最近业务上多了长文本的需求,因为要在prompt里面塞进比较多的rag内容,以供决策,且这些召回的内容,都有可能用到。这非常考验大模型的长文本能力,技术选型上都要着重考察这部分。 正巧,上次清影试用后&…

游戏开放式新手引导框架设计

强制性引导:只能点某个按钮 优:程序简单 缺: 玩家体验差 开放式引导:不强制点 优:玩家体验好 缺: 程序复杂 需求分析: 1.开放式引导,引导是到达某个条件后进行一系列行为&#xff08…

水星Mercury X1轮式人形机器人结合openc算法&STag标记码视觉系统实现精确抓取!

本案例展示了如何利用视觉系统提升机械臂的抓取精度,成功实现了人形机器人的双臂抓取不在局限于单臂抓取。 引言 如今市面上已经有了许多不同类型的人形机器人,涵盖了服务行业和医疗行业等各个领域。这些机器人以其智能化和自动化的特性逐渐融入我们的日…

比例PQ阀信号放大器的选择

比例PQ阀信号放大器的选择时,需要考虑一系列的因素以确保放大器能精确匹配比例阀的需求,保障液压系统的高效和稳定运行。根据所控制的比例阀类型,选择与之兼容的放大器型号。如各厂商不带反馈比例方向阀、比例溢流阀、比例减压阀等均可用BEUE…