0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

模型压缩算法的设计思路、实现方式及效果

浪潮AIHPC 来源:浪潮AIHPC 作者:浪潮AIHPC 2022-11-03 15:29 次阅读

MLPerf竞赛由图灵奖得主大卫·帕特森(David Patterson)联合谷歌、斯坦福、哈佛大学等单位共同成立,是国际上最有影响力的人工智能基准测试之一。

在MLPerf V0.7推理竞赛开放赛道中,浪潮信息通过模型压缩优化算法取得性能大幅提升,将ResNet50的计算量压缩至原模型的37.5%,压缩优化后的ResNet50推理速度相比优化前单GPU提升83%,8GPU提升81%,基于浪潮NF5488A5服务器,每秒最多可以处理549782张图片,排名世界第一。

本文将重点介绍浪潮在比赛中使用的模型压缩算法的设计思路、实现方式及效果。

什么是模型压缩

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

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

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

常用模型压缩方法

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

▣模型裁剪

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

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

▣模型量化

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

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

▣知识蒸馏

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

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

▣精度紧凑网络

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

▣低秩分解

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

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

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

模型裁剪相关技术

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

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

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

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

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

对ResNet50模型的压缩优化

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

在裁剪方法的选择上,我们采用基于AutoML的自动化裁剪方法。该方法的优势是可以灵活定义搜索空间,从而灵活裁剪出所需要的任何模型结构。

Resnet50的裁剪要求可概括为“快且准”,实现方法分以下三步:

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

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

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

fad3a562-5aa3-11ed-a3b6-dac502259ad0.jpg

图1 Roofline model示意图▲

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

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

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

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

fae6801a-5aa3-11ed-a3b6-dac502259ad0.jpg

图2 resnet50模型结构▲

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

fb01bad8-5aa3-11ed-a3b6-dac502259ad0.png

图3 resnet50conv3_bottleneck6基于tensorrt的推理延迟▲

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

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

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

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

fb2b3fe8-5aa3-11ed-a3b6-dac502259ad0.jpg

表1模型规模与对应精度▲

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

fb353ade-5aa3-11ed-a3b6-dac502259ad0.jpg

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

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

fb471452-5aa3-11ed-a3b6-dac502259ad0.jpg

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19013

    浏览量

    303074
  • 服务器
    +关注

    关注

    12

    文章

    9015

    浏览量

    85169

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

