如何部署pytorch模型?

题主遇到这么一个需求,客户端发送一个数据集给服务端,然后服务端再返回给客户端这个数据集的分类结果。模型已经用pytorch框架离线训练好了,有神经网络…
关注者
56
被浏览
97,862

11 个回答

路过,顺便来答一下。一般情况下,我们在训练的时候会使用pytorch、tensorflow或keras(基本算法工程师这几个框架都会用过),我现在用的比较多的是pytorch。在训练完模型后,pytorch的模型文件pth,通常会先通过torch.onnx.export来导出ONNX文件,得到一个静态的模型文件。然后再考虑后续的部署(当然现在torch也支持转torchscript了),移动端部署的话,目前看到用的主要还是C++,还要看你用的具体的推理引擎,有些推理引擎对ONNX文件进行二次转换。比如你准备用MNN来部署,那么ONNX就需要通过MNNConverter进行转换,NCNN则需要通过onnx2ncnn工具转换等等。如果是ONNXRuntime C++的话,可以直接用ONNX文件,而且以我使用的情况看,ONNXRuntime对动态维度输入的支持是比较nice的,对ONNX算子的支持当然是最完善的了。MNN对ONNX的算子兼容性也比较好,基本没遇到ONNX算子转不过来的情况;NCNN支持的算子相对MNN少,但是资料多啊,是鼻祖级别的存在,up主一人扛起一片天。TNN是则新秀选手,对算子的支持也还不错,未来可期;服务端部署则不一定要用到C++,看具体的场景。服务端的推理引擎也不少,比如ONNXRuntime-GPU版本,tensorrt等等,也可以直接用torch的C++库libtorch。

平时我也会梳理一下推理引擎的应用资料,分享出来给大家吧~ 另外,我也顺手捏了一个基于各个推理引擎的C++ AI模型工具箱,目前将近 1k 星吧,作为 学习资源 我还是比较推荐的,也分享一下吧~

模型C++推理案例

目前 80多C++ 推理例子,能编个lib来用,感兴趣的同学可以看看,就不多介绍了

开源项目 描述 Github
Lite.AI.ToolKit A lite C++ toolkit of awesome AI models.(一个开箱即用的C++ AI模型工具箱,emmm,平时学一些新算法的时候顺手捏的,目前包含80+流行的开源模型。不知不觉将近 2k ⭐️ star啦,欢迎大家来点star⭐️ 、提issue呀~) github.com/DefTruth/lit

如果觉得有用不妨给个star支持一下吧~

服务端部署资料

移动端部署资料

模型转换资料

推理引擎编译资料

推理引擎C++工程实践解析

建议可以看看我捏的一个小专栏,有很多详细的讲解哦~(补充说明一下:当然我只是业余在玩,对各个引擎的原理和实现研究的不是很深入,主要是应用,更关注怎么实现业务算法本身的前后逻辑,虽然工作中也用到一些推理引擎,但我主要的工作还是算法研究。所以你如果要研究底层的东西的话,我整理的这点资料是远远不够的,应该去多看看NCNN、MNN这些优秀推理引擎的源码,给主流的推理引擎修修bug,提个PR什么的,可能会比你捏很多应用层的东西更有帮助)

如果你对更多的C++推理应用感兴趣, 欢迎点赞、关注和收藏哈~

补充一下自己写的另一个开源项目 torchlm ,这是一个主要做关键点检测的开源项目,因为自己在做相关任务的过程中,并没有找到一个针对该任务的比较简单易用的框架,所以决定自己整理了一个开源项目,torchlm可以通过pip一键安装。torchlm支持 100+ 种与关键点检测相关的数据增强,并且提供训练、评估和推理等完整的high-level APIs,同时提供基于不同推理引擎的c++推理代码,torchlm还一直在更新维护中,目前pypi下载量约 6k ~,欢迎使用 ~

pip install torchlm>=0.1.6.9 # or install the latest pypi version `pip install torchlm`
pip install torchlm>=0.1.6.9 -i https://pypi.org/simple/ # or install from specific pypi mirrors use '-i'

torchlm提供一系列方便实验研究的APIs,包含Pytorch风格的数据增强,方便易用的训练、验证和推理APIs.

比如用torchlm做数据增强:

用torchlm做训练或fine-tuning:

用torchlm做验证(Evaluating),计算NME/FR/AUC:

用torchlm做模型推理:

导出torchlm中的模型为ONNX进行部署:

torchlm的开源地址( 欢迎star,提issue ):

真溜了...