科研萌新,本科期间的学习一直有用cuda进行pytorch和tensorflow相关代码的编写。然而一直都是用的windows上的固定版本的cuda,对于其配置过程中的原理也是一知半解,也不知道该怎么选择对应的版本。
今天趁着刚刚进组的功夫,对自己申请到的gpu环境进行一下配置,在这里记录一下具体的配置过程,和一些算不上心得的心得。
主要参考的大佬文章,先放在前面:
cuda和cudatoolkit-CSDN博客
【多版本cuda自由切换】在ubuntu上安装多个版本的CUDA,并且可以随时切换cuda-11.3//cuda-11.8//cuda-11.6//cuda-11.2_ubuntu切换cuda-CSDN博客 https://zhuanlan.zhihu.com/p/633473214
cuda和pytorch的版本选择
对于在linux上配置cuda,有三个地方需要关注版本:显卡驱动,cuda和pytorch。
查看显卡驱动适配的cuda
显卡驱动一般就是英伟达的驱动,和gpu是绑定的。显卡的架构决定了能安装的驱动类型,这在你或者你老板购入gpu的那一刻起就不会再变了,因此是要首先考虑的。访问英伟达官网https://developer.nvidia.com/cuda-gpus,看看你的显卡是什么架构的,以及这个架构的显卡支持什么版本的cuda。
以A100为例,可以看到可以看到A100的架构是Ampere
在上面这张图中,可以看到Ampere架构支持的cuda版本是11.0-12.2。事实上,当你输入nvidia-smi时,右上角就显示了你显卡支持cuda的最高版本。如果与预期不符,说明你该更新显卡驱动了,在这里不做展开。
查看项目所使用的pytorch版本
这里以stable-diffusion为例。在使用conda创建好官方环境后,检查pytorch版本,可以看到其使用的pytorch版本是1.11.0
有各种各样的方法查看,在这里不展开了
根据pytorch版本和显卡驱动支持版本确定最终选择的cuda版本
cuda作为显卡驱动和pytorch的中间部分,是可以灵活变化的。因此我们要做的就是根据你想要部署的项目的pytorch版本以及你GPU能支持的cuda版本,选择合适的cuda版本。pytorch对应cuda版本在这里查询:Previous PyTorch Versions | PyTorch
还是以stable-diffusion所需的pytorch1.11.0为例,pytorch把官方的安装方式都写好了
可以看到,pytorch1.11.0只支持cuda10.2,11.3。如果使用的是别的版本的cuda,可能会有各种bug。
已知我们的GPU支持的cuda版本是11.0-12.2,和pytorch支持的版本取交集,最后我们就知道了,只能使用11.3版本的cuda
cuda下载
下载cuda安装包
题外话:查看我的系统是ubuntu还是centos
lsb_release -a
如果这玩意没安装:
CentOS或Red Hat系统通常包含 /etc/redhat-release 文件。
Ubuntu系统则包含 /etc/lsb-release 文件
NVIDIA的显卡驱动与CUDA的版本并不是严格的一一对应关系,CUDA实际上也只是一个工具包,我们可以根据自己的需求进行安装,即可以安装多个CUDA版本。同时CUDNN是一个SDK,专门用于神经网络的加速包,它与CUDA也没有严格的一一对应关系,可以选择多个版本的CUDNN进行安装。虽然说不是严格的对应,不过还是要服从大版本的对应,即安装之前查看GPU驱动版本与CUDA版本的对应关系,选择对应的版本进行安装,避免不兼容而报错的错误。——来自知乎大佬
CUDA Toolkit Archive | NVIDIA Developer在这里选择我们要的安装。通过前面的步骤,已经知道我们要的是11.3的cuda了。
在这里选好,会给你一个命令,复制到terminal里面直接就能安装了,非常简单。
配置cuda环境变量
在/root/.bashrc末尾加入这些环境变量,完事别忘了source一下。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
当pytorch调用cuda时,会根据系统环境变量找到/usr/local/cuda。我们只需要把不同的版本进行软连接到cuda这个环境变量上,就可以实现根据不同项目要求快速切换cuda版本了。
查看cuda目前链接在哪个版本:
ls -l /usr/local/cuda
删除已经存在的软链
rm -rf cuda
重新建立软链
sudo ln -s /usr/local/cuda-11.3 /usr/local/cuda
一顿操作,输入nvcc -V,可以看到我们成功了
测试一下
保存以下代码到一个py文件中,然后运行。如果一切顺利,说明你的环境ok了
import torch
print(torch.__version__) # 查看torch版本
print(torch.cuda.is_available()) # 看安装好的torch和cuda能不能用,也就是看GPU能不能用
print(torch.version.cuda) # 输出一个 cuda 版本,注意:上述输出的 cuda 的版本并不一定是 Pytorch 在实际系统上运行时使用的 cuda 版本,而是编译该 Pytorch release 版本时使用的 cuda 版本,详见
:https://blog.csdn.net/xiqi4145/article/details/110254093
import torch.utils
import torch.utils.cpp_extension
print(torch.utils.cpp_extension.CUDA_HOME) #输出 Pytorch 运行时使用的 cuda
牢骚
一直对配置cuda很害怕,觉得很高级,很高贵。实际上是懒于钻研的表现,稍微一弄就发现这玩意一点也不难,就是获得一块能用的GPU比较难...
临了有感,有道是:
畏难CUDA高无攀,懒动心思探其繁。 实操方知原浅显,才情勇气共翩跹