互联网资讯 / 人工智能 · 2024年1月4日 0

深度学习模型的部署方法揭秘

当我们辛苦收集数据、数据清洗、搭建环境、训练模型、模型评估测试后,终于可以应用到具体场景,但是,突然发现不知道怎么调用自己的模型,更不清楚怎么去部署模型!

这也是今天“计算机视觉研究院&Rdquo;要和大家分享的内容,部署模型需要考虑哪些问题,考虑哪些步骤及现在常用的部署方法!

1 背景

将深度学习模型部署到生产环境面临两大挑战:

我们需要支持多种不同的框架和模型,这导致开发复杂性,还存在工作流问题。数据科学家开发基于新算法和新数据的新模型,我们需要不断更新生产环境如果我们使用英伟达GPU提供出众的推理性能。首先,GPU是强大的计算资源,每GPU运行一个模型可能效率低下。在单个GPU上运行多个模型不会自动并发运行这些模型以尽量提高GPU利用率

能从数据中学习,识别模式并在极少需要人为干预的情况下做出决策的系统令人兴奋。深度学习是一种使用神经网络的机器学习,正迅速成为解决对象分类到推荐系统等许多不同计算问题的有效工具。然而,将经过训练的神经网络部署到应用程序和服务中可能会给基础设施经理带来挑战。多个框架、未充分利用的基础设施和缺乏标准实施,这些挑战甚至可能导致AI项目失败。今天就探讨了如何应对这些挑战,并在数据中心或云端将深度学习模型部署到生产环境。

一般来说,我们应用开发人员与数据科学家和IT部门合作,将AI模型部署到生产环境。数据科学家使用特定的框架来训练面向众多使用场景的机器/深度学习模型。我们将经过训练的模型整合到为解决业务问题而开发的应用程序中。然后,IT运营团队在数据中心或云端运行和管理已部署的应用程序。

2 部署需求

以下需求讲解转自于《知乎-田子宸》

需求一:简单的DEMO演示,只看看效果

caFFe、tf、pyTorch等框架随便选一个,切到test模式,拿Python跑一跑就好,顺手写个简单的GUI展示结果;高级一点,可以用CPython包一层接口,然后用C++工程去调用

需求二:要放到服务器上去跑,不要求吞吐和时延

caFFe、tf、pyTorch等框架随便选一个,按照官方的部署教程,老老实实用C++部署,例如pyTorch模型用工具导到libTorch下跑。这种还是没有脱离框架,有很多为训练方便保留的特性没有去除,性能并不是最优的。另外,这些框架要么CPU,要么NVIDIA GPU,对硬件平台有要求,不灵活;还有,框架是真心大,占内存(tf还占显存),占磁盘。

需求三:放到服务器上跑,要求吞吐和时延(重点是吞吐)

这种应用在互联网企业居多,一般是互联网产品的后端AI计算,例如人脸验证、语音服务、应用了深度学习的智能推荐等。由于一般是大规模部署,这时不仅仅要考虑吞吐和时延,还要考虑功耗和成本。所以除了软件外,硬件也会下功夫。

硬件上,比如使用推理专用的NVIDIA P4、寒武纪MLU100等。这些推理卡比桌面级显卡功耗低,单位能耗下计算效率更高,且硬件结构更适合高吞吐量的情况。

软件上,一般都不会直接上深度学习框架。对于NVIDIA的产品,一般都会使用TensoRRT来加速。TensoRRT用了CUDA、CUDNN,而且还有图优化、fp16、int8量化等。

需求四:放在NVIDIA嵌入式平台上跑,注重时延

比如PX2、TX2、XavieR等,参考上面,也就是贵一点。

需求五:放在其他嵌入式平台上跑,注重时延

硬件方面,要根据模型计算量和时延要求,结合成本和功耗要求,选合适的嵌入式平台。

比如模型计算量大的,可能就要选择带GPU的SoC,用opencl/opengl/vulkan编程;也可以试试NPU,不过现在NPU支持的算子不多,一些自定义Op多的网络可能部署不上去;

对于小模型,或者帧率要求不高的,可能用CPU就够了,不过一般需要做点优化(剪枝、量化、SIMD、汇编、WinogRad等)。在手机上部署深度学习模型也可以归在此列,只不过硬件没得选,用户用什么手机你就得部署在什么手机上。

上述部署和优化的软件工作,在一些移动端开源框架都有人做掉了,一般拿来改改就可以用了,性能都不错。

3 部署举例

选择嵌入式部署的场景来进行分析

一般从离线训练到在线部署,我们需要依赖离线训练框架(静态图:tensoRflow、caFFe,动态图:pyTorch、Mxnet等),静态图工业部署成熟坑少,动态图灵活便捷、预研方便,各有各的好处;还需要依赖在线infeRence的框架(如阿里的MNN、腾讯的NCNN等等,一般不建议你自己去抠neon等siMd底层的东西),能大大缩减你的部署周期,毕竟公司里面工期为王!

选定了上述工具链以后,剩下的就是我们问题所关心的如何部署,或者说的是部署流程。

