onnx推理

本文详细介绍了如何在Ubuntu环境下安装onnxruntime-gpu,涉及版本对应、CUDA和TensorRT的配置,以及使用CUDAExecutionProvider进行GPU推理的代码示例。通过编译步骤,展示了如何手动编译并生成适用于TensorRT的onnxruntime wheel文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. onnxruntime与onnxruntime-gpu安装

版本对应关系:地址
在这里插入图片描述

2. onnxruntime使用gpu推理代码部分:

self.session = onnxruntime.InferenceSession(onnx_file_path)
self.session = onnxruntime.InferenceSession(onnx_file_path, providers=[‘CUDAExecutionProvider’])

3. 手动编译onnxruntime

https://zenn.dev/pinto0309/scraps/0b6dc472d1f1b4

docker run --rm -it --gpus all \
-v `pwd`:/home/user/workdir \
ghcr.io/pinto0309/openvino2tensorflow:base.11.7.1-cudnn8-tf2.10.0-trt8.4.3-openvino2022.1.0

cd /home/user/workdir

git clone -b v1.12.1 https://github.com/microsoft/onnxruntime.git \
&& cd onnxruntime

pip show numpy

Name: numpy
Version: 1.23.2

dpkg -l | grep TensorRT

ii  graphsurgeon-tf        8.4.3-1+cuda11.6   amd64 GraphSurgeon for TensorRT package
ii  libnvinfer-bin         8.4.3-1+cuda11.6   amd64 TensorRT binaries
ii  libnvinfer-dev         8.4.3-1+cuda11.6   amd64 TensorRT development libraries and headers
ii  libnvinfer-plugin-dev  8.4.3-1+cuda11.6   amd64 TensorRT plugin libraries
ii  libnvinfer-plugin8     8.4.3-1+cuda11.6   amd64 TensorRT plugin libraries
ii  libnvinfer-samples     8.4.3-1+cuda11.6   all   TensorRT samples
ii  libnvinfer8            8.4.3-1+cuda11.6   amd64 TensorRT runtime libraries
ii  libnvonnxparsers-dev   8.4.3-1+cuda11.6   amd64 TensorRT ONNX libraries
ii  libnvonnxparsers8      8.4.3-1+cuda11.6   amd64 TensorRT ONNX libraries
ii  libnvparsers-dev       8.4.3-1+cuda11.6   amd64 TensorRT parsers libraries
ii  libnvparsers8          8.4.3-1+cuda11.6   amd64 TensorRT parsers libraries
ii  onnx-graphsurgeon      8.4.3-1+cuda11.6   amd64 ONNX GraphSurgeon for TensorRT package
ii  python3-libnvinfer     8.4.3-1+cuda11.6   amd64 Python 3 bindings for TensorRT
ii  python3-libnvinfer-dev 8.4.3-1+cuda11.6   amd64 Python 3 development package for TensorRT
ii  tensorrt               8.4.3.1-1+cuda11.6 amd64 Meta package for TensorRT
ii  uff-converter-tf       8.4.3-1+cuda11.6   amd64 UFF converter for TensorRT package

sudo chmod +x build.sh
sudo pip install cmake==3.24.1

./build.sh \
--config Release \
--cudnn_home /usr/lib/x86_64-linux-gnu/ \
--cuda_home /usr/local/cuda \
--use_tensorrt \
--use_cuda \
--tensorrt_home /usr/src/tensorrt/ \
--use_openvino AUTO:GPU,CPU \
--enable_pybind \
--build_shared_lib \
--build_wheel \
--parallel $(nproc) \
--skip_tests

find . -name "*.whl"
./build/Linux/Release/dist/onnxruntime_gpu-1.12.1-cp38-cp38-linux_x86_64.whl
### ONNX推理框架简介 ONNX(Open Neural Network Exchange)是一种开放式的神经网络交换格式,旨在实现不同深度学习框架之间的互操作性。通过将模型转换为ONNX格式,可以轻松地在多个平台上进行推理或部署[^1]。 #### 跨平台兼容性 ONNX支持多种主流深度学习框架,例如PyTorch、TensorFlow和Keras等。这意味着开发人员可以在这些框架之一中完成模型训练后,将其导出为ONNX格式,并利用该格式在其他环境中执行推理任务[^2]。 #### 高效推理能力 为了提高性能表现,ONNX提供了专门优化过的运行时环境——ONNX Runtime。它不仅能够加速CPU上的计算过程,还特别针对GPU进行了增强处理,使得复杂模型也能获得良好的实时响应效果[^3]。 以下是基于Python语言的一个简单例子来展示如何使用ONNX Runtime 对已经保存好的 `.onnx` 文件做预测: ```python import onnxruntime as ort import numpy as np # 加载ONNX模型 session = ort.InferenceSession("path/to/model.onnx") # 准备输入数据 (假设是一个随机生成的数据样本) input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name dummy_input = np.random.randn(1, 9, 4096).astype(np.float32) # 执行推理并获取结果 outputs = session.run([output_name], {input_name: dummy_input}) print(outputs) ``` 上述代码片段展示了基本的工作流程:初始化 `InferenceSession`, 设置好相应的输入张量形状以及类型之后调用 `run()` 方法即可得到最终输出向量[^4]. 对于更高级别的需求比如集成到CUDA驱动下的高性能图形处理器(GPU), TensorRT 提供了一个解析器接口可以直接读取由前面提到的方法产生的 .onnx 文件来进行进一步定制化编译与优化工作流[^5]: ```cpp #include <NvInfer.h> #include <onnx_parser.hpp> // 创建Builder实例... IHostMemory* serializedModel = builder->buildSerializedNetwork(network); assert(serializedModel != nullptr); std::ofstream p("engine.trt", std::ios::binary); if (!p) { std::cerr << "could not open file" << std::endl; } p.write(reinterpret_cast<const char*>(serializedModel->data()), serializedModel->size()); serializedModel->destroy(); ``` 以上C++示例演示了怎样借助 NVIDIA 的 TensorRT 工具链把先前准备完毕的标准定义形式转化为专属于硬件特性的序列化引擎档案(.trt). --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值