pytorch2.0训练报错:Could not load library libcudnn_cnn_train.so.8,Unable to register cuDNN factory解决办法

文章讲述了用户在升级PyTorch至2.0及以上版本时遇到的cudnn版本冲突问题,介绍了可能的原因、检查方法以及提供了解决方案,包括避免外部环境配置、降级PyTorch版本或手动下载无nvidia库版本的.whl文件。
部署运行你感兴趣的模型镜像

1.主要问题:

最近服务器挂掉了,涉及到了深度学习环境的重新搭建,现在的pytorch版本已经更新到2.0以上了,以前还是用的1.9,安装完成后遇到了这个问题,无法训练模型。
报错信息:
1.
Could not load library libcudnn_cnn_train.so.8. Error: /data/Anaconda3/envs/torch2.1/bin/…/lib/libcudnn_cnn_train.so.8: symbol _ZN5cudnn3cnn34layerNormFwd_execute_internal_implERKNS_7backend11VariantPackEP11CUstream_stRNS0_18LayerNormFwdParamsERNS1_12OperationSetERP12cudnnContextmb, version libcudnn_cnn_infer.so.8 not defined in file libcudnn_cnn_infer.so.8 with link time reference

: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered

遇到这个问题时,我们大部分都是nvidia-smi,nvcc -V这俩命令走起来,结果一看都是对的,然后又去环境下面输入python,打印torch和gpu是否可用torch.cuda.is_available(),结果发现都是对的,结果是True,一脸懵。
在这里插入图片描述

2.版本说明

显卡型号:RTX4090
cuda版本:11.8
cudnn版本:8.9.0
驱动版本:535.129.03
在这里插入图片描述
不同的显卡和具体的安装配置,参考nvidia官网,注意一点就是版本对应。

3.问题产生的原因

安装完anaconda后,创建虚拟环境,并使用pip install torch安装torch版本,在安装的过程中,提示的torch版本为2.1,并随之而来的是安装了很多带nvidia-cudnn的东西,这东西可以理解为根据当前的torch版本适配的cudnn,2.0以上是默认安装带cuda和cudnn驱动的这些库
在这里插入图片描述
在这里插入图片描述
这里就需要注意了,实际上,我们通常自己就会去官网下载cuda和cudnn,例如,我已经配置好了cuda11.8和cudnn8.9.0,并且已经配置好了环境变量,但是2.0以上torch就好像给我们省略了,在安装torch的时候,虚拟环境下又下载了一遍cudnn,导致和外面配置好的cudnn冲突,而torch2.0以下的版本就不会下载这些nvidia的库,并且2.0以下的安装完成后就可以正常训练。

4.解决办法

给出3种解决办法:
(1)不在外面配置cuda和cudnn,也就是不再去配置环境变量,这稍微显得很不适应,并且每次新建环境都需要重新在新的环境安装,很冗余,不是很推荐;
(2)下载torch2.0以下的版本,直接使用pip install torch==1.9.0,这样最快,而且也不是所有的代码都需要2.0以上的版本,这个根据自己的情况使用,如果已经下载了2.1,需要卸载2.1并且还需要把2.1附带的那些cudnn的库全部卸载掉,最好去虚拟环境的lib下找到这些库,给他删掉!如果怕删不干净,直接把环境删掉,新建一个干净的环境再搞,否则就算安装了1.9还是会报错,已经测试过。
(3)如果坚持要2.0以上的torch版本,到这个地址下去下载不带nvidia库版本的torch的whl,区别在于名字不一样,很容易找到:
在这里插入图片描述
带nvidia的cudnn版本是这样的,后面有cudnn的名称,可不能下载错了:
在这里插入图片描述
手动下载下来之后,使用pip install *.whl安装就行了,然后再在这个地址里面下载好torchvision和torchaudio,这俩都很小,一并下载最好,pip install也可以,但是不好适配版本,给出的适配版本如下:
torch对应的torchaudio:
在这里插入图片描述
torch对应的torchvision:
在这里插入图片描述
如果版本不对应会报其他错误:

