可用提供者: ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'] *************** EP Error *************** EP Error 'providers' and 'provider_options' should be the same length if both are given. when using ['CUDAExecutionProvider', 'TensorrtExecutionProvider'] Falling back to ['CUDAExecutionProvider', 'CPUExecutionProvider'] and retrying. **************************************** 2025-06-11 12:54:25.3047392 [E:onnxruntime:Default, provider_bridge_ort.cc:1992 onnxruntime::TryGetProviderInfo_CUDA] D:\a\_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1637 onnxruntime::ProviderLibrary::Get [ONNXRuntimeError] : 1 : FAIL : LoadLibrary failed with error 126 "" when trying to load "D:\Program Files\python39\lib\site-packages\onnxruntime\capi\onnxruntime_providers_cuda.dll" 2025-06-11 12:54:25.3087942 [W:onnxruntime:Default, onnxruntime_pybind_state.cc:965 onnxruntime::python::CreateExecutionProviderInstance] Failed to create CUDAExecutionProvider. Require cuDNN 9.* and CUDA 12.*, and the latest MSVC runtime. Please install all dependencies as mentioned in the GPU requirements page (https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements), make sure they're in the PATH, and that your GPU is supported.
时间: 2025-06-11 15:09:22 浏览: 56
<think>嗯,我现在需要解决用户关于ONNXRuntime使用CUDAExecutionProvider时出现的库加载失败问题。首先,我应该仔细分析用户提供的引用内容,并结合用户提到的具体错误信息来找出可能的解决方案。引用[1]提到CUDA_PATH环境变量已设置,但CUDA无法加载。错误提示建议检查CUDA和cuDNN的安装版本是否符合要求,以及路径是否正确。用户还提到使用的是cuDNN9.*和CUDA12.*。这里需要注意ONNXRuntime的版本兼容性,因为不同版本的ONNXRuntime支持的CUDA和cuDNN版本可能不同。用户需要对照官方文档的表格确认匹配的版本组合。引用[2]中的错误代码126表明无法加载onnxruntime_providers_cuda.dll,通常是依赖的DLL文件缺失或版本不匹配导致。用户已经在CPU上运行,但无法使用GPU。可能的解决步骤包括检查onnxruntime-gpu版本是否正确,以及CUDA是否安装正确。nvcc-V命令可以验证CUDA的安装。此外,需要确保相关DLL路径在环境变量PATH中,尤其是CUDA的bin目录。引用[3]展示了一段Java代码加载ONNX模型,可能对理解用户的问题背景帮助不大,但可能说明用户在使用特定模型时遇到问题,但重点还是环境配置问题。接下来,用户的问题具体指向cuDNN9.*和CUDA12.*。需要查证ONNXRuntime是否支持这样的组合。根据官方文档,CUDA12.x通常需要cuDNN8.9.3或更高版本,而用户提到的cuDNN9.*可能是较新版本,但需要注意ONNXRuntime对cuDNN版本的兼容范围。例如,onnxruntime-gpu1.15版本对应CUDA11.8和cuDNN8.5,而1.16之后可能支持CUDA12。因此用户需要安装对应ONNXRuntime版本的CUDA/cuDNN组合,而不是随意搭配。另外,错误126可能由MSVC运行时库缺失引起,用户需要安装对应的VisualStudioC++Redistributable版本。比如,针对VS2019的VC_redist.x64.exe可能必须安装。此外,路径中的空格或特殊字符也可能导致问题,需检查PATH设置。用户可能已经安装多个CUDA版本,导致路径冲突,应通过NVCC-V和wherecudart64_*.dll确认实际使用的版本。同时,cuDNN的文件必须正确复制到CUDA安装目录下的对应子文件夹(bin,include,lib),否则相关DLL无法被找到。最后,建议用户分步骤验证:安装匹配的onnxruntime-gpu、安装正确CUDA/cuDNN、添加PATH变量、安装MSVC依赖项,最后重启系统使变更生效。通过简单代码示例验证CUDA是否被调用,如创建带CUDAExecutionProvider的InferenceSession,观察日志输出。</think>
根据您描述的ONNXRuntime CUDAExecutionProvider错误 (LoadLibrary error 126, CUDA 12.*, cuDNN 9.*),以下是系统级解决方案和验证步骤:
### 📌 核心问题分析
1. **错误126的本质**
Windows系统错误代码126表示**依赖库缺失或版本冲突**,通常由以下原因导致:
* ONNXRuntime版本与CUDA/cuDNN版本不匹配
* cuDNN文件未正确部署到CUDA目录
* MSVC运行库缺失(如vc_redist.x64.exe)
* 环境变量`PATH`未包含CUDA的`bin`路径
2. **版本兼容性要求**
根据[ONNXRuntime官方文档](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements):
| ONNXRuntime-gpu 版本 | CUDA 版本 | cuDNN 版本 | MSVC 要求 |
|------------------------|-----------|-------------------|----------------|
| **>=1.17.0** | **12.x** | **>=8.9.1** | **VS2022** |
| 1.15.x - 1.16.x | 11.x | 8.5.0 | VS2019 |
⚠️ **您的环境关键问题**:
cuDNN 9.* **仅兼容ONNXRuntime v1.17+**,且需要搭配**CUDA 12.3+** 和 **Visual Studio 2022**运行时
---
### 🔧 解决方案分步指南
#### ▶ 步骤1:验证CUDA安装
```powershell
nvcc --version # 必须返回12.x版本
where cudart64_*.dll # 确认在CUDA\bin路径下
```
#### ▶ 步骤2:强制同步cuDNN文件
1. 从[NVIDIA cuDNN下载页](https://developer.nvidia.com/cudnn)获取 **cuDNN v8.9.7+**(与CUDA 12.x兼容)
2. 将下载包内以下文件**覆盖**到CUDA目录:
```
cudnn-windows-x86_64-8.x.x.x_cuda12-archive\bin\* → C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin
cudnn-windows-x86_64-8.x.x.x_cuda12-archive\include\* → ...\CUDA\v12.x\include
cudnn-windows-x86_64-8.x.x.x_cuda12-archive\lib\* → ...\CUDA\v12.x\lib\x64
```
#### ▶ 步骤3:安装MSVC运行库
👉 **下载并安装**最新版 [Visual Studio 2022 Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe)
#### ▶ 步骤4:配置系统PATH
```powershell
# 管理员权限执行
setx /M PATH "%PATH%;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x\bin"
# 重启终端/IDE生效
```
#### ▶ 步骤5:重新安装ONNXRuntime
```bash
pip uninstall -y onnxruntime onnxruntime-gpu
pip install onnxruntime-gpu==1.17.1 # 指定兼容版本
```
---
### ✅ 验证CUDA是否生效
```python
import onnxruntime as ort
# 创建CUDA Session检查
cuda_session = ort.InferenceSession("model.onnx", providers=['CUDAExecutionProvider'])
print(cuda_session.get_providers()) # 应输出['CUDAExecutionProvider', 'CPUExecutionProvider']
```
### ⚠️ 仍失败时的进阶排查
1. **DLL依赖检查**
使用工具 [Dependency Walker](https://www.dependencywalker.com/) 打开 `onnxruntime_providers_cuda.dll`
- 标记为**红色**的缺失DLL即问题根源
- 常见缺失:`cudnn_cnn_infer64_8.dll`, `cublas64_12.dll`
2. **硬件兼容性验证**
```python
from onnxruntime.capi import _pybind_state as C
print(C.get_available_providers()) # 无CUDA时表示驱动不兼容
```
3. **强制加载日志**
启用环境变量获取详细错误:
```powershell
set ORT_LOG_LEVEL=VERBOSE
python your_script.py
```
> 📌 **最终建议**:当CUDA 12.*配合cuDNN 9.*使用时,必须选择 **ONNXRuntime v1.17+** 并确保VS2022运行库安装。旧版ONNXRT会直接忽略cuDNN 9.x导致错误126[^1][^2]。
---
### 💎 最佳实践总结
| 组件 | 推荐版本组合 | 验证命令 |
|---------------|---------------------------|-----------------------------|
| **ONNXRuntime** | 1.17.1 | `pip show onnxruntime-gpu` |
| **CUDA** | 12.3 / 12.4 | `nvcc -V` |
| **cuDNN** | 8.9.7 (for CUDA 12.x) | `where cudnn64_8.dll` |
| **MSVC** | VS2022 v14.37+ | 检查系统已安装程序列表 |
---
阅读全文
相关推荐


















