ONNX模型推理 | ONNX Runtime 找不到 CUDA,推理只能用 CPU 时的解决方案

ONNX Runtime 相关推理代码:

		# runtime
        ort_session = onnxruntime.InferenceSession('yourmodel.onnx', providers=['CUDAExecutionProvider'])

        # double check is using GPU?
        print(ort_session.get_providers())

        # onnx 的输入是 numpy array 而非 tensor!(具体看你怎么转换的)    
        ort_inputs = {'input': numpy_input}

        ort_output = ort_session.run(['output'], ort_inputs)[0]
        # 将 onnx 输出的 tensor 转回 numpy 
        ort_output = torch.from_numpy(ort_output)

报错:

[E:onnxruntime:Default, provider_bridge_ort.cc:1548 TryGetProviderInfo_CUDA] /onnxruntime_src/onnxruntime/core/session/provider_bridge_ort.cc:1209 onnxruntime::Provider& onnxruntime::ProviderLibrary::Get() [ONNXRuntimeError] : 1 : FAIL : Failed to load library libonnxruntime_providers_cuda.so with error: libcublasLt.so.11: cannot open shared object file: No such file or directory

[W:onnxruntime:Default, onnxruntime_pybind_state.cc:861 CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Please reference https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirementsto ensure all dependencies are met.
['CPUExecutionProvider']

解决方案:

  1. 根据报错提供的链接 https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html 查找对应的 ONNX Runtime,CUDA 和 cuDNN 版本,我这里是 ONNX Runtime 1.17,CUDA 12.2 和 cuDNN 8.9.2

  2. 有两个坑
    我这里是 ONNX Runtime 1.17,CUDA 12.2 和 cuDNN 8.9.2

  3. 第一坑:对于 CUDA 12.2 的 ONNX Runtime 1.17 需要用以下命令下载才行,不能用一般的pip install onnxruntime 或 pip install onnxruntime-gpu,相关文档:https://onnxruntime.ai/docs/install/

pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/

  1. 第二个坑,下载 cuDNN 要从 archive 里找 https://developer.nvidia.com/rdp/cudnn-archive 不能下载 cuDNN 现在推荐的 cuDNN 9.0 ,下载老版本的 cuDNN 时可以参考 cuDNN 9.0 的下载命令 https://developer.nvidia.com/cudnn-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local

  2. 都下载好后,查看 onnxruntime,cuda 和 cudnn 三个版本的 bash 分别如下:

# 查看 onnxruntime 版本
python
Python 3.10.0 (default, Mar  3 2022, 09:58:08) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import onnxruntime
>>> print(onnxruntime.__version__)
# 输出 onnxruntime 版本
1.17.1

# 查看 cuda 版本
nvcc -V
# 输出  cuda 版本是 12.2
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Aug_15_22:02:13_PDT_2023
Cuda compilation tools, release 12.2, V12.2.140
Build cuda_12.2.r12.2/compiler.33191640_0

# 查看 cudnn 版本
apt-cache search cudnn
# 输出 cudnn 版本是 8.9.2.26
nvidia-cudnn - NVIDIA CUDA Deep Neural Network library (install script)
libcudnn8 - cuDNN runtime libraries
libcudnn8-dev - cuDNN development libraries and headers
libcudnn8-samples - cuDNN samples
cudnn-local-repo-ubuntu2204-8.9.2.26 - cudnn-local repository configuration files
  1. 此外可能还需要设置PATH、LD_LIBRARY_PATH

这是让onnxruntime找到cuda的关键一步。
操作如下:

export PATH=/usr/local/cuda/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

可以将上面的操作放到~/.bashrc中,然后使用source更新一下。

  1. 大功告成,重新运行代码时,同时出现 [‘CUDAExecutionProvider’, ‘CPUExecutionProvider’]

参考博客:https://zhuanlan.zhihu.com/p/492040015

模型转换参考:https://zhuanlan.zhihu.com/p/477743341

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值