MLPerf世界纪录技术分享:通过模型压缩优化取得最佳性能

作者 | 刘姝

供稿 | 浪潮

MLPerf竞赛由图灵奖得主大卫·帕特森(David Patterson)联合谷歌、斯坦福、哈佛大学等单位共同成立,是国际上最有影响力的人工智能基准测试之一。在MLPerf V0.7推理竞赛开放赛道中,浪潮信息通过模型压缩优化算法取得性能大幅提升,将ResNet50的计算量压缩至原模型的37.5%,压缩优化后的ResNet50推理速度相比优化前单GPU提升83%,8GPU提升81%,基于浪潮NF5488A5服务器,每秒最多可以处理549782张图片,排名世界第一。本文将重点介绍浪潮在比赛中使用的模型压缩算法的设计思路、实现方式及效果。

1. 什么是模型压缩

为了提高识别准确率,当前深度学习模型的规模越来越大。ResNet50参数量超过2500万,计算量超40亿,而Bert参数量达到了3亿。不管是训练还是推理部署,这对平台的计算能力和存储能力都提出了非常高的要求。当前深度学习已经发展到部署应用普及阶段,在移动端/嵌入式端设备,计算/存储资源是有限的,大模型难以适用。

很多深度神经网络中存在显著的冗余,仅仅训练一小部分原来的权值参数就有可能达到和原网络相近的性能,甚至超过原网络的性能[1]。这给模型压缩带来了启发。

模型压缩是通过特定策略降低模型参数量/计算量,使其运行时占用更少的计算资源/内存资源,同时保证模型精度,满足用户对模型计算空间、存储空间的需求,从而能够将模型更好地部署在移动端、嵌入式端设备,让模型跑得更快、识别得更准。

2.常用模型压缩方法

模型压缩有多种实现方法,目前可分为5大类:

(1)模型裁剪:

实现方式:对网络中不重要的权重进行修剪,降低参数量/计算量。

使用方式:分为非结构化裁剪与结构化裁剪,非结构化裁剪需结合定制化软硬件库,结构化裁剪无软硬件限制。

(2)模型量化

实现方式:以低比特位数表示网络权重,(如fp16/8bit/4bit/2bit),降低模型的占用空间,进行推理加速。

使用方式:需要定制化软硬件支持,如TensorRT、TVM。

(3)知识蒸馏

实现方式:迁移学习的一种,用训练好的“教师”网络去指导另一个“学生”网络训练。

使用方式:大模型辅助小模型训练来帮助小模型提升。

(4)精度紧凑网络

实现方式:设计新的小模型结构,如MobileNet、ShuffleNet。

(5)低秩分解

实现方式:将原来大的权重矩阵分解成多个小的矩阵。

使用方式:现在模型多以1x1为主,低秩分解难以压缩,目前已不太适用。

上述几种模型压缩技术中,模型量化对推理部署软硬件的要求较高,知识蒸馏一般用来辅助提高精度,紧凑网络模型结构相对固定,低秩分解不适用目前主流模型结构。而模型裁剪可以对模型结构灵活压缩,满足用户对计算量/参数量的需求,且压缩后的模型仍可保持较高精度,本文将重点介绍模型裁剪方法。

3. 模型裁剪相关技术

如前所述,模型裁剪分为非结构化裁剪与结构化裁剪。非结构化裁剪是一种细粒度裁剪,通过裁剪掉某些不重要的神经元实现,优点是裁剪力度较大,可将模型压缩几十倍,缺点是裁剪后的模型部署需要定制化的软硬件支持,部署成本较高。而结构化裁剪是一种粗粒度裁剪,一般有channel、filter和shape级别的裁剪,这种方法裁剪力度虽然不像非结构化裁剪力度那么大,但好处是裁剪后的模型不受软硬件的限制,可以灵活部署,是近几年模型压缩领域研究者/公司的研究热点。本文我们重点研究结构化裁剪。

