本文详细记录如何在 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
python3 -c "import onnxruntime; print(onnxruntime.get_device())"
成功输出:
GPU
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 警告 | 模型中存在重复索引,但一般不会影响最终推理结果 |
✔️ 以上均不影响推理正确性和功能。
你已经成功完成:
.whl
并通过 Python 验证