刚开始玩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系统只要装了显卡对应的驱动理论上都可以使用)
1 | nvidia-smi |
可以得到电脑内的具体显卡型号:
上面其实就是你的硬件和软件信息,包括显卡的名称,规格,驱动版本,使用进程,已经左上角显示的支持的CUDA 版本(注意,这里显示的是你的显卡支持的CUDA版本,不是电脑的安装的CUDA版本!)
如果你之前从未主动装过CUDA甚至从未听说过CUDA,那你的环境99%没有装它(看似是个废话,但我当时就是没有想到TT)
如果你还想进一步检查是否安装,可以通过cmd输入这个命令
1 | nvcc -V |
如果显示下面这样说明已经安装了
那么问题来了,已知pytorch运行必须要CUDA,但我从未安装过CUDA,那我之前的整合包是如何运行的?
答:pytorch内置了CUDA的一些基本运行时依赖库,当你的环境中不存在CUDA时,就会调用它们
另外还请确认你环境中的pytorch版本以及想要升级的版本,这对后面安装对应版本的CUDA非常重要
可以进入你的Python环境,执行下面命令查看pytorch的对应版本
1 | import torch |
安装
首先你需要知道pyTorch的版本和对应需要的CUDA,这个网上也有很多资料,其中一种方式是可以直接看安装包的命名方式,通过一
下链接
但是,有一个非常重要的一点
CUDA12 并未出现在版本适配上,但在一些非官方的渠道上,开发人员表示最新的pyTorch是支持CUDA12的,只需要替换一些运行时文件即可,具体方法在下面适配pyTorch环节
更新torch的方式就不多说了,通过pip升级,非常方便
CUDA安装
接下来介绍CUDA的安装
首先到官网下载软件包,这里以win10系统为例
下完后就直接开始安装:
以下是安装时缓存文件的位置,随便放在一个空间足够的位置就行,但是注意这个目录会随着安装结束而删除
这里注意,由于CUDA的安装体积比较大,而且安装时我们往往已经具备一定的GPU 环境,所以建议还是自定义安装,按需安装即可
这里注意图中的Driver Component一般不要勾选,因为这涉及到显卡驱动,而显卡驱动我们一般都是独立升级(我是通过nvidia experience升级的)如果安装的CUDA版本不是最新的,大概率会出现旧驱动覆盖新驱动的情况,所以不建议勾选
可以打开CUDA下看具体的一些组件,像visual studio的组件,如果平时开发没用到,不需要勾选
安装中…
由于我的电脑没有安装VS,所以安装时有些依赖不会安装成功,但只要不影响使用就好
验证
可以cmd到以下目录,查看这些测试程序是否能跑通,以及查看CUDA版本是否正常
1 | cd DIR\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\demo_suite |
安装cuDNN
由于cuDNN只是一些依赖库文件,所以我们只需要下载指定版本的文件,然后覆盖CUDA路径下的指定目录即可
注意这里需要注册nvidia 账号,好在只需要邮箱就可以创建成功…
这是下载地址
下载后会有如下文件夹,覆盖到CUDA的目录即可
适配pyTorch
这里主要是给CUDA12的适配,pyTorch想用CUDA12,需要在pyTorch的依赖库目录中用CUDA中的文件进行替换
torch的库目录一般在对应的python lib目录下(或者virtualenv 的lib目录下)
类似
1 | ${venv}\Lib\site-packages\torch\lib |
需要替换的文件如下图所示
前三个是CUDA的文件,后7个是cuDNN的文件,应该很容易就能在CUDA的目录下找到
安装成功后就可以享受CUDA12 带来的高速体验了!!!