产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

模型端侧加速哪家强?一文揭秘百度 EasyEdge 平台技术内核

  • 2021-07-15
  • 本文字数:4811 字

    阅读完需:约 16 分钟

模型端侧加速哪家强?一文揭秘百度EasyEdge平台技术内核

近年来,深度学习技术在诸多领域大放异彩,因此广受学术界和工业界的青睐。随着深度学习的发展,神经网络结构变得越来越复杂。复杂的模型固然具有更好的性能,但是高额的存储空间与计算资源消耗使其难以有效地应用在各硬件平台上。因此深度学习模型在端上部署和加速成为了学术界和工业界都重点关注的研究领域。

 

一方面,有许多深度学习框架可以让开发者和研究者用于设计模型,每个框架具备各自独特的网络结构定义和模型保存格式。AI 工程师和研究者希望自己的模型能够在不同的框架之间转换,但框架之间的差距阻碍了模型之间的交互操作。另一方面,由于深度学习模型庞大的参数量,直接在边缘端部署模型会产生较高的时延。

 

百度 EasyEdge 端与边缘 AI 服务平台可以很好地解决上述问题。EasyEdge 可以支持多种主流深度学习框架的模型输入,提供了方便的部署功能,针对业内各类主流芯片与操作系统进行了适配,省去了繁杂的代码过程,可以轻松将模型部署到端设备上。EasyEdge 在集成了多种加速技术的同时对外提供多个等级的加速服务,以平衡模型推理时间和精度,一方面可以最大限度的减小模型在端上部署的延时,另一方面可以匹配更广泛的使用场景。

 

EasyEdge 支持多种不同类型深度学习模型的部署,包括常见的模型类型包括图像分类、检测、分割以及部分人脸检测、姿态估计。目前 EasyEdge 支持的经典网络种类超过 60 种以及多种自定义的网络类型。

 

同时 EasyEdge 支持接入多种深度学习框架,包括飞桨 PaddlePaddle、Pytorch、Tensorflow、MxNet 等。为了更方便的实现部署,目前 EasyEdge 支持部分深度学习框架模型的互转换,如图 1 所示。例如用户想要在 Intel 的 CPU 上使用 OpenVINO 部署一个 Pytorch 模型,EasyEdge 可以实现经过多次模型转换,将 torch 模型格式转换成 OpenVINO IR 格式,最后基于 OpenVINO 部署框架完成模型部署。



图 1 EasyEdge 支持多种模型框架转换

 

EasyEdge 对于端设备的支持也是很广泛的,既支持常见的通用芯片 CPU、GPU 以及通用 arm 设备,也支持市面上主流的专用芯片,如 Intel Movidius 系列,海思 NNIE 等,如图 2 所示,EasyEdge 目前已建设为业界适配最广泛的端与边缘服务平台。

 


图 2 EasyEdge 支持多种硬件设备部署

 

解析 EasyEdge 中的模型压缩技术

 

为了能实现多种网络在不同芯片的高效部署,EasyEdge 后台提供了多种优化操作,如模型格式转换、图优化、芯片优化、模型低精度计算优化、模型裁剪和蒸馏等。其中模型压缩技术是至关重要的一环,EasyEdge 中用到的模型压缩技术包括常见的模型低精度计算结构化裁剪以及模型蒸馏等。如图 3 所示,为了更好的适配端设备,EasyEdge 集成了多种模型压缩库,可根据实际部署情况灵活调用。

 


图 3 EasyEdge 中的模型压缩技术

 

模型低精度计算旨在通过少量的比特去表示原本 32bit 的浮点数据。一方面是为了压缩模型体积大小,对于较大的模型可以使端侧设备更快地将模型 load 到内存中,减小 IO 时延,另一方面,通常处理器对于定点的计算能力会强于浮点,因此量化后的模型往往可以被更快的推理计算。如图 4 所示,分布不规则的浮点数据被量化到少数几个定点。EasyEdge 支持包括常见低精度类型包括 FP16 和 INT8,其中 INT8 量化技术能提供最大限度的无损压缩。

 


图 4 模型量化[1]

 

