• 正文
  • 相关推荐
申请入驻 产业图谱

AI | Ubuntu 26.04 安装cuDNN避坑指南:让GPU深度学习加速跑起来

09/07 07:50
122
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

感谢各位看友来访,更多最新技术专栏文章尽在作者『 全栈工程师修炼指南』星球,加入一起学习交流吧!

3.cuDNN 库安装

什么是cuDNN?

cuDNN(CUDA® Deep Neural Network library)是由英伟达NVIDIA)开发的是一款 GPU 加速的深度神经网络基础算子库,专门用于加速深度神经网络(DNN)的训练和推断过程,cuDNN 提供了高度优化的实现(如前向和后向卷积、attention、matmul、池化和归一化),利用 NVIDIA GPU 的并行计算能力来加速神经网络的运行。
官网地址:https://developer.nvidia.com/cudnn

功能和特性:

卷积操作优化:cuDNN 实现了高度优化的卷积操作,包括常用的卷积、反卷积和池化等操作。这些优化能够显著加速卷积神经网络(CNN)的训练和推断过程。

RNN 和 LSTM 支持:cuDNN 提供了对循环神经网络(RNN)和长短期记忆网络(LSTM)等序列模型的优化支持,包括各种变体和层级。

标准神经网络层优化:除了卷积和循环层,cuDNN 还优化了神经网络的标准层,如全连接层和激活函数(如ReLU)。

高级特性支持:cuDNN 提供了一些高级特性,如半精度浮点计算(FP16)支持,这对于在保持高精度的同时显著提高训练和推断速度尤为重要。

跨平台和接口支持:cuDNN 可以在多个操作系统上运行,并支持多种深度学习框架的接口,如 ‎TensorFlow、‎PyTorch、‎Caffe 等,使得开发者可以利用其优化功能而无需深入底层编程。

cuDNN 如何工作?

    加速学习:cuDNN提供内核,只要有意义就以Tensor Cores为目标,为计算绑定操作提供最佳性能。它提供了为给定的问题大小选择正确的内核的方法。融合支持:cuDNN支持计算绑定和内存绑定操作的融合。常见的通用融合模式通常通过运行时内核生成来实现。专门的融合模式与预先编写的内核进行了优化。表达运算图API:用户将计算定义为张量上的运算图。cuDNN库具有直接的C API和开源C++前端,以方便使用。大多数用户选择前端作为cuDNN的入口点

总体来说,cuDNN 是在 NVIDIA GPU 上进行深度学习计算时不可或缺的库之一,通过提供高效的算法实现和并行计算优化,显著提高了深度神经网络训练和推断的速度和效率。

[!Question] cuDNN 与 CUDA 有何关系?
cuDNN 是基于 CUDA 构建的,因此需要 CUDA 才能运行。CUDA 提供了 GPU 并行计算的底层基础,而 cuDNN 则提供了针对深度学习应用的优化库。

简单的说,CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来,这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。

安装步骤

前置条件:在进行cuDNN安装之前,需要先安装 NVIDIA 显卡驱动程序及其适用于你当前系统的 CUDA 工具包,否则无法进行cuDNN的安装。

对于 cuDNN 安装的方式有多种方式,可使用使用特定于发行版的软件包(RPM 和 Debian 软件包)以及压缩包,或者 Conda 、Pip、Docker 容器等方式安装。

步骤 01.使用浏览器访问 cuDNN Downloads择对应版本进行下载,由于官网还没 Ubuntu 22.04 此处使用 26.04 的来替代。

步骤 02.根据选择的版本提示的命令脚本进行安装部署,例如单独安装CUDA 12特定的软件包。

cd /opt/soft/nvidia

# 先安装必要的依赖包 zlib1g
sudo apt-get install zlib1g

# 下载deb本地安装包
wget https://developer.download.nvidia.com/compute/cudnn/9.2.0/local_installers/cudnn-local-repo-ubuntu2204-9.2.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.2.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.2.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update

# sudo apt-get -y install cudnn
# 老前辈则建议根据需要安装指定版本库而不是完整的 cudnn
# 将会同时安装下列软件:
  # cudnn9 cudnn9-cuda-12 cudnn9-cuda-12-5 libcudnn9-cuda-12 libcudnn9-dev-cuda-12 libcudnn9-samples libcudnn9-static-cuda-12

# 若要安装CUDA 12特定的软件包,请执行
sudo apt-get -y install cudnn9-cuda-12

