【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

模型端侧加速哪家强?一文揭秘百度 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.

 

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

JVM性能优化(四)提高网站访问性能之Tomcat优化,java程序开发实用教程邱加永答案

Java 程序员 后端

JVM总体概述,java高级编程内容

Java 程序员 后端

JVM探究:全面解析OOM异常,都在这了,mysql数据库基础与实例教程孔祥盛

Java 程序员 后端

Kafka的生产者原理及重要参数说明,Java码农是如何进入腾讯的

Java 程序员 后端

kubernetes下的jenkins如何设置maven,java异步请求原理

Java 程序员 后端

Kafka 的 replica 同步机制(ISR与OSR列表数据相互转换)

Java 程序员 后端

kubebuilder实战之三:基础知识速览,Java学习的三个终极问题及学习路线规划

Java 程序员 后端

KubeVela + KEDA:为应用带来,kafka入门

Java 程序员 后端

Linux内核结构组成之进程调度,java开发直播系统相关教程

Java 程序员 后端

JVM类加载你真的【了解】了吗(1),网易的朋友给我这份339页的Java面经

Java 程序员 后端

kotlin 如何解决 java 开发痛点,让程序员 happier,java中级程序员面试

Java 程序员 后端

kubebuilder实战之八:知识点小记,java面试具体场景的解决方案

Java 程序员 后端

Linux系统:第十章:服务器环境搭建,附Java面经

Java 程序员 后端

Kafka-探险---生产者源码分析---核心组件,Java数据库题目大全

Java 程序员 后端

kafka扫盲——别等面试官一问三不知了,linux操作系统教程

Java 程序员 后端

Kubernetes 常用命令大全,linux入门经典书籍

Java 程序员 后端

Kubernetes教程之新手安装必看(快速浏览少走弯路),java集合详解和集合面试题目

Java 程序员 后端

linux安装oracle XE,详解Java架构进阶面试题

Java 程序员 后端

JVM类加载你真的【了解】了吗,java项目面试题

Java 程序员 后端

Linux系统:第十一章:常用命令,华为java面试面经

Java 程序员 后端

Log4j使用指南,java入门视频教程

Java 程序员 后端

jvm运行时内存是怎么分布的?,java多线程编程技术第二版下载

Java 程序员 后端

Kubernetes官方java客户端之八:fluent style,mysql入门视频教程

Java 程序员 后端

Linux云服务器搭建SFTP服务器图片服务器,java线程原理

Java 程序员 后端

JVM性能优化(三)G1垃圾收集器,附大厂真题面经

Java 程序员 后端

JVM的YGC,这次被它搞惨了!,rabbitmq实战指南pdf最新版

Java 程序员 后端

JWT单点登录,小甲鱼数据结构百度云

Java 程序员 后端

Kubernetes官方java客户端之七:patch操作,深入浅出Java

Java 程序员 后端

Linux上安装Mycat和配置连接MySQL 8,三年经验月薪50k我是怎么做到的

Java 程序员 后端

krpano全景之内置函数---asyncloop roundval 等(不定期更新)

Java 程序员 后端

Kubernetes 稳定性保障手册 -- 可观测性专题,今晚我们通宵学习SpringCloud

Java 程序员 后端

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