这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!已被收录到IJCAI
简介: 论文通过减少模型稀疏训练过程中需要更新的参数量,从而减少大模型稀疏训练的时间以及资源开销,是首个大模型参数高效的稀疏训练算法PST。
作者:李深、李与超
近日,阿里云机器学习PAI关于大模型稀疏训练的论文《Parameter-Efficient Sparsity for Large Language Models Fine-Tuning》被人工智能顶会IJCAI 2022接收。
论文提出了一种参数高效的稀疏训练算法PST,通过分析权重的重要性指标,得出了其拥有两个特性:低秩性和结构性。根据这一结论,PST算法引入了两组小矩阵来计算权重的重要性,相比于原本需要与权重一样大的矩阵来保存和更新重要性指标,稀疏训练需要更新的参数量大大减少。对比常用的稀疏训练算法,PST算法可以在仅更新1.5%的参数的情况下,达到相近的稀疏模型精度。
背景
近几年各大公司和研究机构提出了各式各样的大模型,这些大模型拥有的参数从百亿级别到万亿级别不等,甚至于已经出现十万亿级别的超大模型。这些模型需要耗费大量的硬件资源进行训练和部署,从而导致它们面对着难以落地应用的困境。因此,如何减少大模型训练和部署所需的资源成为了一个急需解决的问题。
模型压缩技术可以有效的减少模型部署所需的资源,其中稀疏通过移除部分权重,使得模型中的计算可以从稠密计算转换为稀疏计算,从而达到减少内存占用,加快计算速度的效果。同时,稀疏相比于其他模型压缩方法(结构化剪枝/量化),可以在保证模型精度的情况下达到更高的压缩率,更加合适拥有大量参数的大模型。
挑战
现有的稀疏训练手段可以分为两类,一类是基于权重的data-free稀疏算法;一类是基于数据的data-driven稀疏算法。基于权重的稀疏算法如下图所示,如magnitude pruning[1],通过计算权重的L1范数来评估权重的重要性,并基于此生成对应稀疏结果。基于权重的稀疏算法计算高效,无需训练数据参与,但是计算出来的重要性指标不够准确,从而影响最终稀疏模型的精度。
基于数据的稀疏算法如下图所示,如movement pruning[2],通过计算权重和对应梯度的乘积作为衡量权重重要性的指标。这类方法考虑到了权重在具体数据集上的作用,因此能够更加准确的评估权重的重要性。但是由于需要计算并保存各个权重的重要性,因此这类方法往往需要额外的空间来存储重要性指标(图中S)。同时相较于基于权重的稀疏方法,往往计算过程更加复杂。这些缺点随着模型的规模变大,会变得更加明显。
综上所述,之前的稀疏算法要么高效但是不够准确(基于权重的算法),要么准确但是不够高效(基于数据的算法)。因此我们期望提出一种高效的稀疏算法,能够准确且高效的对大模型进行稀疏训练。
破局
基于数据的稀疏算法的问题是它们一般会引入额外的与权重相同大小的参数来学习权重的重要性,这让我们开始思考如何减少引入的额外参数来计算权重的重要性。首先,为了能够最大化利用已有信息来计算权重的重要性,我们将权重的重要性指标设计成如下公式:
即我们结合了data-free和data-driven的指标来共同决定最终模型权重的重要性。已知前面data-free的重要性指标无需额外的参数来保存且计算高效,因此我们需要解决的就是如何压缩后面那项data-driven重要性指标所引入的额外训练参数。
基于之前的稀疏算法,data-driven重要性指标可以设计成,因此我们开始分析通过该公式计算出来的重要性指标的冗余性。首先,基于之前的工作已知,权重和对应的梯度均具有明显的低秩性[3,4],因此我们可以推导出该重要性指标也具有低秩性,从而我们可以引入两个低秩小矩阵来表示原始与权重一样大的重要性指标矩阵。
其次,我们分析了模型稀疏后的结果,发现它们具有明显的结构性特征。如上图所示,每张图的右边是最终稀疏权重的可视化结果,左边是统计每一行/列对应稀疏率的直方图。可以看出,左边图有30%的行中的大部分权重都被移除了,反之,右边图有30%的列中的大部分权重都被移除了。基于这样的现象,我们引入了两个小结构化矩阵来评估权重每一行/列的重要性。
基于上述的分析,我们发现data-driven的重要性指标存在低秩性和结构性,因此我们可以将其转换成如下表示形式:
其中A和B表示低秩性,R和C表示结构性。通过这样的分析,原本和权重一样大的重要性指标矩阵就被分解成了4个小矩阵,从而大大减少了参与稀疏训练的训练参数。同时,为了进一步减少训练参数,我们基于之前的方法将权重的更新也分解成了两个小矩阵U和V,因此最后的重要性指标公式变成如下形式:
对应算法框架图如下所示:
最终PST算法实验结果如下,我们在NLU(BERT、RoBERTa)和NLG(GPT-2)任务上与magnitude pruning和movement pruning进行比较,在90%的稀疏率下,PST可以在大部分数据集上达到与之前算法相当的模型精度,但是仅需1.5%的训练参数。
PST技术已经集成在阿里云机器学习PAI的模型压缩库,以及Alicemind平台大模型稀疏训练功能中。为阿里巴巴集团内部落地使用大模型带来了性能加速,在百亿大模型PLUG上,PST相比于原本的稀疏训练可以在模型精度不下降的情况下,加速2.5倍,内存占用减少10倍。目前,阿里云机器学习PAI已经被广泛应用于各行各业,提供AI开发全链路服务,实现企业自主可控的AI方案,全面提升机器学习工程效率。
论文名字:Parameter-Efficient Sparsity for Large Language Models Fine-Tuning
论文作者:Yuchao Li , Fuli Luo , Chuanqi Tan , Mengdi Wang , Songfang Huang , Shen Li , Junjie Bai
论文pdf链接:https://arxiv.org/pdf/2205.11005.pdf
参考文献
[1] Song Han, Huizi Mao, and William J Dally. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding.
[2] Victor Sanh, Thomas Wolf, and Alexander M Rush. Movement pruning: Adaptive sparsity by fine-tuning.
[3] Edward J Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. Lora: Low-rank adaptation of large language models.
[4] Samet Oymak, Zalan Fabian, Mingchen Li, and Mahdi Soltanolkotabi. Generalization guarantees for neural networks via harnessing the low-rank structure of the jacobian.
原文链接:http://click.aliyun.com/m/1000350178/
本文为阿里云原创内容,未经允许不得转载。
这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!已被收录到IJCAI的更多相关文章
- 少个人保护?我来!——阿里云在ICANN第3届GDD峰会纪实
西班牙马德里以足球和斗牛闻名于世,2017年5月9日至11日,ICANN第三届全球域名部门行业峰会(GDD)在这里召开.阿里云作为亚洲域名保有量最高的注册商,代表成千上万客户的利益与权力,派出代表,前 ...
- 千亿参数开源大模型 BLOOM 背后的技术
假设你现在有了数据,也搞到了预算,一切就绪,准备开始训练一个大模型,一显身手了,"一朝看尽长安花"似乎近在眼前 -- 且慢!训练可不仅仅像这两个字的发音那么简单,看看 BLOOM ...
- AI加持的阿里云飞天大数据平台技术揭秘
摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...
- 如何查找消耗资源较大的SQL
对于优化来讲,查找消耗资源较大的SQL至关重要,下面介绍几个之前用到的SQL. 1.从V$SQLAREA中查询最占用资源的查询. select b.username username,a.disk_r ...
- oracle 中如何定位重要(消耗资源多)的SQL
链接:http://www.xifenfei.com/699.html 标题:oracle 中如何定位重要(消耗资源多)的SQL 作者:惜分飞©版权所有[文章允许转载,但必须以链接方式注明源地址,否则 ...
- pytorch在有限的资源下部署大语言模型(以ChatGLM-6B为例)
pytorch在有限的资源下部署大语言模型(以ChatGLM-6B为例) Part1知识准备 在PyTorch中加载预训练的模型时,通常的工作流程是这样的: my_model = ModelClass ...
- SQLite占用资源少原因
本篇承接上篇SQLite详解的下篇,介绍SQLIte为什么占用资源少的原因?本文主要参考https://blog.csdn.net/hanyingzhong/article/details/46400 ...
- 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解
Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...
- 利用扩展事件(Xevents)捕捉高消耗查询
生产环境中有时需要使用者抓取一些特定的语句分析,如超超长查询,或高IO查询等.一般来说大家对跟踪比较熟悉,主要因为其有完善的UI支持.由于扩展事件在sql2012才提供UI支持,所以虽然在08时就已经 ...
- 想精度高,可以考虑用c语言中的函数gettimeofday
大家好: 在 win32 + bcb 时, 有个 GetTickCount() 返回第统启动到现在的 tick, 单位 ms.请问在 Linux + qt5 怎样实现呢? 如果用 QDateTime ...
随机推荐
- day03-应用线程01
JavaGUI-坦克大战03 7.线程的应用01 7.1坦克子弹发射思路 在坦克大战2.0基础上添加如下功能:当玩家按下 j 键,就发射一颗子弹. 思路: 当发射一颗子弹后,就等于启动了一个线程 He ...
- HttpClient 详解
作者:小白豆豆5链接:https://www.jianshu.com/p/14c005e9287c来源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1.HTTP 请求创建 ...
- hdfs的透明加密记录
1.背景 我们知道,在hdfs中,我们的数据是以block块存储在我们的磁盘上的,那么默认情况下,它是以密文存储的,还是以明文存储的呢?如果是明文存储的,那么是否就不安全呢?那么在hdfs中是如何做才 ...
- C# 人脸比对服务,自带模型,离线部署
软件说明 基于以下开源项目,做了再次封装 GitHub - ViewFaceCore/ViewFaceCore: C# 超简单的离线人脸识别库.( 基于 SeetaFace6 ) 可以一键开启服务: ...
- 基于proteus的4026的二分频计数
基于proteus的4026的二分频计数 1.芯片原理 4026还是一个CMOS芯片,是直接输出段码的计数器.显然,这个芯片的作用就是和七段数码管配合,直接将计数结果显示在数码管上.这里只是用于分频, ...
- KingbaseES 行级安全策略介绍
本文详细介绍了KingbaseES中通过CREATE POLICY为一个表定义一条行级安全性策略.注意为了应用已被创建的策略,在表上必须启用行级安全性. 策略名称是针对每个表的.因此,一个策略名称可以 ...
- Android相对布局(来自菜鸟教程)
- windows下安装SASS
window下安装ruby与sass(附ruby) webstorm设置sass自动编译,及参数配置 安装sass以及如何在sublime里使用 sublime text 3 配置sass环境 sub ...
- #树状数组#洛谷 3531 [POI2012] LIT-Letters
题目 给出两个长度相同且由大写英文字母组成的字符串\(A\).\(B\),保证\(A\)和\(B\)中每种字母出现的次数相同. 现在每次可以交换\(A\)中相邻两个字符,求最少需要交换多少次可以使得\ ...
- [AHOI2014/JSOI2014/一本通1722]骑士游戏 题解 (spfa做dp)
题目描述 在游戏中,JYY一共有两种攻击方式,一种是普通攻击,一种是法术攻击.两种攻击方式都会消耗JYY一些体力.采用普通攻击进攻怪兽并不能把怪兽彻底杀死,怪兽的尸体可以变出其他一些新的怪兽,注意一个 ...