Pytorch部署方案(一):基于TensorRT(一个C++库)【最成熟&最优化】【①Pytorch->ONNX->TensorRT;②Pytorch->Caffe->TensorRT】
2023-09-27 14:20:40 时间
一、Pytorch转ONNX的意义
一般来说转ONNX只是一个手段,在之后得到ONNX模型后还需要再将它做转换,比如转换到TensorRT上完成部署,或者有的人多加一步,从ONNX先转换到caffe,再从caffe到tensorRT。原因是Caffe对tensorRT更为友好,这里关于友好的定义后面会谈。
因此在转ONNX工作开展之前,首先必须明确目标后端。ONNX只是一个格式,就和json一样。只要你满足一定的规则,都算是合法的,因此单纯从Pytorch转成一个ONNX文件很简单。但是不同后端设备接受的onnx是不一样的,因此这才是坑的来源。
Pytorch自带的torch.onnx.export转换得到的ONNX,ONNXRuntime需要的ONNX,TensorRT需要的ONNX都是不同的。
真正落地的算法部署,毫无疑问,假如你的target是GPU,采用ONNX+TensorRT应该是目前最成熟、最优化的方案。
假如你的target是一些嵌入式芯片,那么采用MNN也是可以通过onnx轻松实现CPU嵌入式端快速推理的。
既然ONNX和TensorRT这么好,为什么都不用呢?为什么都还在用Python写难看的推理的代码呢?原因也很简单:
- 入门太难,C++一般人玩不来;
- 既要懂模型的每一层输入输出,又要懂TensorRT的API,至少要很熟悉。
二、TensorRT
一般的深度学习项目,训练时为了加快速度&#x
相关文章
- 带你掌握C++中三种类成员初始化方式
- 从四个问题透析Linux下C++编译&链接
- C++ windows客户端支持SSL双向认证
- 【C/C++开发】C++编译指令#pragma pack的配对使用
- C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() & free()】
- Calling C++ Code From Go With SWIG
- [TF] TensorFlow & TFLite - C++ API
- 转: windows下C++ UI库 UI神器-SOUI
- C++构造函数中调用虚函数
- 【MySQL】C or C++连接MySQL数据库
- C++中pair和make_pair的区别
- c++ unique函数
- (string&C++)(六、追加)append与push_back
- 【C++知识汇总】运营商 & 运算符重载
- C++019-C++暴力枚举
- 设计模式C++学习笔记之二十(完结篇 & 面向对象原则)设计模式C++实例下载
- Linux的多线程下使用c/c++调用Python方法示例
- c++20智能指针支持数组创建
- 【PAT乙级真题】1003 我要通过 (20 分)(C++)
- 11.C++-临时对象分析
- C++ 变量的引用 &
- C++ 类 & 对象
- C++中的结构体所占内存空间总结
- 【C++】学习C++中的继承
- linux下练习 c++ 有序二叉树