在 Python 和 C++ 环境下安装和使用 ONNX Runtime

GPU 依赖项

对于 GPU 版本的 ONNX Runtime,需要安装 CUDA 和 cuDNN。请检查 CUDA 执行提供程序的要求以获取兼容版本的 CUDA 和 cuDNN。安装时请注意:

  • cuDNN 需要 ZLib,安装方法请参照 cuDNN 安装指南。
  • CUDA 和 cuDNN 的 bin 目录路径需要添加到环境变量 PATH 中。

《这部分可以去B站有很多教学视频讲的更详细》

Python 环境安装

安装 ONNX Runtime CPU 版本

要在 Python 环境中安装 ONNX Runtime 的 CPU 版本,可以使用以下命令:

复制代码
pip install onnxruntime

安装 ONNX Runtime GPU 版本 (CUDA )

复制代码
pip install onnxruntime-gpu

验证Python 示例

以下是一个简单的 Python 示例,用于加载和运行 ONNX 模型:

python 复制代码
import onnxruntime as ort

# 加载 ONNX 模型
session = ort.InferenceSession("model.onnx")

# 准备输入数据
input_name = session.get_inputs()[0].name
input_data = ...  # 根据模型要求准备输入数据

# 运行推理
result = session.run(None, {input_name: input_data})

# 输出结果
print(result)

C++ 环境安装

安装 ONNX Runtime CPU 版本

在 C++ 环境中安装 ONNX Runtime 的 CPU 版本,可以使用以下命令:

python 复制代码
# 克隆 ONNX Runtime 仓库
git clone --recursive https://github.com/microsoft/onnxruntime
cd onnxruntime

# 构建并安装
./build.sh --config Release --build_shared_lib

安装 ONNX Runtime GPU 版本 (CUDA 11.x)

要安装支持 CUDA 11.x 的 GPU 版本,可以使用以下步骤:

  1. 设置环境变量
python 复制代码
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
  1. 构建 ONNX Runtime
python 复制代码
./build.sh --config Release --use_cuda

《windows端可以用 vs编辑器配置相应的头文件、库文件》

C++ 验证示例

以下是一个简单的 C++ 示例,用于加载和运行 ONNX 模型:

cpp 复制代码
#include <onnxruntime/core/session/onnxruntime_cxx_api.h>
#include <vector>
#include <iostream>

int main() {
  // 初始化 ONNX Runtime
  Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "example");

  // 创建 SessionOptions
  Ort::SessionOptions session_options;
  session_options.SetIntraOpNumThreads(1);
  session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_BASIC);

  // 加载模型
  Ort::Session session(env, "model.onnx", session_options);

  // 获取模型输入信息
  Ort::AllocatorWithDefaultOptions allocator;
  const char* input_name = session.GetInputName(0, allocator);
  std::cout << "Input Name: " << input_name << std::endl;

  // 准备输入数据
  std::vector<float> input_data = ...;  // 根据模型要求准备输入数据
  std::vector<int64_t> input_shape = {1, 3, 224, 224};  // 示例输入形状

  // 创建输入 tensor
  Ort::Value input_tensor = Ort::Value::CreateTensor<float>(allocator, input_data.data(), input_data.size(), input_shape.data(), input_shape.size());

  // 运行推理
  auto output_tensors = session.Run(Ort::RunOptions{nullptr}, &input_name, &input_tensor, 1, session.GetOutputNames(allocator), 1);

  // 输出结果
  float* output_data = output_tensors[0].GetTensorMutableData<float>();
  std::cout << "Output: " << output_data[0] << std::endl;

  return 0;
}

通过上述步骤和示例代码,您可以在 Python 和 C++ 环境下安装并使用 ONNX Runtime 进行模型推理。

相关推荐
自不量力的A同学3 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
Liekkas Kono7 分钟前
RapidOCR Python 贡献指南
开发语言·python·rapidocr
一枕眠秋雨>o<9 分钟前
从抽象到具象:TBE如何重构AI算子的编译哲学
人工智能
xiaobaibai15310 分钟前
决策引擎深度拆解:AdAgent 用 CoT+RL 实现营销自主化决策
大数据·人工智能
island131411 分钟前
CANN ops-nn 算子库深度解析:神经网络核心计算的硬件映射、Tiling 策略与算子融合机制
人工智能·深度学习·神经网络
冬奇Lab12 分钟前
一天一个开源项目(第14篇):CC Workflow Studio - 可视化AI工作流编辑器,让AI自动化更简单
人工智能·开源·编辑器
是小蟹呀^14 分钟前
从稀疏到自适应:人脸识别中稀疏表示的核心演进
人工智能·分类
张张努力变强14 分钟前
C++ STL string 类:常用接口 + auto + 范围 for全攻略,字符串操作效率拉满
开发语言·数据结构·c++·算法·stl
云边有个稻草人14 分钟前
CANN ops-nn:筑牢AIGC的神经网络算子算力底座
人工智能·神经网络·aigc·cann
island131414 分钟前
CANN Catlass 算子模板库深度解析:高性能 GEMM 架构、模板元编程与融合算子的显存管理策略
人工智能·神经网络·架构·智能路由器