以下是在 Ubuntu 22.04 系统(CUDA 12.9)中,通过本地单个 DEB 包安装 cuDNN 9.13.0 的完整步骤,核心包含 GPG 密钥配置与包安装验证,确保每一步可执行。
一、安装前核心检查(必做)
确保系统已满足基础条件,避免安装失败:
- 验证 CUDA 版本:打开终端执行命令,确认当前 CUDA 版本为 12.9(需与 cuDNN 9.13.0 兼容)。
若提示 “nvcc: command not found”,需先配置 CUDA 环境变量(执行nvcc -V # 或 nvcc --versionsource /usr/local/cuda-12.9/bin/activate,或重启终端)。 - 确认 CUDA 安装路径:默认路径为
/usr/local/cuda-12.9,后续步骤需基于此路径操作。 - 准备本地 DEB 包:确保已下载 cuDNN 9.13.0 的单个 DEB 包(命名格式通常为
cudnn-local-repo-ubuntu2204-9.13.0_1.0-1_amd64.deb),并记录其保存路径(如~/Downloads/,即 “下载” 文件夹)。
下载 cuDNN 本地 deb 安装包
wget https://developer.download.nvidia.com/compute/cudnn/9.13.0/local_installers/cudnn-local-repo-ubuntu2204-9.13.0_1.0-1_amd64.deb
- 作用:通过
wget工具下载 Ubuntu 22.04 对应的 cuDNN 9.13.0 本地仓库包(deb 格式)。 - 若下载失败:可直接复制链接到浏览器下载,再将 deb 包传到 Ubuntu 系统(如用
scp命令)。
二、安装步骤(分 4 步)
步骤 1:安装本地 DEB 包(导入软件源)
通过 dpkg 命令安装本地 DEB 包,该包的作用是将 cuDNN 的官方软件源添加到系统中(而非直接安装 cuDNN 库文件)。
- 打开终端(快捷键
Ctrl+Alt+T),切换到 DEB 包所在目录(以 “下载” 文件夹为例):cd ~/Downloads/ - 执行安装命令(将文件名替换为你的实际 DEB 包名):
输入系统密码(输入时无明文显示,输完按回车),等待命令执行完成(无报错即成功)。sudo dpkg -i cudnn-local-repo-ubuntu2204-9.13.0_1.0-1_amd64.deb
- 作用:
dpkg -i用于安装本地 deb 包,此步骤会在/var/目录下创建 cuDNN 本地仓库(含包索引和密钥)。 - 若报错 “依赖缺失”:执行
sudo apt -f install修复依赖后,重新执行此命令。
步骤 2:导入 GPG 密钥(验证软件源合法性)
cuDNN 软件源需通过 GPG 密钥验证,确保后续下载的文件未被篡改。密钥文件已通过步骤 1 的 DEB 包解压到系统目录,直接导入即可:
- 执行密钥导入命令(路径与 CUDA 版本绑定,12.9 对应路径如下):
命令中sudo cp /var/cudnn-local-repo-ubuntu2204-9.13.0/cudnn-*-keyring.gpg /usr/share/keyrings/*为通配符,会自动匹配密钥文件名(无需手动修改)。 - 更新系统软件源缓存,使新添加的 cuDNN 源生效:
等待更新完成(若提示 “命中” 包含sudo apt updatecudnn-local-repo的源,说明密钥导入成功)。
步骤 3:安装 cuDNN 库文件(核心步骤)
通过 apt 命令从已添加的软件源中,安装 cuDNN 9.13.0 的核心库(含开发文件、运行时文件等,会自动适配 CUDA 12.9):
执行以下命令:
sudo apt-get -y install cudnn9-cuda-12
- 执行过程中会提示 “是否继续”,输入
Y并回车,等待安装完成。 - 版本严格匹配:CUDA 版本与 cuDNN 安装包必须对应(如 CUDA 12 不能装
cudnn9-cuda-13),否则深度学习框架会报错 “cuDNN 版本不兼容”。 - 密钥路径正确性:若执行
cp命令时提示 “文件不存在”,需先执行ls /var/cudnn-local-repo-ubuntu2204-9.13.0/查看实际的密钥文件名(格式为cudnn-xxxx-keyring.gpg),再修改cp命令中的文件名。 - 权限问题:所有指令需加
sudo(管理员权限),否则会提示 “权限不足”。
步骤 4:验证安装(确保功能正常)
(一)安装完成后,通过以下命令验证 cuDNN 是否正确安装:
首先搜索 cudnn_version.h 的实际位置
cuDNN 的头文件可能安装在系统默认目录(非 /usr/local/cuda/include),用 find 命令全局搜索:
sudo find / -name "cudnn_version.h" 2>/dev/null
- 若搜索到结果(例如可能在/usr/include/x86_64-linux-gnu/cudnn_version.h):直接查看该文件即可验证版本,例如:
# 假设搜索到路径为 /usr/include/cudnn_version.h cat /usr/include/x86_64-linux-gnu/cudnn_version.h | grep CUDNN_MAJOR -A 2
若输出类似以下内容,说明安装成功:
#define CUDNN_MAJOR 9
#define CUDNN_MINOR 13
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
- 输出中的
9.13.0需与你安装的 cuDNN 版本一致。(二) 检查库文件版本(
libcudnn.so)cuDNN 的共享库文件(
libcudnn.so)也包含版本信息,通过ldconfig命令验证通过 ldconfig 检查系统识别的 cuDNN 库 sudo ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn
(三)通过 cuDNN 官方示例代码验证是否安装成功,步骤如下:
- 复制示例代码到用户目录(避免权限问题):
uDNN 9.13.0 采用了不同的命名规则,可按以下步骤精准排查:
步骤 1:列出本地仓库中所有 cuDNN 相关包(关键)
直接查看 cuDNN 本地仓库中包含的所有包,确认是否有样本包及其真实名称
# 列出本地 cuDNN 仓库中的所有包(注意替换路径中的版本号为实际目录名) ls /var/cudnn-local-repo-ubuntu2204-9.13.0/ | grep .deb预期输出:会显示仓库中所有可用的 deb 包,其中可能包含样本包(名称可能类似
cudnn9-samples_9.13.0-1+cuda12.0_amd64.deb或cudnn-samples-9.13_xxx.deb)。步骤 2:根据实际包名手动安装样本包
假设步骤 1 中找到的样本包名为
cudnn9-samples_9.13.0-1+cuda12.0_amd64.deb(请替换为你实际看到的文件名),直接安装该 deb 包# 进入仓库目录 cd /var/cudnn-local-repo-ubuntu2204-9.13.0/ # 安装找到的样本包(替换为实际文件名) sudo dpkg -i libcudnn9-samples_9.13.0.50-1_all.debcp -r /usr/src/cudnn_samples_v9/ ~/file - 切换到示例代码的 “MNIST 手写数字识别” 目录(最常用的验证案例):
cd ~/file/cudnn_samples_v9/mnistCUDNN/ - 编译示例代码(依赖 CUDA 编译器 nvcc):
首先要安装
FreeImage库的头文件(FreeImage.h),这是编译 cuDNN 样本程序mnistCUDNN必需的图像处理库。在 Ubuntu 终端中执行以下命令安装所需依赖
sudo apt-get install libfreeimage3 libfreeimage-devlibfreeimage3是运行时库文件,libfreeimage-dev包含开发所需的头文件(包括FreeImage.h)和静态库。执行以下编译命令:make clean && make - 运行编译后的可执行文件,验证运行时功能:
成功标志:终端输出最后一行显示./mnistCUDNNTest passed!,表示 cuDNN 已完全适配 CUDA 12.9 并可正常使用。
三、常见问题解决
-
安装后
nvcc -V无输出:
原因是 CUDA 环境变量未配置,执行以下命令添加环境变量(临时生效,永久生效需写入~/.bashrc):export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH - “Test failed”:检查 CUDA 版本是否为 12.9(cuDNN 9.13.0 仅兼容特定 CUDA 版本),若版本不匹配,需重新安装对应版本的 CUDA 或 cuDNN。

1007

被折叠的 条评论
为什么被折叠?