结构化模型裁剪近几年涌现很多优秀论文,压缩成绩不断被刷新,压缩技术从手动化结构裁剪进化到基于AutoML的自动化结构化裁剪。以下是几种代表性的方法:

(1)将训练好的模型进行通道剪枝(channel pruning)[2]。通过迭代两步操作进行:第一步是channel selection,采用LASSO regression来做;第二步是reconstruction,基于linear least squares来约束剪枝后输出的feature map尽可能和减枝前的输出feature map相等。

(2)麻省理工学院韩松团队提出了一种模型压缩方法[3],其核心思想是使用强化学习技术来实现自动化压缩模型。它不是对网络结构的路径搜索,而是采用强化学习中的DDPG(深度确定性策略梯度法)来产生连续空间上的具体压缩比率。

(3)基于元学习的自动化裁剪方法[4],分三步实现:首先生成元网络进行权重预测;然后基于元网络利用遗传进化算法进行裁剪模型结构搜索;最后筛选出符合要求的裁剪模型结构,对候选模型进行训练。

4. 对ResNet50模型的压缩优化

我们选择Resnet50进行模型压缩。从MLPerf竞赛开始至2022年,而Resnet50始终是图像分类任务的基准模型,是计算机视觉领域模型的典型代表。

在裁剪方法的选择上,我们采用基于AutoML的自动化裁剪方法。该方法的优势是可以灵活定义搜索空间,从而灵活裁剪出所需要的任何模型结构。Resnet50的裁剪要求可概括为“快且准”,实现方法分以下三步:

第一,与MetaPruning类似,首先生成一个“超网络”,为后续搜索出的裁剪模型生成权重及预测精度。

第二,优化搜索空间。自动化模型裁剪方法会基于特定方法对裁剪模型进行搜索,搜索方法与搜索效率直接影响到目标模型的质量,我们对模型裁剪的搜索空间与搜索方法进行了深度优化。这一步是搜索出符合预期的最优裁剪模型结构的关键,也是对Resnet50模型裁剪优化的关键技术点。

传统方法在裁剪时一般以模型的计算量/参数量为裁剪指标,比如需要将参数量/计算量裁剪掉多少,但是我们对裁剪的终极目标之一是在推理部署时降低延迟,也就是快且准中的“快”。而单纯降低模型参数量/计算量并不代表一定能带来模型性能提升,需要考虑裁剪后模型计算强度与平台计算强度的关系,参考roofline model理论。

图1 Roofline model示意图

图1为roofline model示意图,roofline model展示了模型在计算平台的限制下能达到多快的计算速度,使用计算强度进行定量分析。当模型计算强度小于平台计算强度(红色区域),模型处于内存受限状态,模型性能<计算平台理论性能,性能提升<计算量减少;当模型计算强度大于平台计算强度(绿色区域),模型处于计算受限状态,模型性能约等于计算平台理论性能,性能提升接近计算量减少。

同时我们研究发现,某些情况下,单纯减少channel不一定会带来模型性能提升甚至可能会降低模型性能,另外,裁剪后模型的推理性能因目标运行设备不同存在差异。也就是说单纯裁剪channel不一定会带来性能提升,甚至有可能会适得其反,裁剪后模型的实际性能与部署的目标设备相关,平台计算特性和模型结构特点紧密相关。 

基于以上研究,我们对裁剪模型的搜索空间做了重点优化,提出了基于性能感知的模型裁剪优化方法。在对裁剪模型结构进行搜索时,除了考虑裁剪后模型的规模如计算量/参数量(FLOPS/Params),同时考虑不同模型结构(channel/shape/layers)基于设备平台的真实性能表现,也就是裁剪模型在推理部署平台上的的推理延迟时间(latency)。具体做法如下:

(1)由于单纯的计算量/参数量并不能反映模型在计算平台上的真实性能,我们首先将不同的模型结构在计算平台进行性能测试,决定模型的哪些层的channel需要多裁,哪些层的channel需要少裁,裁掉哪些层对实际性能提升效果最好。我们对resnet50的模型结构特点进行了研究。图2为resnet50模型[5]结构图,该模型结构分为5个conv模块,conv1是一个7x7卷积,conv2-conv5都是由bottleneck组成,分别包含3/4/6/3个bottleneck。

