在Ubuntu 24.04上安装cuDNN v8.x.x兼容CUDA 11.8
在Ubuntu 24.04上安装cuDNN v8.x.x兼容CUDA 11.8
当你的项目需要特定版本的cuDNN库(如libcudnn_cnn_infer.so.8),但系统已安装更高版本时该怎么办?本文将手把手教你解决这一常见问题。
问题背景
在深度学习开发中,我们经常遇到这样的场景:项目代码需要特定版本的cuDNN库(如libcudnn_cnn_infer.so.8
),但系统已安装了更高版本(如cuDNN 9)。Ubuntu 24.04作为较新的Linux发行版,官方可能未明确支持旧版cuDNN,但通过本文方法,你可以安全地在Ubuntu 24.04上安装并使用cuDNN v8.x.x。
典型报错示例:
Could not load library libcudnn_cnn_infer.so.8. Error: libnvrtc.so: cannot open shared object file: No such file or directory
/sbin/ldconfig.real: /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link
...
解决方案概览
- 下载兼容CUDA 11.8的cuDNN v8.x
- 手动安装cuDNN库文件
- 修复符号链接问题
- 验证安装并配置环境
详细步骤
步骤1:下载cuDNN v8.x for CUDA 11.x
选择 Download cuDNN v8.x.x for CUDA 11.x(推荐v8.9.7)
下载Tar包格式(非Deb包):
cudnn-linux-x86_64-8.x.x.x_cuda11-archive.tar.xz
步骤2:手动安装cuDNN库
# 解压下载的cuDNN包
tar -xvf cudnn-linux-x86_64-8.x.x.x_cuda11-archive.tar.xz
# 复制头文件到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
# 复制库文件到CUDA目录
sudo cp cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/
# 设置文件权限
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
# 更新库链接(可能会报错)
sudo ldconfig # 刷新动态库缓存
步骤3:修复符号链接问题
执行sudo ldconfig
时常见的"not a symbolic link"错误,可以通过创建符号链接解决:
cd /usr/local/cuda-11.8/lib64
# 为每个cuDNN库创建符号链接
sudo ln -sf libcudnn_ops_train.so.8.* libcudnn_ops_train.so.8
sudo ln -sf libcudnn_adv_infer.so.8.* libcudnn_adv_infer.so.8
sudo ln -sf libcudnn.so.8.* libcudnn.so.8
sudo ln -sf libcudnn_cnn_infer.so.8.* libcudnn_cnn_infer.so.8
sudo ln -sf libcudnn_cnn_train.so.8.* libcudnn_cnn_train.so.8
sudo ln -sf libcudnn_adv_train.so.8.* libcudnn_adv_train.so.8
sudo ln -sf libcudnn_ops_infer.so.8.* libcudnn_ops_infer.so.8
# 刷新库缓存
sudo ldconfig
步骤4:验证安装
# 检查目标库是否存在
ls /usr/local/cuda-11.8/lib64/libcudnn_cnn_infer.so.8*
# 查看cuDNN版本
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
正常输出应包含:
#define CUDNN_MAJOR 8
#define CUDNN_MINOR x
#define CUDNN_PATCHLEVEL x
步骤5:配置环境变量
在~/.bashrc
中添加以下内容:
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-11.8
使配置生效:
source ~/.bashrc
常见问题解决方案
1. GLIBC不兼容错误
如果遇到类似错误:
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found
解决方案:
- 下载更新的cuDNN v8子版本(如v8.9.7)
- 临时解决方案(不推荐):
sudo ln -s /usr/local/cuda-11.8/lib64/libcudnn_cnn_infer.so.9 /usr/local/cuda-11.8/lib64/libcudnn_cnn_infer.so.8 sudo ldconfig
2. 找不到库文件
如果执行ln -sf
时提示找不到文件:
ln: failed to access 'libcudnn.so.8.*'
解决方案:
重新安装cuDNN:
sudo rm /usr/local/cuda-11.8/lib64/libcudnn* tar -xf cudnn-linux-x86_64-8.x.x.x_cuda11-archive.tar.xz sudo cp cudnn-*-archive/lib/* /usr/local/cuda-11.8/lib64/
确保解压路径正确
结语
通过本文的步骤,你应该已经成功在Ubuntu 24.04上安装了cuDNN v8.x.x并解决了libcudnn_cnn_infer.so.8
缺失问题。关键点在于:
- 手动安装:使用Tar包而非Deb包
- 符号链接:解决ldconfig的"not a symbolic link"错误
- 环境配置:正确设置LD_LIBRARY_PATH
深度学习环境配置虽复杂,但掌握这些技巧后,你将能轻松应对各种版本兼容性问题。如果有其他问题,欢迎在评论区留言讨论!
实用命令速查:
# 查看CUDA版本
nvcc --version
# 查看cuDNN版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 检查库文件链接
ls -l /usr/local/cuda/lib64 | grep 'libcudnn.*\.so\.8'
资源链接: