这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!已被收录到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 ...
随机推荐
- 基于python的多线程串口处理实例源码解析
一 概念 1.简介 该源码可以让串口收发数据并行处理. 2.特性 使用了线程 使用了serial 使用了class 二 源码解析 1.串口读取固定数据函数: def uart_recv_header( ...
- Grails的数据库相关开发
1.开发domain和service 在出来的输入框里输入domain的名字,可以包括包名. 这里我输入test.domain.House,点finish 创建了两个groovy文件,一个当然是tes ...
- AOSP-刷机
准备 1.AOSP源码下载 可以参考AOSP下载且编译 这里我下载的是android-12.1.0_r5的AOSP源码 2.下载驱动 因为我下载的是android-12.1.0_r5的AOSP源码,因 ...
- Ubuntu 14.04 升级到Gnome3.12z的折腾之旅(警示后来者)+推荐Extensions.-------(一)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文发布于 2014-12-19 22:40:20 ...
- 使用systemd部署r-nacos
1. 前言 r-nacos是一个用rust实现的nacos服务.相较于java nacos来说,是一个提供相同功能,启动更快.占用系统资源更小(初始内存小于10M).性能更高.运行更稳定的服务. r- ...
- KingbaseES V8R6 等待事件之LWLock Buffer_IO
等待事件含义 当进程同时尝试访问相同页面时,等待其他进程完成其输入/输出(I/O)操作时,会发生LWLock:BufferIO等待事件.其目的是将同一页读取到共享缓冲区中. 每个共享缓冲区都有一个与L ...
- java实战:多属性排序
多属性排序的核心点就是对Arrays.sort()和Collections.sort()方法的Comparator进行重写 Arrays.sort()的三种用法 1.1.Arrays.sort(int ...
- ABC326 A-F
vp on 2023.11.12 A.B:略. C:双指针或者二分. D:暴搜+剪枝,每一行的计算量最多是 $60$. E:期望相关.计算每个点的概率,乘上这个点的权值,并求和即可. F:meet i ...
- 【Java】使用位运算完成数组中两个变量交换位置
1 /** 2 * 3 */ 4 package com.raliable.chapter_0; 5 /** 6 * @author : Administrator 7 * @date :2022年4 ...
- 小师妹学JavaIO之:文件编码和字符集Unicode
目录 简介 使用Properties读取文件 乱码初现 字符集和文件编码 解决Properties中的乱码 真.终极解决办法 总结 简介 小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现了一 ...