这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!已被收录到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 ...
随机推荐
- day09-Java数组
Java数组 9.稀疏数组 什么是稀疏数组? 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方式是: 记录数组一共有几行几列,有多少个不同的值 把具有 ...
- day01-2-导入驱动和工具类
满汉楼01-2 4.功能实现01 4.1导入驱动和工具类 4.1.1导入驱动 首先将连接mysql的相关jar包引入项目中,分别右键,点击add as library 4.1.2导入工具类Utilit ...
- JS(运算符、流程控制)
一 运算符(操作符) 1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用的运算符有: 算数运算符 递增和递减运算符 ...
- Clang RecursiveASTVisitor & ASTFrontendActions based on it
RecursiveASTVisitor Basics 类声明 template<typename Derived> class clang::RecursiveASTVisitor< ...
- 快速上手系列:传智播客Java基础学习笔记
配置环境,把JDK的bin所在路径复制到Path,末尾加; 基本语法 一 常见的DOS命令 盘符的切换 d:回车 目录的进入 cd javase c ...
- #dp#JZOJ 1281 旅行
分析 考虑每次都是取出一个连续段置换一下, 可以预处理出相邻差的绝对值的前缀和, 但是如果正序无法知道上一段是从哪个终止的 所以倒序就可以了 代码 #include <cstdio> #i ...
- 如何通过 Makefile 优化加速编译过程提高开发效率
在软件开发中,编译是一个必不可少的过程.但是,当代码规模变得越来越大时,编译时间也会变得越来越长,这会严重影响开发效率.在这种情况下,优化Makefile可以帮助我们加速编译过程,以下是一些Makef ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit
1.问题描述 实时验证和非实时验证的区别是什么? 解决方案 相同点: "手机号快速验证"和"实时验证"都是为了向用户发起获取手机号信息的请求.最终目的都是为了获 ...
- django admin后台自定义数据保存方式
故事背景是这样的: 为了方便工作中数据的整理,需要开发一个 管理系统,用于记录一些事情. 该系统不需要精美的前端的页面,只需要使用django的admin后台管理就可以了. 我需要在添加数据的时候,把 ...
- SQL语言分为哪几类
SQL 语言分为哪几类 介绍 SQL 语言分为三类,包括 DDL.DML 和 DCL. DDL DDL(Data Definition Language,数据定义语言) 用来创建或者删除存储数据用的数 ...