图2 resnet50模型结构

以bottleneck为基本测试单位,模型推理测试平台选择tensorrt,对于每一个bottleneck,改变他们的输入输出channel个数,测试其在tensorrt上的推理性能表现,得到了每一个bottleneck在不同的输入输出channel下的实际性能表现。图3展示了实验中resnet50第三个stage的第6个bottleneck在不同的输出channel个数下,在tensorrt上测试的推理性能。

图3 resnet50conv3_bottleneck6基于tensorrt的推理延迟

由图3结果可以看出,该模型结构下测得的推理延迟时间并不会随着channel个数的增加而线性增长,推理时间与channel个数呈现出阶梯状关系(如当32<channel个数≤64时,推理性能持平)。该实验结果带来的启发是,在对模型进行裁剪时,我们选择保留阶梯线右侧边缘的channel个数,这样既能保证推理性能又能尽可能保证模型本身的channel个数。

(2)在对裁剪模型进行自动化搜索时,除了基于计算量/参数量参考指标,提出了以延迟为优化目标的自动化模型裁剪方法。将基于性能感知的约束条件添加到裁剪模型搜索空间,在对裁剪模型进行搜索时,可同时满足对计算量/参数量/延迟的多重要求,尽可能保证裁剪后的模型在推理部署阶段最大限度地降低延迟。在裁剪模型搜索阶段,我们的优化代码第一阶段首先会指定裁剪模型的计算量/参数量,通过计算量/参数量的设定去搜索符合条件的裁剪模型。在裁剪模型的搜索空间中,每一层channel个数的设定会参考(1)中的测试结果。第二阶段在搜索出的候选裁剪模型中,计算每个候选裁剪模型在目标推理平台上的推理耗时,筛选出推理耗时最小的模型为我们的目标裁剪模型,从而保证裁剪模型是在计算量/参数量/延迟三个层面搜索出的最优结果。

第三步,裁剪后模型精度恢复。对于模型裁剪,大家最关注的问题是裁剪后的模型是否能恢复到与裁剪前相近的精度,也就是快且准中的“准”。一般的模型裁剪方法是将模型裁剪之后进行finetune或者一边裁剪一边训练,而通过我们的实验发现通过裁剪算法得到的压缩模型,直接随机初始化训练(Training from scratch)得到的模型精度,反而比基于原模型权重finetune效果更好,Training from scratch可以更多去探索稀疏化模型的表达空间,所以我们对于裁剪后的模型采用Training from scratch的训练方式。同时,为了尽可能恢复裁剪后模型的精度,我们结合蒸馏训练,用大模型去指导裁剪后的小模型训练,在精度保持上取得了非常好的效果。

表1是我们裁剪并训练出的一些模型,将Resnet50计算量裁剪到原来的50%、37.5%时,仍然可以保持76%以上的TOP1精度:

表1 模型规模与对应精度

模型

Top-1

FLOPS

参数量

Raw-resnet50

76.4%

4G

255

Pruned-model1

76.3%

2G

167

Pruned-model2

76.1%

1.5G

165

基于浪潮NF5488A5平台,未经过压缩优化的Resnet50推理性能如表2:

表2 压缩前的Resnet50基于NF5488A5的性能

模型

平台

性能

Top1精度

ResNet50

浪潮NF5488A5(1*A100)

37694.5 images/s

76.1%

ResNet50

浪潮NF5488A5(8*A100)

303264 images/s

76.1%

而经过压缩优化后,Resnet50在开放赛道的性能如表3:

表3 压缩后的Resnet50基于NF5488A5的性能

模型

平台

性能

Top1精度

ResNet50

浪潮NF5488A5(1*A100)

68994 images/s

75.856%

ResNet50

浪潮NF5488A5(8*A100)

549782 images/s

75.856%

