Windows下编译Onnxruntime

1.背景描述

随着深度学习的发展,算法框架层出不穷,比如Caffe2,TensorFlow,PyTorch等,这么多框架产生了一个问题,不同框架的算法模型,并不能通用。如果已经有一个Tensorflow的模型,需要将其部署在移动设备上,以观测效果,通常需要用caffe2重新将模型写好,然后再训练参数;试想下这将是一个多么耗时耗力的过程。

自然的,我们能想到,如果算法模型能在不同的框架之间通用,那问题不就解决了。

**Open Neural Network Exchange(ONNX,开放神经网络交换)**就应运而生。

ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。 ONNX的规范及代码主要由微软,亚马逊 ,Facebook 和 IBM 等公司共同开发,以开放源代码的方式托管在Github上。得到了主流深度学习算法框架的支持。

onnx官网

https://onnx.ai/

可以说,onnx的推出,解决了算法模型部署的大难题。

为了使用Onnx这样的中间件,我们需要一个可以用来加载使用onnx模型的运行时,也就是微软开发的onnxruntime。
官网地址:

https://www.onnxruntime.ai/

onnxruntime就是一套动态库,能支持linux、windows、macOS等多个平台,如何取得onnxruntime,有两种方式,一种是在github上下载官方发布的二进制版本。另一种是自己用源码编译。

2.二进制下载

微软在github上发布了各个版本对应的二进制文件。
比如我们需要用1.6.0版本的Windows下GPU加速版本,那么直接打开页面选择对应版本下载即可。

https://github.com/microsoft/onnxruntime/releases/tag/v1.6.0

在这里插入图片描述
Onnxruntime二进制版本对应关系和下载
在这里插入图片描述

3.Windows下编译onnxruntime

既然有官方二进制版本,为什么我们还要自己编译呢?
一方面,onnxruntime和cuda、cudnn、tensorRT、编译器等环境是绑定的,直接下载的不一定和你当前项目的环境一致。
另一方面,onnxruntime有很多特性,发布的二进制中只编译了一些基础特性,可能你需要的特性并未被包含在其中。

如果下载的二进制不能满足需要,那么我们就只能自己编译了,编译本身很简单,只是有一些坑需要注意。

3.1 编译环境

  • Windows 10
  • Visual Studio 2017
  • cuda 10.0
  • cudnn7.6.5
  • TensorRT-7.0.0.11

注意

  • VS要用2017或更高版本,更低的版本编译会失败,项目用到了一些较新的特性。
  • TensorRT也需要7.0或以上版本,低版本会有各种莫名问题,我尝试过6.0,问题太多。

3.2 源码下载

onnxruntime源码地址

https://github.com/microsoft/onnxruntime

(1)下载源码

git clone -b rel-1.3.0 --recursive https://github.com/Microsoft/onnxruntime

注意:一定要加递归**–recursive**,不然子项目下载不到。版本分支按照需要选取就行了。

(2)更新包

cd onnxruntime
git submodule update --init --recursive

如果下载慢,也可以用gittee上的镜像

https://gitee.com/mirrors_microsoft/onnxruntime

但是在递归下载子项目的时候,还是会从github上拖。

3.3编译脚本

用管理员打开命令行控制台,进入onnxruntime目录:
选好自己的cuda、cudnn、tensorRT路径,执行脚本,就可以开始编译。

.\build.bat --build_shared_lib --config Release   --use_cuda --cudnn_home "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0" --cuda_home "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0" --use_tensorrt --tensorrt_home "C:\TensorRT-7.0.0.11" 

不过这样在编译过程中会报错。
在这里插入图片描述
出错了不好修改,所以,当目录下生成了VS工程后,就直接用 VS2017 编译更方便一些。

在这里插入图片描述
用VS2017打开工程onnxruntime.sln,选择Release,x64
在这里插入图片描述
下一步,将每个工程中“C/C++/常规/将警告视为错误”这条,改成

在这里插入图片描述
修改改完后,直接在onnxruntime上右键选择编译就可以了。

编译完成后在Release下会生成需要的onnxruntime动态库。
在这里插入图片描述

其他:Linux下

Linux下的编译基本是一样的,把build.bat换成build.sh就行了。脚本如下:

.\build.sh --build_shared_lib --config Release  --use_cuda --cudnn_home [cuda路径] --cuda_home [CuDNN路径] --use_tensorrt --tensorrt_home [TensorRT路径]  --update --build

关于onnxruntime的用法,后面文章再举例来说明了。

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值