【全文修订版】
安装 CUDA 13 后 ONNX Runtime 报错
“Failed to create CUDAExecutionProvider” 的完整修复方案
——附 CMD & PowerShell 一键脚本


NVIDIA CUDA 13.0 发布:新特性与快捷更新安装全解析

CUDA 13.0 适配的 cuDNN 9.11 发布:网页内容速览

1️⃣ 问题现象速览

  • 触发场景:CUDA 13.0(驱动从 5xx.xx → 580.88)
  • 报错全文
    [0;93m2025-08-21 15:23:25.4121592 [W:onnxruntime:Default, onnxruntime_pybind_state.cc:993 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.[m
  • 影响范围:所有基于 CUDA 12.x 的虚拟环境(ONNX Runtime、旧版 TensorFlow、PyTorch 等)。

ONNX Runtime GPU 安装要求页面


2️⃣ 背景:为什么 CUDA 13 会“炸”

维度 升级前 升级后
驱动 支持 CUDA 12.x 支持 CUDA 13.0
系统 PATH 指向 v12.x\bin 自动指向 v13.0\bin
旧虚拟环境 依赖 CUDA 12.x DLL 找不到对应版本 → 126

NVIDIA 安装器不会删除旧版本,只把新版本路径插到最前,因此系统里往往共存:

  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.0
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9
  • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8

3️⃣ 根因定位(一句话)

ONNX Runtime 仅绑定 CUDA 12.x;系统优先加载 CUDA 13.0 的 DLL,导致初始化失败。


4️⃣ 解决思路(零污染方案)

目标 做法
不降级CUDA和驱动 保留 CUDA 13.0
补运行时 安装 CUDA 12.8 Runtime + cuDNN 9.x(或CUDA 12.9)
环境隔离 仅对当前 .venv 追加 PATH

5️⃣ 前置下载

组件 版本 下载
CUDA Toolkit 12.8 Runtime https://developer.nvidia.com/cuda-12-8-0-download-archive
cuDNN 9.x for CUDA 12.x https://developer.nvidia.com/rdp/cudnn-download

安装 CUDA 时 只勾选 Runtime;cuDNN 解压备用。

安装 ONNX 运行时 GPU (CUDA 12.x)官方文档


6️⃣ 实操:虚拟环境级 PATH 修改

6.1 CMD 用户

1. 编辑激活脚本
打开 .venv\Scripts\activate.bat,在文件末尾追加:

:: 追加 CUDA 12.8 与 cuDNN 12.8 的 bin 目录
set "PATH=C:\Program Files\NVIDIA\CUDNN\v9.8\bin\12.8;%PATH%"
set "PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\bin;%PATH%"

若要再添加其他路径,可按需追加。

2. 重新激活并验证
最好退出IDE然后重新打开,避免因IDE缓存延迟等导致的无效(已实践确会有影响)!

deactivate
.venv\Scripts\activate

where cudart64_120.dll
where cudnn64_9.dll
python -c "import onnxruntime as ort; print(ort.get_available_providers())"


6.2 PowerShell 用户

1. 编辑激活脚本
打开 .venv\Scripts\Activate.ps1,末尾追加:

# 追加 CUDA 12.8 与 cuDNN 12.8 的 bin 目录
$env:PATH = "C:\Program Files\NVIDIA\CUDNN\v9.8\bin\12.8;$env:PATH"
$env:PATH = "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.8\bin;$env:PATH"

若要再添加其他路径,可按需追加。

2. 重新激活并验证
最好退出IDE然后重新打开,避免因IDE缓存延迟等导致的无效(已实践确会有影响)!

deactivate
.venv\Scripts\Activate.ps1

Get-Command cudart64_120.dll
Get-Command cudnn64_9.dll
python -c "import onnxruntime as ort; print(ort.get_available_providers())"


7️⃣ 验证结果

['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider']

出现 CUDAExecutionProvider 即修复完成。

尝试运行项目,报错已修复:

怎么使用嵌套虚拟环境实现项目部署之virtualenv嵌套conda绕开安装环境检测实现.venv部署facefusion_python虚拟环境嵌套-CSDN博客


8️⃣ 一句话总结

升级 CUDA 前,先核对依赖矩阵;用虚拟环境脚本隔离 PATH,即可让 CUDA 13 驱动与 CUDA 12 运行时和平共处。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