文章出处:【微信号:浪潮AIHPC,微信公众号:浪潮AIHPC】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    常见人体姿态评估显示方式的两种方式

    ,基于Deeplabv3+ 与ResNet34构建的一个人体语义分割模型。 火柴人 主要是基于关键点的人体姿态评估显示方式,基于YOLOv8等人体姿态评估的关键点模型均可以实现,演示代
    的头像 发表于 11-11 11:21 139次阅读
    常见人体姿态评估显示<b class='flag-5'>方式</b>的两种<b class='flag-5'>方式</b>

    【BearPi-Pico H3863星闪开发板体验连载】LZO压缩算法移植

    算法能够在BearPi-Pico H3863正常实现,但是压缩算法还存在一定的问题,需要在研究。 解压算法不需要额外的RAM空间就能正常的运
    发表于 11-10 21:45

    PolarDB-MySQL引擎层的索引前缀压缩能力的技术实现效果

    在 PolarDB 中, 通过轻量级压缩实现, 可以实现减少数据大小的同时, 性能有一定程度的提升. 如何实现的呢? 背景 近几年互联网行业的降本增效浪潮愈演愈烈, 如数据
    的头像 发表于 11-09 09:34 115次阅读
    PolarDB-MySQL引擎层的索引前缀<b class='flag-5'>压缩</b>能力的技术<b class='flag-5'>实现</b>和<b class='flag-5'>效果</b>

    如何评估AI大模型效果

    评估AI大模型效果是一个复杂且多维度的过程,涉及多个方面的考量。以下是一些关键的评估方法和步骤: 一、基准测试(Benchmarking) 使用标准数据集和任务来评估模型的性能,如GLUE
    的头像 发表于 10-23 15:21 369次阅读

    压缩算法的类型和应用

    压缩算法是一种通过减少数据量来节省存储空间或传输数据的技术。压缩算法可以分为两种类型:有损压缩和无损压缩
    的头像 发表于 10-21 13:50 182次阅读

    Huffman压缩算法概述和详细流程

    Huffman压缩算法是一种基于字符出现频率的编码算法,通过构建Huffman树,将出现频率高的字符用短编码表示,出现频率低的字符用长编码表示,从而实现对数据的
    的头像 发表于 10-21 13:48 173次阅读

    使用qboot时选择了压缩率更高的zip算法,但是发现编译报错,为什么?

    在使用qboot时选择了压缩率更高的zip算法,但是发现编译报错,如下图:
    发表于 09-26 07:22

    FP8模型训练中Debug优化思路

    目前,市场上许多公司都积极开展基于 FP8 的大模型训练,以提高计算效率和性能。在此,我们整理并总结了客户及 NVIDIA 技术团队在 FP8 模型训练过程中的 debug 思路和方法,供大家参考。
    的头像 发表于 09-06 14:36 258次阅读
    FP8<b class='flag-5'>模型</b>训练中Debug优化<b class='flag-5'>思路</b>

    ai大模型算法有什么区别

    AI大模型算法是人工智能领域的两个重要概念,它们在很多方面有着密切的联系,但同时也存在一些明显的区别。 定义和概念 AI大模型通常是指具有大量参数和复杂结构的人工智能模型,它们能够处
    的头像 发表于 07-16 10:09 1511次阅读

    【RTC程序设计:实时音视频权威指南】音视频的编解码压缩技术

    。现在比较常用的,压缩文件为zip文件其使用的算法结合了lZ77和霍夫曼编码的优点,同时实现了重复数据的压缩和字符出现频率的编码,在压缩率和
    发表于 04-28 21:04

    FPGA压缩算法有哪些

    在图像压缩算法中可以采用哈夫曼编码的方式对编码冗余的信息进行压缩,可以采用预测的方式来减少像素间冗余,可以采用量化的
    的头像 发表于 04-15 11:48 570次阅读
    FPGA<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>有哪些

    基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法

    实现基于门控线性网络(GLN)的高压缩比无损医学图像压缩算法,以提高医学图像存储和分发系统的效率。与“传统”的基于上下文的数据压缩
    的头像 发表于 04-08 10:29 611次阅读
    基于门控线性网络(GLN)的高<b class='flag-5'>压缩</b>比无损医学图像<b class='flag-5'>压缩</b><b class='flag-5'>算法</b>

    cubemx ai导入onnx模型压缩失败了怎么解决?

    cubemx ai导入onnx模型压缩失败。请问我怎么解决
    发表于 03-19 07:58

    详解从均值滤波到非局部均值滤波算法的原理及实现方式

    图像降噪处理主要分为2D(空域)与3D降噪(时域/多帧),而2D降噪由于相关的实现 算法 丰富,效果各异,初学入门有着丰富的研究价值。理解2D降噪算法的流程,也对其他的增强
    的头像 发表于 12-19 16:30 1113次阅读
    详解从均值滤波到非局部均值滤波<b class='flag-5'>算法</b>的原理及<b class='flag-5'>实现</b><b class='flag-5'>方式</b>

    AI模型常见压缩及减量方式

    这辈子都难以看到实现的一天,但把超巨大的 AI 模型缩小但仍保持推论精度不变,还是有很多方法可以达到的。接下来我们就来帮大家简单介绍一下几种常见技术。
    的头像 发表于 12-16 15:19 897次阅读
    AI<b class='flag-5'>模型</b>常见<b class='flag-5'>压缩</b>及减量<b class='flag-5'>方式</b>