综上,在MLPerf推理V0.7竞赛开放赛道中,基于压缩优化算法,我们将ResNet50计算量压缩到原来的37.5%,压缩优化后的ResNet50模型单GPU推理速度相比压缩优化前提升83%,8GPU推理速度相比压缩优化前提升81%。基于浪潮NF5488A5服务器,单卡每秒可处理68994张图片,8卡每秒可以处理549782张图片,这个成绩在当时参赛结果中排名第一。

参考文献:

[1] Denil, M. , et al. "Predicting Parameters in Deep Learning." University of British Columbia (2013).

[2] He, Y. ,  X. Zhang , and  J. Sun . "Channel Pruning for Accelerating Very Deep Neural Networks." (2017).

[3] He, Y. , et al. "AMC: AutoML for Model Compression and Acceleration on Mobile Devices." (2018).

[4] Liu, Z. , et al. "MetaPruning: Meta Learning for Automatic Neural Network Channel Pruning." (2019).

[5] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

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

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

相关文章

Serverless 应用优化四则秘诀

简介:Serverless 架构下,虽然我们更多精力是关注我们的业务代码,但是实际上对于一些配置和成本也是需要进行关注的,并且在必要的时候,还需要根据配置与成本进行对我们的 Serverless 应用进行配置优化和代码优化。 Ser…

懵了,构建一个 Docker 镜像花 60 分钟?如何提高效率?

作者 | Andy来源 | 进击云原生最近,有一个需求:向镜像构建管道添加一个参数,以允许用户在构建时配置超时时间。我们计划在构建时配置 10 分钟的默认超时,并且允许用户覆盖此配置,因为他们的某些镜像构建需要长达 60 分…

java实现短信上行源码_Java 发送短信验证码 示例源码

【实例简介】执行前请先设置修改 src/test.java 文件//用户名private static String Uid "uid";//接口安全秘钥(不是登录密码)private static String Key "key";//手机号码,多个号码如13800000000,13800000001,13800000002private static Str…

Android项目架构设计深入浅出

简介:本文结合个人在架构设计上的思考和理解,介绍如何从0到1设计一个大型Android项目架构。 作者 | 璞珂 来源 | 阿里技术公众号 前言:本文结合个人在架构设计上的思考和理解,介绍如何从0到1设计一个大型Android项目架构。 一 引…

技术实践第四期|解读移动开发者日常-性能监控平台应用

简介:应用性能监控平台是用来帮助客户提升应用性能质量和稳定性的重要环节,本人作为一名移动端开发者有着丰富的使用和运维经验,希望通过本文分享过往的心得和使用经验,让我参与开发的U-APM这款产品中,作为借鉴可以在中…

彻底理解操作系统:CPU与实模式

作者 | 陆小风来源 | 码农的荒岛求生‍对于人类来说,我们不喜欢拐弯抹角,喜欢更直接的东西,“有话直说”、“没有中间商赚差价”、“简洁的设计”等等,然而对于计算机,尤其是对内存管理来说则恰恰相反,在这…

边缘计算的 4 种类型都有哪些?

作者 | Addo Zhang来源 | 云原生指北本篇文章译自 SUNKU RANGANATH 的 4 Types of Edge Computing - Broadly Categorized。文章通过 往返终端设备和数据中心的延迟 来对边缘计算的类型进行大致的分类,通俗易懂,方便大家对边缘计算有个大概的了解。边缘计…

OpenKruise v1.0:云原生应用自动化达到新的高峰

简介:OpenKruise 是针对 Kubernetes 的增强能力套件,聚焦于云原生应用的部署、升级、运维、稳定性防护等领域。 云原生应用自动化管理套件、CNCF Sandbox 项目 -- OpenKruise,近期发布了 v1.0 大版本。 OpenKruise[1] 是针对 Kubernetes 的…

Serverless Kubernetes 落地实践

