ONNXRuntime安装教程
onnxruntime 是个啥子?
我们都知道onnx,onnx只是一个协议格式,它没有具体的推理框架。我们知道,不同厂商,它的推理框架速度有很大的差异。我们有自己做的,比如ncnn,mnn,mace这些都是前向推理框架,他们也可以用来推理onnx模型。这是在CPU上,这些框架CPU的速度毫无疑问,比得上intel吗?比的过openvino吗?不一定。
另外一个就是GPU,你pytorch的GPU推理速度能比得过英伟达人家的TensorRT吗?比不过,至少差三倍的速度。为什么会有这么大的差别?
原因很简单,人家卖硬件的,为了让你用它的硬件,肯定会想方设法让你在硬件上速度更快,这是刚需,你对CPU的了解能比得过intel?你对GPU的了解能比得过NVIDIA??
那么onnxruntime是个什么鬼呢?
onnxruntime是一个实实在在的onnx模型推理引擎,但,它统一了一个前端接口,而真正的实现支持openvino,支持mkldnn,支持TensorRT,支持CUDA,也支持CPU,换句话说,一次编写,可以直接根据硬件使用对应的库来编译。
这个很管用。那么它的速度gain到底有多大呢?
先安装一下onnxruntime吧。我们将用onnxruntime的GPU库 (不带TensorRT)来推理一下maskrcnn,看看速度和官方的pytorch、比有多大的提升。
为了加上tensorrt支持,你需要下载一下tensorrt,根据你的系统版本。解压到 ~/tensorrt5.1.5
5.1.5是最新的TensorRT。下面我们将要用到。
- 安装
git clone --recursive https://github.com/microsoft/onnxruntime
# 如果你遇到了libFuzzer clone不下来,从这个地方下载[Fuzzer.zip](https://github.com/alibaba/euler/files/2991980/Fuzzer.zip)解压到对应的目录,这个没有办法,Q在那儿。注意文件夹的名字不要错: https://github.com/alibaba/euler/files/2991980/Fuzzer.zip
# 注意,这里把解压后的mv的时候要把.git也move过去。
./build.sh \
--use_cuda \
--cuda_version=10.0 \
--cuda_home=/usr/local/cuda \
--cudnn_home=/usr/local/cuda \
--use_tensorrt --tensorrt_home=$HOME/TensorRT \
--build_shared_lib --enable_pybind \
--build_wheel --update --build
其实也简单,通过 build.sh
来编译。
可以看到,onnxruntime里面实际上有很多GPU或者CPU的实现,来支持onnx的各种operators.
如果你能开始编译,请评论一下.
onnxruntime 编译完了之后,如何进一步安装对应的python wrapper呢?
实际上已经生成了:
onnxruntime 0.5.0
onnxruntime-gpu-tensorrt 0.5.0
但是这个wheel文件怎么没有找到呢。。。
QA
这里记录一些onnxruntime编译的时候各种debug,请注意,我们的编译教程会随时跟踪最新的onnxruntime,记录一些常见的bug。
fatal: no submodule mapping found in .gitmodules for path 'cmake/external/gsl'
:
git rm --cached cmake/external/gsl 就可以xxx
xxx
onnx-tensorrt 安装教程
由于最近总是忘记onnxtensorrt如何编译。这里再记录一下,如何编译 onnx-tensorrt 以及TensorRT两个工程。
onnx-tensorrt
:
git clone --recursive https://github.com/onnx/onnx-tensorrt.git
cd onnx-tensorrt
cmake -DTENSORRT_ROOT=~/TensorRT ..
其中~/TensorRT
是你的tensorrt的安装位置。但是请注意,你要根据你的tensorrt版本去编译不同的onnx-tensorrt版本,现在master branch应该是需要tensorrt6.0