# 查看 cudnn 本地软件库 
cat /etc/apt/sources.list.d/cudnn-local-ubuntu2204-9.2.0.list
deb [signed-by=/usr/share/keyrings/cudnn-local-8F8E147C-keyring.gpg] file:///var/cudnn-local-repo-ubuntu2204-9.2.0 /

温馨提示:若要下载 cudnn 其它历史版本,请访问 cudnn-archive]下载页面,选择对应版本进行下载安装即可。

步骤 03.另外,我们也可以选择单独安装runtime library、developer library 和 code samples,分别对应于libcudnn9libcudnn9-devlibcudnn9-doc

## 1. Install the runtime library.
## sudo apt-get install libcudnn9=9.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn9=9.2.1.18-1+cuda11.8
## 2. Install the developer library.
## sudo apt-get install libcudnn9-dev=9.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn9-dev=9.2.1.18-1+cuda11.8
## 3. Install the code samples.
## sudo apt-get install libcudnn9-samples=9.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn9-samples=9.2.1.18-1+cuda11.8

步骤 04.最后安装完毕后,使用sudo dpkg -l | grep cudnn命令验证是否安装成功。

$ sudo dpkg -l | grep cudnn
ii  cudnn-local-repo-ubuntu2204-9.2.0                  1.0-1                                   amd64        cudnn-local repository configuration files
ii  cudnn9-cuda-12                                     9.2.0.82-1                              amd64        NVIDIA cuDNN for CUDA 12
ii  cudnn9-cuda-12-5                                   9.2.0.82-1                              amd64        NVIDIA cuDNN for CUDA 12.5
ii  libcudnn9-cuda-12                                  9.2.0.82-1                              amd64        cuDNN runtime libraries for CUDA 12.5
ii  libcudnn9-dev-cuda-12                              9.2.0.82-1                              amd64        cuDNN development headers and symlinks for CUDA 12.5
ii  libcudnn9-static-cuda-12                           9.2.0.82-1                              amd64        cuDNN static libraries for CUDA 12.5

最后,不知道有没有细心看有从 NVIDIA cuDNN 下载界面图中查看到除了 cuDNN 库,还在 Github
中提供 cuDNN Frontend 一个 前端 API,那它们究竟有何差异呢?

简单来说,cuDNN 库本身是“发动机”,而 cuDNN Frontend 则是让你更轻松地驾驶这辆跑车的“方向盘”和“自动变速箱”。它们之间是底层实现与上层便利接口的关系,核心差异在于抽象层次、易用性和功能定位。

为了让你更清晰地理解,我把它们的核心差异整理成了下面的表格:

特性维度 cuDNN 库 (后端 API) cuDNN Frontend (前端 API)
本质 核心计算库:包含卷积、注意力等所有深度学习优化的GPU内核实现 开源封装层:对后端C语言API的现代化C++和Python封装,旨在提升开发者体验
风格 底层 C API:更接近硬件,功能最全,但代码冗长,需手动管理大量描述符和内存 图 API (Graph API):采用声明式编程,构建计算图(cudnn_frontend::graph::Graph),自动推断中间张量形状,代码更简洁
易用性与功能 学习曲线陡峭:需要深入理解cuDNN内部机制。 开箱即用:内置了自动调优 (autotuning)、错误过滤 (errata filters) 等高级功能,帮你省去重复造轮子的时间
语言支持 C API。 C++ (Header-Only) 和 Python 绑定,且Python包可直接通过pip install nvidia-cudnn-frontend安装
开源与生态系统 闭源核心库(二进制分发)。 完全开源 (MIT协议),不仅包含封装,还直接开源了大量高性能内核(如Flash Attention、MoE融合算子),你可以学习、修改甚至贡献代码

由上可知,作为绝大多数AI开发者可直接选择 cudnn-frontend,它能让你用更少的代码、更优雅的方式实现高性能计算,只有在在极少数情况下,比如你需要使用某些未被Frontend API覆盖的、极其古老的“遗留固定功能” 时,才需要考虑直接使用更底层的后端API。

特别注意:由于没安装 Python 暂时无法测试 CUDA 13 版本中是否能使用 cudnn9-cuda-12 库,等到下一章节 Python 环境安装后进行再进行测试。

 

温馨提示:若文章代码块中存在乱码或不能复制,请联系作者,也可通过文末的阅读原文链接,加入知识星球中阅读,原文链接:https://articles.zsxq.com/id_8no2nl5cm9dh.html

学习:作者知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,持续更新包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

相关推荐