【环境搭建】onnxruntime

1,介绍
    onnxruntime是一个用于onnx模型推理的引擎。

2,安装
2.1 cuda,cudnn
2.2 cmake,版本>=3.13.0

sudo apt-get install libssl-dev
sudo apt-get autoremove cmake # 卸载
wget https://cmake.org/files/v3.23/cmake-3.23.4.tar.gz
tar -xf cmake-3.23.4
cd cmake-3.23.4
./bootstrap --prefix=/usr
make -j 8
sudo make install

cmake -version
cmake version 3.23.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).

2.3 tensorrt
2.4 onnxruntime

conda activate py36 # 切换虚拟环境
git clone https://github.com/microsoft/onnxruntime.git
cd onnxruntime
git submodule sync
git submodule update --init --recursive 
./build.sh \
	--use_cuda \
	--cuda_version=11.0 \
	--cuda_home=/usr/local/cuda \
	--cudnn_home=/usr/local/cuda \
	--use_tensorrt --tensorrt_home=$TENSORRT_ROOT \
	--build_shared_lib --enable_pybind \
	--build_wheel --update --build
pip build/Linux/Debug/dist/onnxruntime_gpu_tensorrt-1.6.0-cp36-cp36m-linux_x86_64.whl

# 获取指定版本
git clone -b v1.6.0 https://github.com/microsoft/onnxruntime.git
cd onnxruntime
git checkout -b v1.6.0
git submodule sync
git submodule update --init --recursive 

3,pip 安装

pip install onnxruntime-gpu==1.6.0 onnx==1.9.0 onnxconverter_common==1.6.0 # cuda 10.2
pip install onnxruntime-gpu==1.8.1 onnx==1.9.0 onnxconverter_common==1.8.1 # cuda 11.0

import onnxruntime
onnxruntime.get_available_providers()
sess = onnxruntime.InferenceSession(onnx_path)
sess.set_providers(['CUDAExecutionProvider'], [ {'device_id': 0}])
result = sess.run([output_name], {input_name:x})  # x is input

3,onnxruntime and pytorch inference

# -*- coding: utf-8 -*-
import torch
from torchvision import models
import onnxruntime
import numpy as np

model = models.resnet18(pretrained=True)
model.eval().cuda()

## pytorch
x = torch.rand(2,3,224,224).cuda()
out_pt = model(x)
print(out_pt.size())

# onnx
onnx_path = "resnet18.onnx"
dynamic_axes = {'input': {0: 'batch_size'}}
torch.onnx.export(model,
                  x,
                  onnx_path,
                  export_params=True,
                  opset_version=11,
                  do_constant_folding=True,
                  input_names=['input'],
                  dynamic_axes=dynamic_axes)

sess = onnxruntime.InferenceSession(onnx_path)
sess.set_providers(['CUDAExecutionProvider'], [ {'device_id': 0}])
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name

# onnxruntime inference
xx = x.cpu().numpy().astype(np.float32)
result = sess.run([output_name], {input_name:xx})  # x is input
print(result[0].shape)

# MSE
mse = np.mean((out_pt.data.cpu().numpy() - result[0]) ** 2)
print(mse)

输出结果

torch.Size([2, 1000])
(2, 1000)
9.275762e-13
### ONNX Runtime 环境配置教程 #### 准备工作 为了成功安装并使用ONNX Runtime,在开发环境中需预先准备一些工具和库。确保已安装Visual Studio 2019 或更高版本以及CMake构建系统[^1]。 #### 下载ONNX Runtime源码或二进制文件 可以从GitHub仓库获取最新的ONNX Runtime源代码来编译,也可以直接下载预编译好的Windows平台下的CPU/GPU版本的二进制包。 #### 安装依赖项 对于基于Visual Studio的项目来说,通过NuGet管理器添加`Microsoft.AI.MachineLearning`作为项目的依赖之一能够简化集成过程;而对于希望手动控制环境的人来说,则可能需要单独处理诸如Protobuf之类的外部依赖关系。 #### 编译设置(如果选择了从源码编译) 当决定自行编译时,建议按照官方文档中的指导完成必要的参数设定,并利用CMake生成适用于Visual Studio解决方案(.sln),之后再借助IDE内部功能来进行实际编译操作。 ```cmake # CMakeLists.txt 配置实例 set(ORT_BUILD_FLAGS "-DONNXRUNTIME_USE_CUDA=OFF") # 关闭CUDA支持, 如果不需要GPU加速的话 add_subdirectory(onnxruntime) ``` #### 创建测试工程验证安装成果 创建一个新的控制台应用程序或其他形式的应用程序以加载并调用ONNX模型进行预测是一个很好的方法去检验整个流程是否顺畅无阻。此时应该注意引入正确的头文件路径及链接相应的静态/动态库文件。 ```cpp // 测试.cpp 文件片段 #include "onnxruntime_cxx_api.h" using namespace Ort; ... SessionOptions session_options; session_options.SetIntraOpNumThreads(1); session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED); Env env(ORT_LOGGING_LEVEL_WARNING, "test"); unique_ptr<Session> session(new Session(env, L"path_to_your_model.onnx", session_options)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值