相关文章推荐
谦和的弓箭  ·  科学观察 | ...·  1 月前    · 
谦逊的开心果  ·  python - How do I ...·  1 年前    · 
闷骚的香烟  ·  如何使用Mapbox Android ...·  1 年前    · 

先说结论:部署的方式取决于需求

需求一:简单的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. 部署 模型 到机器人,并对其进行监控和维护,以确保机器人的可靠性和稳定性。 整个过程需要跨领域的知识,包括 深度学习 、机器人技术、编程和优化等。因此,最好由具有相关经验的专业人员来完成。