ONNX Runtime加载CUDA执行提供者失败:libcurand.so.10找不到
解决onnxruntime-gpu无法加载libcurand.so.10的问题
问题根源
onnxruntime-gpu的预编译包依赖的CUDA库版本与你系统安装的CUDA 11.8不匹配——libcurand.so.10是CUDA 10.x系列的库,而CUDA 11.8提供的是libcurand.so.11,导致动态链接失败。
解决方案
方案1:安装对应CUDA 11.8的onnxruntime-gpu预编译包
onnxruntime针对不同CUDA版本提供了细分的PyPI包,直接安装适配CUDA 11.8的版本:
- 卸载现有包:
pip uninstall -y onnxruntime-gpu
- 安装对应CUDA 11.8的1.16.3版本(若存在):
pip install onnxruntime-gpu-cuda118==1.16.3
- 若1.16.3无cuda118变体,升级到支持该CUDA版本的高版本,比如1.17.3:
pip install onnxruntime-gpu-cuda118==1.17.3
方案2:从源码编译onnxruntime-gpu(适配CUDA 11.8)
如果必须使用1.16.3版本,可从源码编译,指定CUDA 11.8环境:
- 安装编译依赖:
sudo apt install cmake gcc g++ git
- 克隆源码并切换到1.16.3分支:
git clone --branch v1.16.3 https://github.com/microsoft/onnxruntime.git cd onnxruntime
- 编译并生成wheel包:
./build.sh --config Release --build_shared_lib --enable_pybind --cuda_home /usr/local/cuda-11.8 --cudnn_home /usr/local/cuda-11.8 --use_cuda --build_wheel
- 安装生成的wheel包:
pip install build/Linux/Release/dist/onnxruntime_gpu-*.whl
辅助验证与配置
- 确保LD_LIBRARY_PATH正确指向CUDA 11.8库路径:
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
可将上述命令添加到虚拟环境的激活脚本,确保每次启动环境自动生效:
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> /path/to/your/venv/bin/activate
- 验证CUDA和CuDNN安装正确性:
# 检查CUDA版本 nvcc --version # 检查CuDNN版本 cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
确保CuDNN版本与CUDA 11.8兼容(推荐8.6.x及以上版本)
3. 测试ONNX Runtime是否加载CUDA provider:
import onnxruntime as ort print(ort.get_available_providers())
正常输出应包含CUDAExecutionProvider
内容的提问来源于stack exchange,提问作者Abdelaziz Gomaa
相关产品推荐
相关产品推荐

