cuDNN 简介
cuDNN(CUDA Deep Neural Network library)是由 NVIDIA 提供的一个 GPU 加速库,专门用于深度学习中的神经网络操作。cuDNN 提供了高度优化的实现,支持卷积、池化、归一化、激活函数以及 RNN(循环神经网络)等常见的神经网络操作。
cuDNN 的作用
- 加速深度学习:cuDNN 提供了高性能的 GPU 实现,可以大大加速深度学习模型的训练和推理过程。
- 简化开发:开发者可以使用 cuDNN 提供的高层次 API,避免手动优化底层 GPU 操作。
- 跨平台支持:cuDNN 可以在多种 NVIDIA GPU 硬件上运行,提供一致的性能和接口。
cuDNN 与 CUDA Toolkit 的关系
-
依赖关系:
- cuDNN 依赖 CUDA Toolkit:cuDNN 是构建在 CUDA 之上的高性能库,利用了 CUDA 提供的并行计算能力。因此,cuDNN 必须依赖于 CUDA Toolkit 才能运行。
- CUDA Toolkit:CUDA Toolkit 是 NVIDIA 提供的一整套工具和库,用于开发和运行 GPU 加速应用程序。它包括了 CUDA 编译器、CUDA 核心库(如 cuBLAS、cuFFT 等)以及开发工具(如 Nsight)等。
-
功能层次:
- CUDA Toolkit:提供了基础的 GPU 编程接口和核心库,用于实现广泛的并行计算任务。它是一个通用的编程平台,不仅限于深度学习。
- cuDNN:专注于深度学习中的神经网络操作,提供高度优化的实现。它基于 CUDA 提供的并行计算能力,进一步封装了常见的深度学习操作。
-
使用方式:
- CUDA Toolkit:开发者可以直接使用 CUDA 提供的 API 编写 GPU 程序,进行各种并行计算任务。
- cuDNN:开发者可以在深度学习框架(如 TensorFlow、PyTorch、Caffe 等)中使用 cuDNN 提供的 API,来加速神经网络的训练和推理。
下载 cnDNN
因为 cuDNN 版本的选择需要与 CUDA 驱动版本一致,所以在安装 cuDNN 之前,需要先确认目前安装的 CUDA 驱动版本,再选择对应 cuDNN 版本。具体参考:cuDNN Archive | NVIDIA Developer。
[root@gpu-server-001 ~]# nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:18:24_PDT_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0
从上面输出的结果来看,我们安装的 CUDA 版本为 V12.4.131
,所以 cuDNN 安装支持 CUDA 12 版本的即可。下载链接:cuDNN 9.3.0 Downloads | NVIDIA Developer,还可以通过此链接下载:Index of /compute/cudnn/redist。
安装 cuDNN
[root@gpu-server-001 ~]# wget https://developer.download.nvidia.com/compute/cudnn/9.3.0/local_installers/cudnn-local-repo-rhel9-9.3.0-1.0-1.x86_64.rpm
[root@gpu-server-001 ~]# rpm -i cudnn-local-repo-rhel9-9.3.0-1.0-1.x86_64.rpm
warning: cudnn-local-repo-rhel9-9.3.0-1.0-1.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 0bea2fe4: NOKEY
[root@gpu-server-001 ~]# dnf clean all
74 files removed
[root@gpu-server-001 ~]# dnf -y install cudnn-cuda-12
cuda-rhel9-x86_64 943 kB/s | 1.8 MB 00:01
cudnn-local-rhel9-9.3.0 2.4 MB/s | 4.1 kB 00:00
Docker CE Stable - x86_64 192 kB/s | 55 kB 00:00
Extra Packages for Enterprise Linux 9 - x86_64 13 MB/s | 22 MB 00:01
nvidia-container-toolkit 14 kB/s | 19 kB 00:01
Remi's Modular repository for Enterprise Linux 9 - x86_64 1.1 MB/s | 676 kB 00:00
Safe Remi's RPM repository for Enterprise Linux 9 - x86_64 1.2 MB/s | 1.0 MB 00:00
Rocky Linux 9 - BaseOS 2.2 MB/s | 2.3 MB 00:01
Rocky Linux 9 - AppStream 5.9 MB/s | 8.0 MB 00:01
Rocky Linux 9 - CRB 1.3 MB/s | 2.4 MB 00:01
Rocky Linux 9 - Extras 38 kB/s | 15 kB 00:00
Dependencies resolved.
================================================================================================================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================================================================================================================
Installing:
cudnn9-cuda-12 x86_64 9.3.0.75-1 cuda-rhel9-x86_64 7.2 k
Installing dependencies:
cudnn9-cuda-12-6 x86_64 9.3.0.75-1 cuda-rhel9-x86_64 7.3 k
libcudnn9-cuda-12 x86_64 9.3.0.75-1 cuda-rhel9-x86_64 550 M
libcudnn9-devel-cuda-12 x86_64 9.3.0.75-1 cuda-rhel9-x86_64 53 k
libcudnn9-static-cuda-12 x86_64 9.3.0.75-1 cuda-rhel9-x86_64 576 M
Transaction Summary
================================================================================================================================================================================================================================================================
Install 5 Packages
Total download size: 1.1 G
Installed size: 1.8 G
Downloading Packages:
(1/5): cudnn9-cuda-12-6-9.3.0.75-1.x86_64.rpm 8.6 kB/s | 7.3 kB 00:00
(2/5): cudnn9-cuda-12-9.3.0.75-1.x86_64.rpm 8.3 kB/s | 7.2 kB 00:00
(3/5): libcudnn9-devel-cuda-12-9.3.0.75-1.x86_64.rpm 202 kB/s | 53 kB 00:00
(4/5): libcudnn9-cuda-12-9.3.0.75-1.x86_64.rpm 10 MB/s | 550 MB 00:55
(5/5): libcudnn9-static-cuda-12-9.3.0.75-1.x86_64.rpm 9.5 MB/s | 576 MB 01:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 18 MB/s | 1.1 GB 01:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : libcudnn9-cuda-12-9.3.0.75-1.x86_64 1/5
Installing : libcudnn9-devel-cuda-12-9.3.0.75-1.x86_64 2/5
Installing : libcudnn9-static-cuda-12-9.3.0.75-1.x86_64 3/5
Installing : cudnn9-cuda-12-6-9.3.0.75-1.x86_64 4/5
Installing : cudnn9-cuda-12-9.3.0.75-1.x86_64 5/5
Running scriptlet: libcudnn9-devel-cuda-12-9.3.0.75-1.x86_64 5/5
Running scriptlet: cudnn9-cuda-12-9.3.0.75-1.x86_64 5/5
Verifying : cudnn9-cuda-12-6-9.3.0.75-1.x86_64 1/5
Verifying : cudnn9-cuda-12-9.3.0.75-1.x86_64 2/5
Verifying : libcudnn9-cuda-12-9.3.0.75-1.x86_64 3/5
Verifying : libcudnn9-devel-cuda-12-9.3.0.75-1.x86_64 4/5
Verifying : libcudnn9-static-cuda-12-9.3.0.75-1.x86_64 5/5
Installed:
cudnn9-cuda-12-9.3.0.75-1.x86_64 cudnn9-cuda-12-6-9.3.0.75-1.x86_64 libcudnn9-cuda-12-9.3.0.75-1.x86_64 libcudnn9-devel-cuda-12-9.3.0.75-1.x86_64 libcudnn9-static-cuda-12-9.3.0.75-1.x86_64
Complete!
cuDNN Docker 镜像
💡注意:cuDNN Docker 镜像本身不依赖宿主机安装的 CUDA Toolkit 和 cnDNN,只依赖宿主机安装的 NVIDIA Container Toolkit。
如果想使用 Rocky Linux 9 cuDNN Docker 镜像,可以从这里下载:nvidia/cuda Tags | Docker Hub,但注意考虑兼容性问题。比如:这里安装的显卡驱动是 550.107.02
,其对应兼容的 CUDA Toolkit 包是:CUDA 12.4 Update 1
,所以 cuDNN Docker 镜像也需要下载 nvidia/cuda:12.4.1-cudnn-runtime-rockylinux9
。
[root@gpu-server-001 ~]# docker pull nvidia/cuda:12.4.1-cudnn-runtime-rockylinux9
通过上述步骤,我们在 Rocky Linux 9 上成功安装了 cuDNN,现在可以充分利用 GPU 的计算能力跑深度学习框架了。
参考文献
[1] Installing cuDNN on Linux — NVIDIA cuDNN v9.3.0 documentation