本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:如何正确的选择深度学习模型工业化部署的方式
原文链接:https://www.stubbornhuang.com/1675/
发布于:2021年09月10日 10:37:22
修改于:2021年09月11日 9:27:48

1 如何正确的选择深度学习模型工业化部署的方式
转自知乎高赞回答:https://www.zhihu.com/question/329372124/answer/743251971
最近在做深度学习模型的工业化部署,无意中看到了这篇高赞回答,觉得写得很好,有必要备份一下。这篇回答对我如何选择部署方式有很大的帮助。
1.1 需求1:简单的demo演示
caffe、tf、pytorch等框架随便选一个,切到test模式,拿python跑一跑就好,顺手写个简单的GUI展示结果
高级一点,可以用CPython包一层接口,然后用C++工程去调用
1.2 需求2:要放到服务器上去跑,但一不要求吞吐二不要求时延的那种
caffe、tf、pytorch等框架随便选一个,按照官方的部署教程,老老实实用C++部署,例如pytorch模型用工具导到libtorch下跑(官方有教程,很简单)
这种还是没有脱离框架,有很多为训练方便保留的特性没有去除,性能并不是最优的;
另外,这些框架要么CPU,要么NVIDIA GPU,对硬件平台有要求,不灵活;
还有,框架是真心大,占内存(tf还占显存),占磁盘
1.3 需求3:放到服务器上跑,要求吞吐和时延(重点是吞吐)
这种应用在互联网企业居多,一般是互联网产品的后端AI计算,例如人脸验证、语音服务、应用了深度学习的智能推荐等。
由于一般是大规模部署,这时不仅仅要考虑吞吐和时延,还要考虑功耗和成本。所以除了软件外,硬件也会下功夫,比如使用推理专用的NVIDIA P4、寒武纪MLU100等。这些推理卡比桌面级显卡功耗低,单位能耗下计算效率更高,且硬件结构更适合高吞吐量的情况
软件上,一般都不会直接上深度学习框架。对于NVIDIA的产品,一般都会使用TensorRT来加速(我记得NVIDIA好像还有TensorRT inference server什么的,名字记不清了,反正是不仅可以加速前传,还顺手帮忙调度了)。TensorRT用了CUDA、CUDNN,而且还有图优化、fp16、int8量化等。反正用NVIDIA的一套硬软件就对了
1.4 放在NVIDIA嵌入式平台上跑,注重时延
比如PX2、TX2、Xavier等,参考上面(用全家桶就对了),也就是贵一点嘛
1.5 放在其他嵌入式平台上跑,注重时延
硬件方面,要根据模型计算量和时延要求,结合成本和功耗要求,选合适的嵌入式平台。
比如模型计算量大的,可能就要选择带GPU的SoC,用opencl/opengl/vulkan编程;也可以试试NPU,不过现在NPU支持的算子不多,一些自定义Op多的网络可能部署不上去
对于小模型,或者帧率要求不高的,可能用CPU就够了,不过一般需要做点优化(剪枝、量化、SIMD、汇编、Winograd等)
顺带一提,在手机上部署深度学习模型也可以归在此列,只不过硬件没得选,用户用什么手机你就得部署在什么手机上23333。为老旧手机部署才是最为头疼的
上述部署和优化的软件工作,在一些移动端开源框架都有人做掉了,一般拿来改改就可以用了,性能都不错。
1.6 上述部署方案不满足我的需求
比如开源移动端框架速度不够——自己写一套。比如像商汤、旷世、Momenta都有自己的前传框架,性能应该都比开源框架好。只不过自己写一套比较费时费力,且如果没有经验的话,很有可能费半天劲写不好
当前分类随机文章推荐
- Python - onnx导出模型出现RuntimeError: Exporting the operator pad_sequence to ONNX opset version 13 is not supported错误 阅读271次,点赞0次
- 深度学习 - 数据集中训练集、验证集、测试集的划分以及各自作用 阅读1912次,点赞0次
- Pytorch - torch.nn.Conv2d参数详解与使用 阅读306次,点赞0次
- TensorRT - 解决INVALID_ARGUMENT: getPluginCreator could not find plugin ScatterND version 1,TensorRT找不到ScatterND插件的问题 阅读3252次,点赞0次
- Pytorch - 使用torch.onnx.export将Pytorch模型导出为ONNX模型 阅读6010次,点赞0次
- Pytorch - 模型保存与加载以及如何在已保存的模型的基础上继续训练模型 阅读426次,点赞0次
- 深度学习 - 在大数据集下,内存容量与磁盘IO速度影响模型训练速度的问题 阅读39次,点赞0次
- Pytorch - 使用opencv-python解码视频文件并将视频帧转换为Pytorch tensor作为网络模型输入数据 阅读2322次,点赞0次
- Pytorch - torch.nn.Module的parameters()和named_parameters() 阅读442次,点赞0次
- yolov5 - 原始仓库检测代码detect.py中文注释 阅读2558次,点赞1次
全站随机文章推荐
- Pytorch - transpose和permute函数的区别和用法 阅读1138次,点赞0次
- 资源分享 - 计算机图形学 第2版,Fundamentals of Computer Graphics(Second Edition) 中文版PDF下载 阅读3345次,点赞0次
- 资源分享 - Digital Image Processing , Third Edition 英文高清PDF下载 阅读1642次,点赞0次
- 资源分享 - 深度学习与图像识别:原理与实践 (魏溪含 涂铭 张修鹏著) 高清PDF下载 阅读2315次,点赞1次
- 资源分享 - GPU Pro 2 - Advanced Rendering Techniques 英文高清PDF下载 阅读2439次,点赞0次
- 左手坐标系与右手坐标系 阅读3020次,点赞0次
- ThreeJS - 动态更换fbx模型的某个子Mesh现有的纹理贴图为指定的纹理贴图 阅读2536次,点赞1次
- 资源分享 - An Introduction to Ray Tracing 英文高清PDF下载 阅读990次,点赞0次
- C++ – 字节数组byte[]或者unsigned char[]与bool的相互转换 阅读858次,点赞1次
- Python - 爬取直播吧首页重要赛事赛程信息 阅读230次,点赞0次
评论
167