前言

有项目需要用onnxruntime-gpu进行推理,原以为像windows一样在已经有cuda的情况下直接安装onnxruntime-gpu即可,却没想到这么麻烦,故分享此文帮助后来者。

环境

gpu计算型英伟达v100云服务器。
在选择安装系统时已经选择了最高版本如下:
Ubuntu20.04
cuda11.0.3
cudnn8.5.0
用命令行查看nvidia-smi:
在这里插入图片描述
可以看到确实已经安装了cuda。

报错记录

1.[W:onnxruntime:Default, onnxruntime_pybind_state.cc:541 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Please reference https://onnxruntime.ai/docs/reference/execution-providers/CUDA-ExecutionProvider.html#requirements to ensure all dependencies are met.
是直接使用以下命令安装导致的版本不兼容问题:

pip install onnxruntime-gpu

具体版本对应关系见下表:
在这里插入图片描述
因为cuda是11.0.3,所以只能用onnxruntime-gpu==1.8或者1.7来进行安装。

2.onnxruntime OSError: libcurand.so.10: cannot open shared object file: No such file or directory

这是因为腾讯云cuda安装的位置很怪,默认找不到它这个环境变量,需手动添加,下面我来演示一下如何手动添加。

解决

1.如果保持默认cuda11.0.3,那么运行如下安装命令:

pip install onnxruntime-gpu==1.8.0
或者
pip install onnxruntime-gpu==1.7.0

2.查找cuda文件目录:

find / -name "libcudart.so.11.0"

-name后面是文件名,根据需要替换,缺什么查什么,我这边显示它们在以下目录:
在这里插入图片描述
3.配置环境变量:

首先:

vi /etc/profile

然后按 i 切换输入模式,在文末添加多行环境变量:

export LD_LIBRARY_PATH=/usr/local/lib/python3.8/dist-packages/nvidia/cudnn/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib/python3.8/dist-packages/nvidia/cublas/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib/python3.8/dist-packages/nvidia/cuda_runtime/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib/python3.8/dist-packages/nvidia/cuda_nvrtc/lib:$LD_LIBRARY_PATH

目录位置请根据自己的修改,我这边是默认的,改完像下面这样:

在这里插入图片描述
按esc退出输入模式。按 : 输入wq保存退出。

然后生效:

source /etc/profile

输入以下命令确认环境变量生效:

echo $LD_LIBRARY_PATH

正确的话再运行框架创建cuda算子就不会提示报错了。

GitHub 加速计划 / on / onnxruntime
21
3
下载
microsoft/onnxruntime: 是一个用于运行各种机器学习模型的开源库。适合对机器学习和深度学习有兴趣的人,特别是在开发和部署机器学习模型时需要处理各种不同框架和算子的人。特点是支持多种机器学习框架和算子,包括 TensorFlow、PyTorch、Caffe 等,具有高性能和广泛的兼容性。
最近提交(Master分支:4 个月前 )
cff0ec52 The QNN HTP backend for MatMul is not stable on different versions and platforms. Disable the UT to avoid random failure. 5 小时前
5d215ff8 ### Description Fix bug in previous change where a failure during `SetupBackend` causes `ReleaseResources `to be called to clean up but does nothing because `backend_setup_completed_ ` is false. `backend_setup_completed_ ` _seems_ to now be redundant so removing it fixes the problem. ### Motivation and Context We are seeing crashes due to the log callback failing to be de-registered 6 小时前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