开发者社区> 阿里云大数据Al技术> 正文

【GTC 22】PaiSparse:面向深度学习的稀疏算子库

简介: 随着越来越多超大语言模型的出现,如何将这些超大语言模型在实际业务中部署落地成为了一个急需解决的问题。这些超大语言模型拥有百亿千亿甚至于万亿的参数,如此巨大的参数使得无法将超大模型直接部署在单张卡上,而需要几个甚至几十个 GPU 参与模型推理,会消耗非常大的计算资源。然而一些常用的模型优化技术如剪枝和量化虽然能够有效的降低模型大小,但是这些算法却很难在保证精度的情况下达到较大的压缩率。因此我们选择了非结构化稀疏来压缩超大语言模型,从而使得他们能够在保证精度的情况下达到较高的压缩率。
+关注继续查看

研究动机


随着越来越多超大语言模型的出现,如何将这些超大语言模型在实际业务中部署落地成为了一个急需解决的问题。这些超大语言模型拥有百亿千亿甚至于万亿的参数,如此巨大的参数使得无法将超大模型直接部署在单张卡上,而需要几个甚至几十个 GPU 参与模型推理,会消耗非常大的计算资源。因此将超大语言模型进行部署的时候,就需要利用模型优化技术将它们进行压缩,从而减少模型参数量并提高推理速度。一些常用的模型优化技术如剪枝和量化虽然能够有效的降低模型大小,但是这些算法却很难在保证精度的情况下达到较大的压缩率。而对于超大语言模型而言,只有达到较高的压缩率,才有可能在单卡上部署起来。因此我们选择了非结构化稀疏来压缩超大语言模型,从而使得他们能够在保证精度的情况下达到较高的压缩率。


目前已有的稀疏算子库 CuSparse 虽然能够有效加速稀疏计算,但是我们发现神经网络训练出来的稀疏分布一般不是均匀的,而是呈现一定的分布特点(比如权重中一些行的稀疏率很高,一些行的稀疏率很低)。然而 CuSparse 是为了通用的高性能计算而开发出来的,一般而言均匀稀疏分布才能在 CuSparse 上得到较好的加速性能,而神经网络这样的分布特点无法在 CuSparse 上获得较好的加速效果。和高性能计算场景不一样的是,在神经网络推理中,我们可以预先根据权重的分布特点对最佳的稀疏算子实现进行搜索,从而生成针对当前权重稀疏分布更优的实现。


PaiSparse


PaiSparse 的设计思路如下图所示:

image

对于稀疏算子而言,主要可以分为三个计算阶段:

  1. Prolog Stage:从 gpu 内存中读取 CSR 格式的数据并存入寄存器中。
  2. Reduction Stage:负责进行稀疏计算。
  3. Epilog Stage:将计算结果存入 gpu 内存中。


我们预先在上述的三个计算阶段中定义了很多代码片段,并通过集成这些代码片段生成最终的稀疏算子。对于单个稀疏算子,我们的搜索空间包括 launch dim, index data type, thread group 和 reduction method 等。


其中,Index data type 的搜索空间包括 int 16和 int 32。int 16 可以有效减少内存读取的开销,但是会增加bit操作,如何进行选取会根据 weight 的具体分布来决定。Thread group 决定了有多少 thread 参与结果中一行的计算,这个参数可以使得算子的计算更加平衡。


除此之外,我们发现 reduction method 也是影响稀疏算子性能非常关键的一个因素,因此我们提出了四种 reduction method 并通过搜索决定最佳实现。这四种方法分别是:Register reduction,SHFL reduction,Shared memory reduction 和 Atomic reduction。针对一个特定的稀疏权重,我们需要首先计算需要执行多少次 register reduction,然后在此基础上计算执行多少次 SHFL reduction。接下来计算需要执行多少次 shared memory reduction,最后在执行完上述三种 reduction 后,剩余的数据累积到 atomic reduction。通过结合这4种 reduction method,PaiSparse 通过 nctrc 生成所有稀疏算子实现,并通过评估它们的性能决定最优实现。


实验结果


我们首先评估了 PLUG(Pre-training for Language Understanding and Generation)一个中文超大语言模型进行 99% 稀疏的精度结果。该模型拥有 270B 的参数量,通过 1TB以上的训练数据训练而成。


image


如上图所示,通过 99% 稀疏,PLUG 模型依然能够拥有相比于一些较小的语言模型更优的模型精度。


接下来,我们评估了在 99% 稀疏率下,PaiSparse 的稀疏算子性能。


image


首先在 SpMV 上,当 batch size=1 的时候,在 FP16 的数据格式上,PaiSparse 相比于CuBlas 有 2.7~22 倍的加速,相比于 CuSparse 有 1.22~1.91 倍的加速。在FP32的数据格式上,PaiSparse 相比于 CuBlas 有 27~37 倍的加速,相比于 CuSparse 有1.15~1.6 倍的加速。


image



在 SpMM 上,PaiSparse 相比于 CuSparse 拥有 1.8~4.9 倍的加速效果。


image



最后,比较 99% 稀疏下 PLUG 模型的性能。首先99%的稀疏可以在使用 4 张 GPU 进行推理的情况下,将显存占用从13.5GB 降低到 1.8GB,极大的减少了模型的显存占用,同时相比于原始 PLUG 模型至少需要4张V100进行推理的情况,稀疏后的 PLUG 可以部署在单张 V100 上,减少了部署的成本。比较整个 PLUG 网络端到端的推理速度,集成了 PaiSparse的稀疏网络相比于原始 Dense 网络可以达到 1.6 倍的加速。


总结


稀疏可以在保证模型精度的情况下,有效减少大模型需要的计算资源。我们提出的PaiSparse 通过分析深度学习里权重稀疏分布的特点,实现了搜索稀疏算子的整套方案,从而可以针对具体的稀疏分布生成的最优的稀疏算子实现,达到更好的计算性能。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18579 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27715 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
12966 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
21933 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15287 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19979 0
+关注
阿里云大数据Al技术
阿里云大数据Al技术
27
文章
0
问答
来源圈子
更多
相关文档: 机器学习平台PAI
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载