CUDA及cudnn初探及安装方法

刚开始玩 stable diffusion, 但用的整合包，很多训练知识都只是一知半解，现学现用，倒也是能炼出一些自己想要的作品。但是最近了解到升级 pyTorch 和 xformer 之后可以极大提高训练 lora 的速度，这不由得让我产生了想升级的念头（刚到手的 4070 怎能没有榨干它的冲动），于是，开始了踩坑之路 —— 其实也就是标题。

升级 Pytorch 之前，首先需要检查你的CUDA和cuDNN版本，大部分显卡支持的 cuda 都是 11，目前绝大多数 SD-webui 默认安装的 pytorch 也都是支持 cuda11 的版本，所以不需要改动。但是如果你的显卡是 40 系，那大概率支持 CUDA12，虽说正常使用 CUDA11 也没有关系，但CUDA12 能大幅提高显卡的计算效率，因此，我是推荐能升 12 就升 12。那怎么判断自己电脑内装的是 CUDA11 还是 CUDA12 呢？cuDNN 又是什么东西？
我一开始就有这样的问题，甚至一度认为自己装的就是 CUDA12，后来查了一遍资料才发现事实并非如此。

简单概念

首先你要知道 CUDA 和 cuDNN 是什么。具体的细节其实我也是一知半解，但是我们还是要有一个大致的概念，起码要知道是什么，干什么，怎么用。根据官方文档解释：

The NVIDIA® CUDA® Toolkit provides a comprehensive development environment for C and C++ developers building GPU-accelerated applications. With the CUDA Toolkit, you can develop, optimize, and deploy your applications on GPU-accelerated embedded systems, desktop workstations, enterprise data centers, cloud-based platforms and HPC supercomputers. The toolkit includes GPU-accelerated libraries, debugging and optimization tools, a C/C++ compiler, and a runtime library to deploy your application.
Using built-in capabilities for distributing computations across multi-GPU configurations, scientists and researchers can develop applications that scale from single GPU workstations to cloud installations with thousands of GPUs.

翻译过来简单解释就是一套开发框架，帮助我们更好调用 GPU 的计算能力进行顶层开发
而 cuDNN 的官方解释是：

The NVIDIA® CUDA Deep Neural Network (cuDNN) library is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers. Deep learning researchers and framework developers worldwide rely on cuDNN for high-performance GPU acceleration.
Deep learning researchers and framework developers worldwide rely on cuDNN for high-performance GPU acceleration. It allows them to focus on training neural networks and developing software applications rather than spending time on low-level GPU performance tuning. cuDNN accelerates widely used deep learning frameworks, including Chainer, Keras, MATLAB, MxNet, PaddlePaddle, PyTorch, and TensorFlow.

翻译过来简单解释就是深度学习框架的依赖库，用于加速神经网络训练

而 pyTorch 则是基于 python 的深度学习框架，可见使用了 cuDNN 之后可以加速训练速度。而特别要留意 pyTorch 和 CUDA 的版本一定要一致，不然兼容问题可能导致程序运行出错，这个下面会提到

前置准备

首先，你要先确定本机支持的 CUDA 版本，可以通过 cmd 输入如下命令查看（这是 nvidia 的命令行，所以 linux 系统只要装了显卡对应的驱动理论上都可以使用）

Copy
nvidia-smi

可以得到电脑内的具体显卡型号：

上面其实就是你的硬件和软件信息，包括显卡的名称，规格，驱动版本，使用进程，已经左上角显示的支持的 CUDA 版本（注意，这里显示的是你的显卡支持的 CUDA 版本，不是电脑的安装的 CUDA 版本！）

如果你之前从未主动装过 CUDA 甚至从未听说过 CUDA，那你的环境 99% 没有装它（看似是个废话，但我当时就是没有想到 TT）
如果你还想进一步检查是否安装，可以通过 cmd 输入这个命令

Copy
nvcc -V

如果显示下面这样说明已经安装了

那么问题来了，已知 pytorch 运行必须要 CUDA，但我从未安装过 CUDA，那我之前的整合包是如何运行的？
答：pytorch 内置了 CUDA 的一些基本运行时依赖库，当你的环境中不存在 CUDA 时，就会调用它们

另外还请确认你环境中的 pytorch 版本以及想要升级的版本，这对后面安装对应版本的 CUDA 非常重要
可以进入你的 Python 环境，执行下面命令查看 pytorch 的对应版本

Copy
import torch
# 输出pytorch的版本
print(torch.__version__)
# 输出torch引用的cuda的版本，注意如果你的环境没有安装cuda，这里也会输出，不过指的是torch内置的cuda运行时的版本
print(torch.version.cuda)
# 输出torch 引用的cudnn版本，具体规则和上述cuda一致
print(torch.backends.cudnn.version())

安装

首先你需要知道 pyTorch 的版本和对应需要的 CUDA, 这个网上也有很多资料，其中一种方式是可以直接看安装包的命名方式，通过一
下链接

但是，有一个非常重要的一点
CUDA12 并未出现在版本适配上，但在一些非官方的渠道上，开发人员表示最新的 pyTorch 是支持 CUDA12 的，只需要替换一些运行时文件即可，具体方法在下面适配 pyTorch 环节

更新 torch 的方式就不多说了，通过 pip 升级，非常方便

CUDA 安装

接下来介绍 CUDA 的安装

首先到官网下载软件包，这里以 win10 系统为例

下完后就直接开始安装：

以下是安装时缓存文件的位置，随便放在一个空间足够的位置就行，但是注意这个目录会随着安装结束而删除

这里注意，由于 CUDA 的安装体积比较大，而且安装时我们往往已经具备一定的 GPU 环境，所以建议还是自定义安装，按需安装即可

这里注意图中的 Driver Component 一般不要勾选，因为这涉及到显卡驱动，而显卡驱动我们一般都是独立升级（我是通过 nvidia experience 升级的）如果安装的 CUDA 版本不是最新的，大概率会出现旧驱动覆盖新驱动的情况，所以不建议勾选

可以打开 CUDA 下看具体的一些组件，像 visual studio 的组件，如果平时开发没用到，不需要勾选

安装中...

由于我的电脑没有安装 VS，所以安装时有些依赖不会安装成功，但只要不影响使用就好

验证
可以 cmd 到以下目录，查看这些测试程序是否能跑通，以及查看 CUDA 版本是否正常

Copy
cd DIR\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite
bandwidthTest.exe
deviceQuery.exe

安装 cuDNN

由于 cuDNN 只是一些依赖库文件，所以我们只需要下载指定版本的文件，然后覆盖 CUDA 路径下的指定目录即可
注意这里需要注册 nvidia 账号，好在只需要邮箱就可以创建成功...
这是下载地址

下载后会有如下文件夹，覆盖到 CUDA 的目录即可

适配 pyTorch

这里主要是给 CUDA12 的适配，pyTorch 想用 CUDA12，需要在 pyTorch 的依赖库目录中用 CUDA 中的文件进行替换

torch 的库目录一般在对应的 python lib 目录下（或者 virtualenv 的 lib 目录下）
类似

Copy
${venv}\Lib\site-packages\torch\lib

需要替换的文件如下图所示

前三个是 CUDA 的文件，后 7 个是 cuDNN 的文件，应该很容易就能在 CUDA 的目录下找到

安装成功后就可以享受 CUDA12 带来的高速体验了！！！

引用

CUDA 官方文档
cuDNN 官方文档