先说结论:部署的方式取决于需求
需求一:简单的demo演示,只要看看效果的,像是学校里面的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来加速(我记得NVIDIA好像还有TensorRT inference server什么的,名字记不清了,反正是不仅可以加速前传,还顺手帮忙调度了)。TensorRT用了CUDA、CUDNN,而且还有图优化、fp16、int8量化等。反正用NVIDIA的一套硬软件就对了
需求四:放在NVIDIA嵌入式平台上跑,注重时延
比如PX2、TX2、Xavier等,参考上面(用全家桶就对了),也就是贵一点嘛
需求五:放在其他嵌入式平台上跑,注重时延
硬件方面,要根据模型计算量和时延要求,结合成本和功耗要求,选合适的嵌入式平台。
比如模型计算量大的,可能就要选择带GPU的SoC,用opencl/opengl/vulkan编程;也可以试试NPU,不过现在NPU支持的算子不多,一些自定义Op多的网络可能部署不上去
对于小模型,或者帧率要求不高的,可能用CPU就够了,不过一般需要做点优化(剪枝、量化、SIMD、汇编、Winograd等)
顺带一提,在手机上部署深度学习模型也可以归在此列,只不过硬件没得选,用户用什么手机你就得部署在什么手机上23333。为老旧手机部署才是最为头疼的
上述部署和优化的软件工作,在一些移动端开源框架都有人做掉了,一般拿来改改就可以用了,性能都不错。
需求六:上述部署方案不满足我的需求
比如开源移动端框架速度不够——自己写一套。比如像商汤、旷世、Momenta都有自己的前传框架,性能应该都比开源框架好。只不过自己写一套比较费时费力,且如果没有经验的话,很有可能费半天劲写不好
先说结论:部署的方式取决于需求需求一:简单的demo演示,只要看看效果的,像是学校里面的demo展示这种caffe、tf、pytorch等框架随便选一个,切到test模式,拿python跑一跑就好,顺手写个简单的GUI展示结果高级一点,可以用CPython包一层接口,然后用C++工程去调用需求二:要放到服务器上去跑,但一不要求吞吐二不要求时延的那种,说白了还是有点玩玩的意思caffe、tf、pytorch等框架随便选一个,按照官方的部署教程,老老实实用C++部署,例如pytorch模型用
对于新
训练
完的
模型
进行通信传输(磁盘io或者网络io),这里可以考虑类似于k8或者hdfs这些大数据或者云计算的工具,将
模型
存储于分布式环境,
即
模型
从内存 ---> 缓存端(hdfs或其他s3等介质中,甚至说是磁盘)
1.2
模型
文件传输
系统
部署
..
在软件工程中,
部署
指把开发完毕的软件投入使用的过程,包括环境配置、软件安装等步骤。对于
深度学习
模型
来说,
模型
部署
指让
训练
好的
模型
在特定环境中运行的过程。运行
模型
所需的环境难以配置。
深度学习
模型
通常是由一些框架编写,比如 PyTorch、TensorFlow。由于框架规模、依赖环境的限制,这些框架不适合在手机、开发板等生产环境中安装。
深度学习
模型
的结构通常比较庞大,需要大量的算力才能满足实时运行的需求。
模型
的运行效率需要优化。
step1. 使用任意一种
深度学习
框架来定义网络结构,并通过
训练
确定网络中的参数。
大家都知道现在
深度学习
很火,不管是线上还是线下,大家都对
深度学习
充满了期待。一般来说,
深度学习
会包括这样几个过程,即数据准备、数据标记、
训练
、
部署
。如果说数据的准备和标记还是可控的话,那么
训练
和
部署
这个里面需要花费的时间就非常可观了。首先,选择什么样的
模型
,才能匹配业务的需要。另外一个,就是
训练
好的
模型
,怎样才能在设备上运行起来,这个就非常可观了。目前,关于
部署
这块主要有这么集中方法,
在python服务器上
部署
模型
文件,给出一个http服务,后台通过这个服务就可以调用
模型
进行输入输出了。
优点:算法与后端的工作界限明显,不需要特别多的沟通;在使用
模型
前还需要进行数据预处理,不需要额外再进行代码迁移。
缺点:需要服务器安装python环境,维护的成本增加,服务器之间接口的通信问题,获取
模型
输出所需
并发与并行
并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一时刻点上只有一个程序在处理机上运行。例如吃饭的时候打电话,你只能吃完一口饭,再说一句话,再吃一口饭,再说一句话,并发说明你有处理多个任务的能力,不一定要同时。
并行:指的是系统具有同时处理多个任务的能力。例如上面的吃饭打电话的例子,你可以一边吃饭一边说话。
同步与异步
同步和异步关注的是消息通信机制。同步就是调用消息,调用方必须等到这个消息返回
1. 将
深度学习
模型
转换为适合机器人的格式。这可能包括将
模型
转换为C++或其他适合嵌入式设备的语言。
2. 将
模型
与机器人软件进行集成。这可能需要编写代码来将
模型
与机器人的传感器和执行器进行交互。
3. 对
模型
进行优化,以确保它在机器人上运行时能够高效地使用资源,例如内存和计算能力。
4. 对
模型
进行测试和验证,确保它在机器人上的性能和准确性符合预期。
5.
部署
模型
到机器人,并对其进行监控和维护,以确保机器人的可靠性和稳定性。
整个过程需要跨领域的知识,包括
深度学习
、机器人技术、编程和优化等。因此,最好由具有相关经验的专业人员来完成。