从源码编译 ONNX Runtime GPU 1.18.2 并验证 CUDA 推理成功

文章目录

  • 从源码编译 ONNX Runtime GPU 1.18.2 并验证 CUDA 推理成功【实测环境+完整步骤】
    • ✅ 环境信息(实测成功)
    • 第一步:获取源码
    • ️ 第二步:编译命令
      • 参数说明(重点)
    • 第三步:安装构建好的 `.whl`
    • ✅ 第四步:验证是否成功启用 GPU
      • 方法 1:命令行快速验证
      • 方法 2:加载模型并查看执行设备
    • ⚠️ 常见警告说明(可忽略)
    • ✅ 总结


从源码编译 ONNX Runtime GPU 1.18.2 并验证 CUDA 推理成功【实测环境+完整步骤】

本文详细记录如何在 Ubuntu 上从源码编译并部署支持 GPU 推理的 ONNX Runtime 1.18.2,验证通过 superpoint.onnx 模型运行成功,适合有自定义需求、希望获得最大兼容性或优化性能的开发者参考。


✅ 环境信息(实测成功)

项目 版本/配置
操作系统 Ubuntu 20.04 LTS
Python 3.8.10
GCC 9.4.0
CUDA Toolkit 12.1 (nvcc -V)
GPU 驱动版本 535.183.01 (nvidia-smi)
GPU 型号 NVIDIA GeForce RTX 3070
ONNX Runtime v1.18.2(源码编译,GPU 支持)

第一步:获取源码

git clone --recursive https://github.com/microsoft/onnxruntime.git
cd onnxruntime
git checkout v1.18.2
git submodule update --init --recursive

建议固定版本 tag,避免主分支频繁变动导致构建失败。


️ 第二步:编译命令

使用 build.sh 脚本一次性完成依赖拉取 + 编译 + 打包:

./build.sh --config Release \
  --update --build --parallel \
  --build_shared_lib --build_wheel \
  --use_cuda \
  --cuda_home /usr/local/cuda \
  --cudnn_home /usr/lib/x86_64-linux-gnu \
  --use_preinstalled_eigen \
  --eigen_path /usr/local/include/eigen3 \
  --parallel 4

参数说明(重点)

参数 说明
--use_cuda 启用 GPU CUDA 推理后端
--build_shared_lib 构建共享库(用于 C/C++ 开发者)
--build_wheel 构建 Python 的 .whl 安装包
--use_preinstalled_eigen 使用本地 Eigen,不重复下载
--parallel 并行构建线程数(建议与 CPU 核心数一致)

编译时间约 10~25 分钟,取决于机器性能。


第三步:安装构建好的 .whl

构建完成后,你会在目录下看到如下文件:

ls build/Linux/Release/dist/
onnxruntime_gpu-1.18.2-cp38-cp38-linux_x86_64.whl

安装它:

pip install ./build/Linux/Release/dist/onnxruntime_gpu-1.18.2*.whl

✅ 第四步:验证是否成功启用 GPU

方法 1:命令行快速验证

python3 -c "import onnxruntime; print(onnxruntime.get_device())"

成功输出:

GPU

方法 2:加载模型并查看执行设备

import onnxruntime as ort

sess = ort.InferenceSession("/home/damon/slampro/Rover-SLAM/onnxmodel/superpoint.onnx", providers=['CUDAExecutionProvider'])
print("Providers:", sess.get_providers())

输出示例:

Providers: ['CUDAExecutionProvider', 'CPUExecutionProvider']

说明:已启用 CUDA GPU 推理,CPU 为备选执行器。


⚠️ 常见警告说明(可忽略)

编译或加载时可能会看到类似:

Memcpy nodes are added to the graph...
Some nodes were not assigned to the preferred execution providers...
ScatterND with reduction=='none'...

这些是 ONNX Runtime 的性能提示或模型警告,如:

提示类型 含义
Memcpy 警告 CPU ↔ GPU 数据迁移较多,可能影响性能
节点未分配到 CUDA 某些 shape 相关运算默认由 CPU 执行(为提升整体效率)
ScatterND 警告 模型中存在重复索引,但一般不会影响最终推理结果

✔️ 以上均不影响推理正确性和功能。


✅ 总结

你已经成功完成:

  • ✅ ONNX Runtime v1.18.2 源码构建(启用 CUDA)
  • ✅ 安装 .whl 并通过 Python 验证
  • ✅ 正确加载并运行 SuperPoint 模型
  • ✅ 成功启用 GPU 推理加速

你可能感兴趣的:(SLAM基础,Deep+SLAM,ubuntu)