一般流程分为如下几步:

模型设计和训练针对推断框架的模型转换模型部署

虽然把整个流程分成三步,但三者之间是相互联系、相互影响的。首先第一步的模型设计需要考虑推断框架中对Op的支持程度,从而相应的对网络结构进行调整,进行修改或者裁剪都是经常的事情;模型转换也需要确认推断框架是否能直接解析,或者选取的解析媒介是否支持网络结构中的所有Op,如果发现有不支持的地方,再权衡进行调整。

4 深度学习模型部署方法

出处:智云视图

主要介绍oFFline的部署方法

主要分两个阶段,第一个阶段是训练并得到模型,第二个阶段则是在得到模型后,在移动端进行部署。本文主要讲解的为第二阶段。

压缩网络

目前深度学习在各个领域轻松碾压传统算法,不过真正用到实际项目中却会有很大的问题:

计算量非常巨大模型占用很高内存

由于移动端系统资源有限,而深度学习模型可能会高达几百M,因此很难将深度学习应用到移动端系统中去。

压缩方法

综合现有的深度模型压缩方法,它们主要分为四类:

基于参数修剪和共享的方法针对模型参数的冗余性,试图去除冗余和不重要的项。基于低秩因子分解的技术使用矩阵/张量分解来估计深度学习模型的信息参数。基于传输/紧凑卷积滤波器的方法设计了特殊的结构卷积滤波器来降低存储和计算复杂度。知识蒸馏方法通过学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络的输出。

一般来说,参数修剪和共享,低秩分解和知识蒸馏方法可以用于全连接层和卷积层的CNN,但另一方面,使用转移/紧凑型卷积核的方法仅支持卷积层。低秩因子分解和基于转换/紧凑型卷积核的方法提供了一个端到端的流水线,可以很容易地在CPU/GPU环境中实现。相反参数修剪和共享使用不同的方法,如矢量量化,二进制编码和稀疏约束来执行任务,这导致常需要几个步骤才能达到目标。

移动端部署

目前,很多公司都推出了开源的移动端深度学习框架,基本不支持训练,只支持前向推理。这些框架都是 oFFline 方式,它可确保用户数据的私有性,可不再依赖于因特网连接。

CaFFe2

2017年4月19日 FACEbook在F8开发者大会上推出CaFFe2。项目是专门为手机定制的深度框架,是在caFFe2 的基础上进行迁移的,目的就是让最普遍的智能设备&Mdash;&Mdash;手机也能广泛高效地应用深度学习算法。

开源地址: fACEbookaRcHive/caFFe2

TensoRFlow LITe

2017年5月17日 Goole在I/O大会推出TensoRFlow LITe,是专门为移动设备而优化的 TensoRFlow 版本。TensoRFlow LITe 具备以下三个重要功能:

轻量级(Lightweight):支持机器学习模型的推理在较小二进制数下进行,能快速初始化/启动跨平台(CRoSS-platfoRM):可以在许多不同的平台上运行,现在支持 Android 和 iOS快速(FAst):针对移动设备进行了优化,包括大大减少了模型加载时间、支持硬件加速

模块如下:

TensoRFlow Model: 存储在硬盘上已经训练好的 TensoRFlow 模型

TensoRFlow LITe ConveRteR: 将模型转换为 TensoRFlow LITe 文件格式的程序

TensoRFlow LITe Model file: 基于 FlatBuFFeRs 的模型文件格式,针对速度和大小进行了优化。

TensoRFlow LITe 目前支持很多针对移动端训练和优化好的模型。

CoRe ML

2017年6月6日 apple在WWDC大会上推出CoRe ML。对机器学习模型的训练是一项很重的工作,CoRe ML 所扮演的角色更多的是将已经训练好的模型转换为 iOS可以理解的形式,并且将新的数据“喂给&Rdquo;模型,获取输出。抽象问题和创建模型虽然并不难,但是对模型的改进和训练可以说是值得研究一辈子的事情,这篇文章的读者可能也不太会对此感冒。好在 apple 提供了一系列的工具用来将各类机器学习模型转换为 CoRe ML 可以理解的形式。籍此,你就可以轻松地在你的 iOS app 里使用前人训练出的模型。这在以前可能会需要你自己去寻找模型,然后写一些 C++ 的代码来跨平台调用,而且难以利用 iOS 设备的 GPU 性能和 Metal (除非你自己写一些 shadeR 来进行矩阵运算)。CoRe ML 将使用模型的门槛降低了很多。

CoRe ML 在背后驱动了 iOS 的视觉识别的 Vision 框架和 foundation 中的语义分析相关 API。普通开发者可以从这些高层的 API 中直接获益,比如人脸图片或者文字识别等。这部分内容在以前版本的 SDK 中也存在,不过在 iOS 11 SDK 中它们被集中到了新的框架中,并将一些更具体和底层的控制开放出来。比如你可以使用 Vision 中的高层接口,但是同时指定底层所使用的模型。这给 iOS 的计算机视觉带来了新的可能。