INT8 量化技术的实现方法大致分为两种,训练后量化和训练中量化顾名思义训练后量化就是在已经训练好的 FP32 模型中插入量化节点,通过统计学方法尽可能通过少量定点数去还原原来的浮点数据,而训练中量化会在训练之前就插入模拟量化节点,在训练过程中就模拟量化后的数据去计算各个节点的 output,这样模型最终会拟合收敛到模型量化后最优。如图 5 所示。相比之下训练中量化具有更好的精度,但是需要耗费更长的时间。

 


图 5 训练量化原理[2]

 

EasyEdge 同时具备训练中量化和离线训练量化的能力,并且会根据不同的实际情况选择不一样的量化方法。深度学习模型中,分类模型最终一般会以计算最终 Layer 的 topK 最为最终的输出结果,这种性质就决定了模型更注重最终输出的排序关系而非数值本身的大小,因此分类模型相比于基于数值回归的检测模型具有更强的量化鲁棒性。


基于这一点,EasyEdge 的量化策略会根据模型类型灵活调整,在分类相关任务中会倾向于使用离线量化技术,以缩短发布时长,而基于 anchor 回归的一系列检测模型中则更倾向于通过再训练来保证精度。另一方面,根据端侧设备、部署框架不同,EasyEdge 采取的量化策略也会有所区别。


例如在使用 PaddleFluid 框架将模型部署到 CPU 上时,较敏感的 OP 在量化之后会极大的影响最终精度,因此在 EasyEdge 中这些 OP 的输入输出数据类型采用 FP32,而其余 OP 的计算会采用 INT8。这种 Layer 级别的混合精度量化策略可以很好的平衡推理速度和精度。

 

在离线量化过程中,会出现部分 outlier 数据点距离中心分布太远的情况,这会导致传统的量化策略会过大的预估量化 range,而导致最终量化精度较低,如图 13 所示。为了应对这种情况,EasyEdge 集成了后校准技术,通过多次迭代以寻找更合适的阈值,使量化后 INT8 数据分布和量化前 FP32 数据分布具有最小的 KL 散度,以此来降低量化误差。

 

模型裁剪通常指的是结构化裁剪。结构化裁剪是通道级别的裁剪,如图 6 所示,旨在删除多余的计算通道。



 图 6 模型结构化裁剪[3]

 

对于某一个卷积核的裁剪,如图 7 所示,在中间的 kernel 同时裁剪掉 input 和 output 的一个通道时,其输入输出 tensor 对应的通道将减小,这带来两方面好处,一方面是在减小卷积核大小之后,模型体积得以减小,减少了推理过程中的 IO 时间,另一方面 tensor 本身体积被压缩,因此相比压缩之前只需要更少的内存开销。

 

EasyEdge 目前采取的就是这种通道裁剪技术。同时在裁剪通道的选择上,封装了基于 L1-norm、L2-norm 和 FPGM[8]等多种方法,并且会根据实际情况灵活选择。另一方面,裁剪后的模型由于更改了部分 Layer 的 shape,因此可能会影响到网络拓扑结构的合理性,EasyEdge 平台集成了通道调整方法,实现通过广度优先查找算法,逐个矫正通道数,并且对于部分特殊难以调整的 block 会配置跳过,保证裁剪算法的合理性。



 图 7 针对一个卷积核的结构化裁剪[4]

 

对于部分模型的裁剪,EasyEdge 采用通道敏感度分析技术,通过在每个 Layer 上多次裁剪推理计算最终精度损失来分析各个 Layer 对于通道裁剪的敏感度。另一方面,EasyEdge 还集成了 Layer 级别的配置裁剪策略,通过阈值过滤的方法,在相同压缩率目标下,尽可能多的保留更敏感的层,以达到最小的精度影响。举个例子,如图 8 所示,一个 ResNet50 网络中,通过敏感度分析得出结论,起始层和终止层对裁剪更敏感,因此实施更低的裁剪率,而中间层具有更多的冗余,因此采用更高的裁剪率。

 

