• 训练好的深度学习模型,多种部署方式


    简介

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

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

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

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

    部署的不用需求

    需求一: 简单的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/openglvulkan编程;也可以试试NPU,不过现在NPU支持的算子不多,一些自定义Op多的网络可能部署不上去;

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

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

    需求六: 上述部署方案不满足你的需求。

    比如开源移动端框架速度不够——自己写一套。比如像商汤、旷世、Momenta都有自己的前向传播框架,性能应该都比开源框架好。只不过自己写一套比较费时费力,且如果没有经验的话,很有可能费半天劲写不好。

  • 相关阅读:
    秋招笔试之微众银行
    BeanUtils中的copyProperties方法使用
    隧道人员定位解决方案,好用到离谱
    js_for循环实操
    Linux-进程管理
    阿里内部流传的JDK源码剖析手册,GitHub已获上千万的访问量
    机器人的标准/技术/产品
    mysql优化之explain 以及 索引优化
    机器学习简述
    msfvenom常用参数
  • 原文地址:https://blog.csdn.net/u014297502/article/details/126225553