在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
...

解决方案概览

  1. 下载兼容CUDA 11.8的cuDNN v8.x
  2. 手动安装cuDNN库文件
  3. 修复符号链接问题
  4. 验证安装并配置环境

详细步骤

步骤1:下载cuDNN v8.x for CUDA 11.x

  1. 访问NVIDIA cuDNN Archive页面

  2. 选择 Download cuDNN v8.x.x for CUDA 11.x(推荐v8.9.7)

  3. 下载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 CUDA_HOME=/usr/local/cuda-11.8
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
# 在wsl环境下,最好卸载.profile文件中
# export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$CUDA_HOME/lib64:$LD_LIBRARY_PATH

使配置生效:

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.*'

解决方案

  1. 重新安装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/
    
  2. 确保解压路径正确

结语

通过本文的步骤,你应该已经成功在Ubuntu 24.04上安装了cuDNN v8.x.x并解决了libcudnn_cnn_infer.so.8缺失问题。关键点在于:

  1. 手动安装:使用Tar包而非Deb包
  2. 符号链接:解决ldconfig的"not a symbolic link"错误
  3. 环境配置:正确设置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'

资源链接

Ubuntu 24.04安装 cuDNN 后,可以通过以下方法验证安装是否成功: ### 检查 cuDNN 版本信息 运行以下命令来查看 cuDNN 的版本信息,以确认其是否被正确安装: ```bash cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 ``` 该命令会输出类似如下内容: ``` #define CUDNN_MAJOR 8 #define CUDNN_MINOR 9 #define CUDNN_PATCHLEVEL 7 ``` 这些宏定义表示当前安装cuDNN 主版本号、次版本号和补丁级别。如果能够看到这些信息,则说明 cuDNN 已经成功安装到系统中。 ### 编译并运行示例程序 NVIDIA 提供了 cuDNN 的示例程序,可以用于进一步验证其功能是否正常[^1]。以下是简单的步骤: 1. 下载 cuDNN 示例代码(通常包含在官方提供的 cuDNN 安装包中)。 2. 进入示例目录,并执行编译命令: ```bash make ``` 3. 运行生成的可执行文件: ```bash ./<example_executable_name> ``` 如果示例程序能够顺利编译并运行,且没有出现错误提示,则表明 cuDNN安装是成功的。 ### 使用 Python 验证(适用于深度学习框架) 如果使用 PyTorch 或 TensorFlow 等深度学习框架,也可以通过 Python 脚本来检查 cuDNN 是否可用: #### PyTorch 示例: ```python import torch # 检查 CUDAcuDNN 是否可用 print("CUDA available:", torch.cuda.is_available()) print("cuDNN enabled:", torch.backends.cudnn.enabled) ``` #### TensorFlow 示例: ```python from tensorflow.python.client import device_lib # 列出所有可用设备信息 print(device_lib.list_local_devices()) ``` 上述代码将输出与 CUDAcuDNN 相关的状态或设备信息,从而确认其是否正常工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值