不仅如此,EasyEdge 在上层融合了一些简单的超参搜索的技术,一方面需要尽可能保留敏感 Layer 的参数信息,另一方面需要找出最匹配设定压缩率的模型。例如一个 120M 大小的模型,在配置裁剪率为 50%的时候,可以精确裁剪到 60M 左右,这种技术使 EasyEdge 平台在模型压缩层面可以提供更差异化的服务。



图 8 基于敏感度的裁剪,精准的裁剪率控制[5]

 

对于部分模型的加速,EasyEdge 使用了基于 Hinton[9]的蒸馏技术。模型蒸馏的目的是利用大模型学习到的知识去调教更小的模型,目的是为了让小模型的精度能够逼近大模型的精度。如图 9 所示,一般蒸馏的方法是在同一个 session 中,将大模型的某些层输出和小模型的部分输出以一定的形式关联,这样在训练小模型的过程中,大模型所学到的知识会作用于小模型的梯度反向传播,促进小模型的收敛。



 图 9 知识蒸馏功能[6]

 

本次新上功能,主要功能基于模型压缩框架 PaddleSlim 开发,EasyEdge 平台基于其中的压缩功能做了进一步的封装和优化。想了解更多相关信息可以登录 github 搜索 PaddleSlim。

 

(在 CPU GPU ARM 上的加速效果展示,最后总结下模型压缩效)我们分别在三种最常用的端设备,即 CPU、GPU 和 ARM 上发布了超高精度检测模型,具体设备型号如下:

CPU: Intel® Xeon® Processor E5-2630 v4

GPU: NVIDIA Tesla V100

ARM: Firefly-RK3399


如图 10 所示,其中直方图中 acc1-acc3 分别代表不同加速等级,加速等级越高模型被裁剪的通道数越多,纵坐标是网络对单张图片的推理延时。可以观察到 EasyEdge 的模型压缩能力在三种端上速度收益都很明显,直观上看通用 CPU 上加速效果最好,可以达到超过一倍的速度提升,这也跟 EasyEdge 平台在不同端设备上采取的加速方法相关,当多种加速技术同时使用时会取得较大的提升。其中 GPU 本身拥有更强的算力,因此减小 FLOPS 对于 GPU 的加速效果而言略弱于 CPU 和通用 ARM。



图 10 不同端设备上的加速情况

 

那么接下来对比一下同一个硬件设备上,不同类型的模型的加速效果。我们实验了几种不同精度的模型在 Jetson (jetson4.4-xavier)上的推理效果,包括 MobileNetv1-SSD、MobileNetv1-YOLOv3 和 YOLOv3。如图 11 所示,acc1-acc3 的含义同上,总体来说,新上的模型压缩功能在牺牲少量精度的情况下最多可以获得 40%左右的速度收益,效果明显。另一方面,高性能模型的加速效果相比之下会略差一点,因为高性能模型本身具备一定的加速特质,例如更小的模型体积和更少的 FLOPS,因此再提升的空间相比之下更小。



图 11 不同的检测模型在 Jetson 上的推理延时

 

实际使用过程中具体的速度提升会根据端侧设备和模型类型的不同而有所区别,EasyEdge 平台的模型压缩能力在后续迭代中也会持续优化和更新。

 

现在可以体验一下新功能,在发布模型的时候可以根据自身需求选择合适的加速方案,如图 12 所示。



图 12 EasyEdge 提供多种加速方案

 

发布模型后可以在评测页面观看 sdk 在端上的推理效果,如图 13 所示,最快的加速方案伴随着较少的精度损失,可将模型速度提升 30%。



图 13 EasyEdge 提供模型评测功能

 

EasyEdge 的能力也全面集成于飞桨企业版 EasyDL 和 BML 中,使用这两大平台,可以一站式完成数据处理、模型训练、服务部署全流程,实现 AI 模型的高效开发和部署。据悉,近期,飞桨企业版开展了2021万有引力计划,为企业提供 AI 基金,可用于购买飞桨企业版 EasyDL 和 BML 公有云的线上服务,最高可兑换,6000+ 小时的自定义模型训练时长;590+ 小时的脚本调参;公有云部署 400+ 小时配额;或兑换 50 个设备端的 SDK。

 

注释:


