公司动态

[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失:CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案

📅 2026/7/17 2:11:09
[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失:CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案
[Bug已解决] libcudnn_engines_tensor_ir.so.9 缺失CUDA 13.0 版 PyTorch 找不到 cuDNN 引擎库解决方案一、报错长什么样你在 CUDA 13.0 的 PyTorch 上跑需要 cuDNN 的操作卷积、RNN、归一化等时可能遇到OSError: libcudnn_engines_tensor_ir.so.9: cannot open shared object file也就是官方描述的libcudnn_engines_tensor_ir.so.9 not included in the PyTorch based on CUDA 13.0libcudnn_engines_tensor_ir.so.9是cuDNN 9的一个「引擎库」engine library负责某些算子的具体实现尤其是用 Tensor IR 描述的那类引擎。当 PyTorch编译于 CUDA 13.0去dlopen它却发现文件不在 PyTorch 的lib目录里就报not found。本文讲清楚 cuDNN 9 的引擎库机制、为什么 CUDA 13.0 的 PyTorch 会缺这个文件、以及如何修复。二、cuDNN 9 的「引擎库」是什么cuDNN 8 及之前算子的实现都打包在单一的libcudnn.so里。cuDNN 9 改了架构把不同算子的「引擎」拆成多个独立.so如libcudnn_engines_tensor_ir.so.9、libcudnn_engines_...so.9等主库libcudnn.so.9在运行时会按需dlopen这些引擎库。好处按需加载、体积灵活。代价如果 PyTorch 打包时漏装了某个引擎.so运行时dlopen失败就报错。libcudnn_engines_tensor_ir.so.9就是 cuDNN 9 里用「Tensor IR」描述的一类引擎。PyTorch 基于 CUDA 13.0 的某些构建里这个文件没被打进 wheel于是缺它。三、为什么 CUDA 13.0 的 PyTorch 会缺打包遗漏PyTorch 的 CUDA 13.0 wheel 在打包 cuDNN 9 时漏了tensor_ir这个引擎.socuDNN 版本演进快CUDA 13 是新大版本配套的 cuDNN 9 子库结构在变动PyTorch 打包脚本可能没跟上动态链接路径即使文件存在若不在LD_LIBRARY_PATH或 PyTorch 的lib目录PyTorch 也找不到。四、可运行诊断缺哪个 cuDNN 库先确认 PyTorch 的 lib 目录里有哪些 cuDNN 文件import torch, os print(PyTorch, torch.__version__) print(编译 CUDA, torch.version.cuda) lib_dir os.path.join(os.path.dirname(torch.__file__), lib) if os.path.isdir(lib_dir): cus [f for f in os.listdir(lib_dir) if cudnn in f.lower()] print(目录中的 cuDNN 文件, cus) else: print(未找到 lib 目录)然后用ldd看 PyTorch 主库依赖的 cuDNNpython -c import torch; print(torch.__file__) ldd /path/to/torch/lib/libtorch_cuda.so | grep -i cudnn如果libcudnn_engines_tensor_ir.so.9 not found就坐实缺失。五、解决方案一装匹配的 cuDNN 9 并放到 lib 目录最直接从 NVIDIA 拿到 cuDNN 9 的tensor_ir引擎库放到 PyTorch 的lib目录或LD_LIBRARY_PATH# 假设你下载了 cuDNN 9 的包里面有 libcudnn_engines_tensor_ir.so.9 # 找到 PyTorch 的 lib 目录 TORCH_LIB$(python -c import torch,os;print(os.path.join(os.path.dirname(torch.__file__),lib))) # 复制缺失的引擎库进去 cp /path/to/libcudnn_engines_tensor_ir.so.9 $TORCH_LIB/或通过LD_LIBRARY_PATH指向 cuDNN 9 的安装目录export LD_LIBRARY_PATH/usr/local/cudnn9/lib:$LD_LIBRARY_PATH python your_script.py注意cuDNN 主版本必须与 PyTorch 期望的 9.x 一致跨小版本可能 ABI 不兼容。六、解决方案二用 pip 安装官方 cuDNN 包若提供NVIDIA 在 PyPI 上提供nvidia-cudnn-cu13之类的包能与 CUDA 13 的 PyTorch 配套。但注意它装到独立站点包目录可能不在 PyTorch 的lib搜索路径里需LD_LIBRARY_PATH指过去pip install nvidia-cudnn-cu13 # 找到它装哪 python -c import nvidia.cudnn; print(nvidia.cudnn.__file__) # 然后 export LD_LIBRARY_PATH$(python -c import nvidia.cudnn,os;print(os.path.dirname(nvidia.cudnn.__file__)))/lib:$LD_LIBRARY_PATH七、解决方案三退回成熟的 CUDA 12 cuDNN 8 组合如果你不需要 CUDA 13 专属特性最稳的是用CUDA 12.x cuDNN 8的 PyTorch打包成熟引擎库问题少pip install torch --index-url https://download.pytorch.org/whl/cu124cuDNN 8 是单libcudnn.so结构没有「引擎库缺失」这类 cuDNN 9 的拆分问题。八、解决方案四用 PyTorch 自带的 cuDNN避免系统 cuDNN 冲突PyTorch 通常会自带一份 cuDNN 在它的lib目录。确保运行时加载的是这份而不是系统的旧 cuDNN# 让 PyTorch 的 lib 目录优先级最高 export LD_LIBRARY_PATH$(python -c import torch,os;print(os.path.join(os.path.dirname(torch.__file__),lib))):$LD_LIBRARY_PATH python your_script.py避免 PyTorch 去ldconfig的系统路径加载到版本不对的libcudnn*.so.9。九、解决方案五升级 PyTorch 到补全 cuDNN 引擎库的版本libcudnn_engines_tensor_ir.so.9 not included是 CUDA 13.0 构建的打包遗漏PyTorch 后续版本会补上这个引擎库。查看并升级import torch print(PyTorch, torch.__version__)如果新版本的 wheel 里lib目录有了libcudnn_engines_tensor_ir.so.9直接升级即可根治。十、如何判断你踩的是同一条报错是libcudnn_engines_tensor_ir.so.9: cannot open shared object filePyTorch 编译于 CUDA 13.0cuDNN 9 架构跑卷积 / RNN / 归一化等需 cuDNN 的算子时报ldd显示该引擎库not found补上该.so或退回 cuDNN 8 后恢复。命中即说明是 cuDNN 9 引擎库打包缺失。十一、小结libcudnn_engines_tensor_ir.so.9 not included in the PyTorch based on CUDA 13.0是cuDNN 9 引擎库在 PyTorch CUDA 13 wheel 里被漏打包。应对从 cuDNN 9 包取该.so放到 PyTorch 的lib目录或LD_LIBRARY_PATH指向第五节用 PyPI 的nvidia-cudnn-cu13配套包 指路径第六节不需要 CUDA 13 就退回CUDA 12 cuDNN 8成熟组合第七节确保加载 PyTorch 自带的 cuDNN避免系统旧版冲突第八节升级到补全引擎库的 PyTorch 版本第九节。cuDNN 9 把引擎拆成多个.so提升了灵活性但也让「打包遗漏一个就崩」的风险变高。CUDA 13 是较新组合打包成熟度不如 CUDA 12。生产里求稳cuDNN 8 CUDA 12 仍是最省心的选择。