简介:如何通过原生 Kubernetes 提供 Serverless 能力?如何借力丰富的云原生社区生态?本文将给大家介绍一下我们在 Serverless Kubernetes 上的落地实践。 作者:元毅 导读 Kubernetes 作为当今云原生业界标准,具备良…

如何在零停机的情况下迁移 Kubernetes 集群

简介:本文将通过集群迁移的需求、场景以及实践方式,介绍如何基于阿里云容器服务 ACK,在零停机的情况下迁移 Kubernetes 集群。 作者:顾静(子白)|阿里云高级研发工程师;谢瑶瑶&#…

轻松理解 Docker 网络虚拟化基础之 veth 设备!

作者 | 张彦飞allen来源 | 开发内功修炼最近我又对网络虚拟化技术产生了浓厚的兴趣,迫切想搞明白在 Docker 等虚拟技术下,网络底层是如何运行的。不得不说,网络虚拟化技术是我给自己抛的又一个大坑。虽然我自认为把原生 Linux 网络实现过程理…

如何做好数字化体验管理,了解一下?

简介:本文主要分为三部分,第一部分是数字化体验的必要性,从数字化体验管理对业务的影响和数字化体验管理对企业的价值两个方面来介绍其必要性;第二部分,ARMS 在数字化体验管理上的产品能力介绍;第三部分&am…

深信服智能边缘计算平台与 OpenYurt 落地方案探索与实践

简介:本文将介绍边缘计算落地的机遇与挑战,以及边缘容器开源项目 OpenYurt 在企业生产环境下的实践方案。 作者:赵震,深信服云计算开发工程师,OpenYurt 社区 Member 编者案:在 5G、物联网等新技术的持续推…

云原生的本手、妙手和俗手

作者 | 步尔斯特来源 | 步尔斯特刚刚看到一个话题:Java大军,真的开始把目光从Spring Cloud转向云原生系的k8s Istio了么?乍一看,有一丝不解,Java大军?Spring Cloud?Kubernetes?Serv…

云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇

简介:生产环境的突袭演练是我们迈出的艰难但有力的一步,锻炼了研发运维人员的应急响应能力,在真实用户场景下锤炼系统,推进了产品的轮班制度,提升了云原生底座的稳定性和竞争力。 作者:智妍(郑…

Spring Boot Serverless 实战系列“部署篇” | Mall 应用

简介:本篇中为各位讲述如何将 Mall 应用部署到函数计算平台上。为了让分析更有代表性,我选择了 Github 上 star 数超过 50k 的电商应用 mall 作为示例。 作者:西流 导读:Spring Boot 是基于 Java Spring 框架的套件,它…

押宝云原生,Ampere Computing打响服务器芯片变革关键一枪

“闯龙潭,越虎穴”这句话用来形容在服务器领域披荆斩棘的Arm架构服务器器芯片似乎最为合适不过。所谓“龙潭”“虎穴”指的便是雄霸服务器芯片市场数载的intel与AMD,而他们所属的x86架构,更是数据中心芯片领域的绝对主流。然而云原生时代的到…

阿里云实时数仓Hologres年度发布,解读数仓新趋势

简介:阿里云实时数仓Hologres年度发布,解读数仓新趋势。 1月7日,阿里云实时数仓Hologres发布最新版本,在成本、可用性、在线高可用等多方面进行了能力升级,行存吞吐提升100%,列存吞吐提升30%,支…

服务发现与配置管理高可用实践

简介:本篇是微服务高可用最佳实践系列分享的开篇,系列内容持续更新中,期待大家的关注。 作者:三辰|阿里云云原生微服务基础架构团队技术专家,负责 MSE 引擎高可用架构 本篇是微服务高可用最佳实践系列分享…

联想首次详解混合云Lenovo xCloud五大优势,如何打造智能化数字底座

多年积累之后,联想混合云品牌Lenovo xCloud主打云原生、智能运维、私有云、多云管理4大产品家族,9款通用解决方案,覆盖客户“建云、上云、用云和管云”的全部场景 6月10日,联想举办“弹性韧性悟性——多云混合时代Lenovo xCloud提…