[1] Fang J, Shafiee A, Abdel-Aziz H, et al. Near-lossless post-training quantization of deep neural networks via a piecewise linear approximation[J]. arXiv preprint arXiv:2002.00104, 2020.

[2] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2704-2713.

[3] Han S, Pool J, Tran J, et al. Learning both weights and connections for efficient neural networks[J]. arXiv preprint arXiv:1506.02626, 2015.

[4] Li H, Kadav A, Durdanovic I, et al. Pruning filters for efficient convnets[J]. arXiv preprint arXiv:1608.08710, 2016.

[5] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

[6] Gou J, Yu B, Maybank S J, et al. Knowledge distillation: A survey[J]. International Journal of Computer Vision, 2021, 129(6): 1789-1819.

[7] Wu H, Judd P, Zhang X, et al. Integer quantization for deep learning inference: Principles and empirical evaluation[J]. arXiv preprint arXiv:2004.09602, 2020.

[8] He Y, Liu P, Wang Z, et al. Filter pruning via geometric median for deep convolutional neural networks acceleration[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 4340-4349.

[9] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015.

 

2021-07-15 13:002088
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 533.9 次阅读, 收获喜欢 1976 次。

关注

评论

发布
暂无评论
发现更多内容

react源码解析6.legacy模式和concurrent模式

buchila11

React

建木持续集成平台v2.2.2发布

Jianmu

DevOps CI/CD 自动化运维

重磅消息·OpenMLDB官方网站 今日正式上线!

第四范式开发者社区

人工智能 机器学习 开源项目 AI Studio 特征平台

我做基础架构学到的42件事

多颗糖

数据库 架构 架构师 基础架构

霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理

刘悦的技术博客

sql 优化 SQL优化 MySQL优化 :MySQL 数据库

手写简易版 React 来彻底搞懂 fiber 架构

CRMEB

mycat 中间件安装与使用

编程江湖

11个基于HTML/CSS/JS的情人节表白可爱小游戏、小动画

海拥(haiyong.site)

大前端 情人节 表白 2月月更

取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!

沉默王二

java培训:MyBatis高级进阶学习分享

@零度

mybatis JAVA开发

Java最简单可靠的线上不停机发布方案

游牧

Redis 在 vivo 推送平台的应用与优化实践

vivo互联网技术

服务器 消息推送 redis'

大数据存储领导厂商创新科加入,携手龙蜥社区共建开源生态

OpenAnolis小助手

大数据 Linux 开源 云存储

第十一节:Springboot整合log4j2日志

入门小站

spring-boot

朋友圈系统架构设计

Geek_8d5fe5

架构实战营

在低代码开发时代,还需要IT部门吗?

TOBESOFT特碧软件

低代码 数字化 TOBESOFT

TDengine在TCL空调能源管理平台的实践

TDengine

数据库 大数据 tdengine 物联网

用户登录功能:说简单也困难

华为云开发者联盟

安全 cpu 加密算法 TPS 用户登录

在线YAML转HTML工具

入门小站

工具

Mac 鼠标手势软件 -- MacStroke

TroyLiu

效率工具 推荐 Mac 鼠标手势 Mac 软件

Kotlin语法手册(二)

寻找生命中的美好

android kotlin 安卓

警惕!Python 中少为人知的 10 个安全陷阱!

Python猫

Python

HiveSQL高级进阶10大技巧

编程江湖

Go学习笔记——常量

为自己带盐

Go 学习笔记 2月月更

前端培训:React调度算法迭代过程

@零度

前端开发 React

分布式事务管理DTM:“买买买”背后的小帮手

华为云开发者联盟

微服务 电商 分布式事务管理 DTM 云图说

jQuery常用方法归纳总结

编程江湖

Linux系统编程-进程概念、进程管理、信号处理

DS小龙哥

2月月更

Spring Cloud Alibaba Nacos路由策略之保护阈值!

王磊

spring cloud alibaba

手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理

华为云开发者联盟

Java 线程 线程池 ThreadPoolExecutor

大数据培训:Flink调度器性能的提高

@零度

flink 大数据开发

模型端侧加速哪家强?一文揭秘百度EasyEdge平台技术内核_AI&大模型_百度飞桨团队_InfoQ精选文章