事情本身不复杂,线索都在日志里。训练时报 cuDNN version incompatibility,环境里同时用 conda 装过 cudatoolkit、又用 pip 装过 nvidia-cudnn-cu12,两者版本不一致。
第一反应是「LD_LIBRARY_PATH 里优先加载了旧版本」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。conda 与 pip 两套包管理混装,库路径冲突。也可能是系统级 CUDA 与虚拟环境里的库版本不同。
少数情况下是升级框架后没有同步升级 cuDNN。
动手时先列出所有来源的 cuDNN 包
pip list | Select-String cudnn; conda list | Select-String cudnn
随后清掉 pip 侧的重复包,只保留一套
pip uninstall -y nvidia-cudnn-cu12
然后按框架要求重装匹配版本
pip install nvidia-cudnn-cu12==9.1.0.70
剩下的就是验证能否正常跑一次卷积
python -c "import torch;print(torch.backends.cudnn.version())"
白天有业务在跑,能验证的部分都压到了晚上做。
恢复的判定其实很直接。cudnn.version 输出与框架要求一致,训练不再报版本不兼容,卷积层速度恢复正常。
容易忽略的是,两套包管理器各自记着依赖,卸载一个另一个还会装回来,混装环境最好重建,而不是一次次手工对齐版本。这类问题最好一次改到位,反复小改反而容易把原因搅混。