RuntimeError: Couldn't load custom C++ ops. This can happen if your PyTorch and torchvision versions are incompatible, or if you had errors while compiling torchvision from source. For further information on the compatible versions, check https://github.com/pytorch/vision#installation for the compatibility matrix. Please check your PyTorch version with torch.__version__ and your torchvision version with torchvision.__version__ and verify if they are compatible, and if not 
please reinstall torchvision so that it matches your PyTorch install.
RuntimeError: GET was unable to find an engine to execute this computation

这些都是同样的问题,一个是torch2.0以上和torch的其他库版本不对应,还有其他的一些环境报错问题,没有及时保存下来,可以评论,一起加油。

5.参考

[1] https://blog.youkuaiyun.com/shiwanghualuo/article/details/122860521
[2] https://pytorch.org/audio/main/installation.html
[3] https://blog.youkuaiyun.com/wangmou211/article/details/134595135

您可能感兴趣的与本文相关的镜像

PyTorch 2.9

PyTorch 2.9

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>我们正在处理一个关于CUDA cuDNN库加载错误的问题。用户遇到了错误信息:"Could not load library libcudnn_cnn_train.so.8 undefined symbol cudnnPooling4dBackward version libcudnn_ops_train.so.8"。根据提供的引用,我们可以总结出以下可能的原因和解决方法。 首先,错误信息表明在加载`libcudnn_cnn_train.so.8`时,遇到了一个未定义的符号`cudnnPooling4dBackward`(注意:用户提供的错误信息中写的是`cudnnPooling4dBackward`,但通常cuDNN中的函数名可能是`cudnnPoolingBackward`,不过我们以用户提供的为准)。这个符号在`libcudnn_ops_train.so.8`中定义,但链接时找不到。 根据引用[1][2][3][4]的分析,常见原因包括: 1. cuDNN库版本不匹配(例如,安装的cuDNN版本与PyTorch或TensorFlow等框架要求的版本不一致)。 2. 多个cuDNN版本冲突(例如,系统全局安装的cuDNN与虚拟环境中安装的cuDNN冲突)。 3. 虚拟环境中缺少必要的cuDNN库文件。 解决方案通常包括: 1. 确保安装的cuDNN版本与深度学习框架要求的版本匹配。 2. 检查环境变量(如`LD_LIBRARY_PATH`)是否指向正确的cuDNN库路径。 3. 在虚拟环境中,如果存在冲突的cuDNN安装,可以尝试卸载虚拟环境中的cuDNN包(如`nvidia-cudnn-cu12`),让框架使用系统安装的cuDNN(如引用[4]所述)。 4. 重新安装匹配的cuDNN。 具体步骤: ### 步骤1: 确认cuDNN版本 首先,检查当前安装的cuDNN版本。在终端中运行: ```bash cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 ``` 或者(取决于安装位置): ```bash cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 ``` 如果cuDNN版本为8.x,则输出可能如下: ``` #define CUDNN_MAJOR 8 #define CUDNN_MINOR 6 #define CUDNN_PATCHLEVEL 0 ``` ### 步骤2: 检查PyTorch或TensorFlow的cuDNN要求 确保安装的PyTorch或TensorFlow版本与cuDNN版本兼容。例如,PyTorch 2.0+通常要求cuDNN 8.x。 ### 步骤3: 检查环境变量 确保`LD_LIBRARY_PATH`包含cuDNN库的路径。例如: ```bash echo $LD_LIBRARY_PATH ``` 应该包含类似`/usr/local/cuda/lib64`或`/usr/lib/x86_64-linux-gnu`的路径。如果没有,可以临时设置: ```bash export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH ``` 然后再次运行程序。 ### 步骤4: 处理虚拟环境中的cuDNN(如果使用虚拟环境) 如果使用虚拟环境(如conda),并且通过conda安装了cuDNN(例如`nvidia-cudnn-cu12`),则可能与系统安装的cuDNN冲突。尝试卸载虚拟环境中的cuDNN包: ```bash pip uninstall nvidia-cudnn-cu12 ``` 然后,确保系统安装的cuDNN路径在`LD_LIBRARY_PATH`中。 ### 步骤5: 重新安装cuDNN 如果上述步骤无效,考虑重新安装cuDNN。从NVIDIA官网下载与CUDA版本匹配的cuDNN,并按照官方文档安装。 ### 步骤6: 验证安装 安装后,运行一个简单的cuDNN测试程序或重新运行你的深度学习代码,看是否解决问题。 ### 总结 该错误通常由cuDNN版本不匹配或冲突引起。优先考虑卸载虚拟环境中的cuDNN包,使用系统安装的cuDNN。如果问题依旧,检查并安装匹配的cuDNN版本。 §§相关问题§§ 1. 如何检查系统中安装的CUDA版本? 2. 如何安装指定版本的cuDNN? 3. 深度学习框架(如PyTorch、TensorFlow)与CUDA/cuDNN的版本对应关系如何查找? 4. 环境变量`LD_LIBRARY_PATH`的作用是什么?如何正确设置?</think>### CUDA cuDNN库加载错误解决方案 根据您遇到的错误信息`Could not load library libcudnn_cnn_train.so.8 undefined symbol cudnnPooling4dBackward version libcudnn_ops_train.so.8`,结合引用内容分析,这是典型的cuDNN库版本冲突或安装不完整导致的符号未定义问题。以下是系统性的解决步骤: --- ### 1. **问题根本原因分析** - **库版本冲突**:系统全局安装的cuDNN与虚拟环境中安装的cuDNN版本不一致(引用[3][4]) - **符号未定义**:cuDNN动态链接库(`.so`文件)内部存在缺失或损坏的符号(引用[1][2]) - **环境路径混乱**:虚拟环境错误加载了系统路径下的cuDNN库(引用[3]) --- ### 2. **解决方案步骤** #### ✅ 步骤1:清理冲突的cuDNN安装(推荐优先尝试) ```bash # 在虚拟环境中卸载冲突的cuDNN包 pip uninstall nvidia-cudnn-cu12 -y ``` - **原理**:虚拟环境中的cuDNN与系统全局安装的cuDNN冲突(引用[4]) - **效果**:强制使用系统全局安装的cuDNN版本 #### ✅ 步骤2:验证系统cuDNN安装 ```bash # 检查系统cuDNN版本 cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 ``` - **期望输出**: ``` #define CUDNN_MAJOR 8 #define CUDNN_MINOR 6 #define CUDNN_PATCHLEVEL 0 ``` - **异常处理**:若未安装,需从[NVIDIA cuDNN官网](https://developer.nvidia.com/cudnn)下载匹配版本 #### ✅ 步骤3:设置正确的库加载路径 ```bash # 在虚拟环境中设置环境变量 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH # 永久生效(写入~/.bashrc) echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` - **关键点**:确保优先加载系统CUDA路径下的cuDNN库(引用[3]) #### ✅ 步骤4:验证PyTorchcuDNN兼容性 ```python # Python环境检查脚本 import torch print(f"PyTorch版本: {torch.__version__}") print(f"CUDA可用: {torch.cuda.is_available()}") print(f"cuDNN版本: {torch.backends.cudnn.version()}") ``` - **预期输出**:cuDNN版本应与系统安装版本一致(如8860) #### ✅ 步骤5:重新安装PyTorch(可选) ```bash # 指定与系统CUDA匹配的PyTorch版本 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 ``` --- ### 3. **预防措施** 1. **避免混合安装**:不要在虚拟环境中重复安装cuDNN(引用[4]) 2. **版本一致性**:保持系统CUDA、cuDNNPyTorch版本严格匹配 - 参考[PyTorch官方版本矩阵](https://pytorch.org/get-started/previous-versions/) 3. **环境隔离**:使用`conda`管理环境时,优先通过`conda install cudatoolkit`安装CUDA --- ### 相关问题 1. 如何检查系统中已安装的CUDA和cuDNN版本? 2. PyTorch不同版本对CUDA/cuDNN的要求有哪些差异? 3. 虚拟环境中CUDA库加载优先级如何设置? 4. 深度学习框架出现"undefined symbol"错误的通用排查方法是什么?
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值