1. 问题描述
从github上down下来的代码需要cuda11.7的版本,而现在服务器上现有的cuda版本是11.1,无法直接运行。在尝试安装11.7版本的cuda工具包时,显示安装失败。用nvidia-smi命令查询得知服务器上的显卡驱动版本是455.38, 根据nvidia官网上列出的cuda toolkit对显卡驱动版本的要求,cuda11.7需要将显卡驱动版本在515.43及以上,因此无法支持11.7版本的cuda。所以只有更新显卡驱动了。
2. 显卡驱动、CUDA和Pytorch
安装显卡驱动时特别要注意CUDA、Pytorch和显卡驱动三者版本之间的对应关系,需要版本相互适配才能使程序正常运行。下图展示了显卡驱动、cuda和pytorch之间的对应关系。

显卡驱动是操作系统和显卡硬件之间的软件接口,复杂管理显卡的的功能和性能,一台主机上只能安装一个版本的显卡驱动。
CUDA是NVIDIA 开发的基于C/C++的并行计算工具包,可以使开发人员在 GPU 上编写高性能的并行程序。每个版本的显卡驱动有其支持的最高CUDA版本,并可以向后兼容旧版本的CUDA。 一台主机上可以同时安装多个版本的显卡驱动,使用时只需要在~/.bashrc文件中将对应版本cuda的安装路径加入环境变量即可。

Pytorch是在CUDA上开发的一个开源的机器学习框架,用于构建深度学习模型。每个版本的CUDA都可能支持多个版本的Pytorch。一般情况下,pytorch版本与开源代码要求的略有不同不会影响使用,但pytorch基于的cuda版本一定要与本机环境变量中设置的cuda版本相同。用户可以通过Anaconda来创建多个python环境,进而使用不同版本的pytorch。

3. 更新过程
3.1 显卡驱动
操作系统和显卡之间的软件接口,负责管理显卡的功能和性能。一台主机上只能安装某一个版本的显卡驱动。
当显卡驱动无法支持程序所需的高版本cuda时,需要更新显卡驱动。这里需要考虑到旧版本的操作系统是否可以支持最新版本的显卡驱动,必要时还需要更新操作系统版本以适配新的显卡驱动。(这里提供一个小方法,可以在cuda官网上查找为当前版本操作系统提供了安装包的cuda toolkit中,版本号最高的cuda,并查找该版本cuda对的显卡驱动版本,即可反推出操作系统可能支持的显卡驱动的最高版本。例如,我使用的服务器配备的操作系统是Ubuntu18.04版本,查阅cuda官网可知,为Ubuntu18.04提供了安装包的cuda的最高版本是12.0,查cuda和显卡驱动的对应表可知,系统可能支持的最高显卡驱动版本是525.85.12。这种方法可以确保不会出现操作系统无法兼容显卡驱动版本的情况,但貌似545版本的显卡驱动也可以正常安装在Ubuntu18.04上)
显卡驱动更新方法如下,需要先卸载现有版本的显卡驱动,再安装新版本,最后还需要重启一下服务器。(参考自 Nvidia驱动安装 ,如有报错可参考nvidia安装驱动各种问题汇总解决)
## 清除已安装的nvidia驱动
sudo apt-get purge nvidia*
sudo apt-get purge nvidia-*
#卸载所有和nvidia相关
sudo apt autoremove *nvidia*
##清除相关的依赖包
sudo apt autoremove
## 加入gpu ppa
sudo add-apt-repository ppa:graphics-drivers
## 更新软件包
sudo apt-get update
## 查询支持的gpu版本
ubuntu-drivers list
## 从支持列表中安装指定版本
sudo apt install nvidia-driver-xxx
## 安装完成后,重启电脑
sudo reboot
## 查看显卡驱动是否顺利更新
nvidia-smi
更新成功后,在命令行输入nvidia-smi,显示结果如下
可以看到显卡驱动版本成功从455.38升级到了545.29.06,可支持的最高CUDA版本也提升到了12.3!
3.2 CUDA
CUDA是NVIDIA 开发的并行计算平台和编程模型,可以使开发人员在 GPU 上编写高性能的并行程序,从而加速各种应用程序,包括科学计算、机器学习、深度学习等。
cuda toolkit下载安装
到cuda官网上查找适配本机操作系统版本的cuda toolkit安装包。开源代码里使用的pytorch基于cuda11.7版本,我们尽量选用版本一致的cuda toolkit。
复制cuda官网提供的命令,将.run安装包下载到本地并启动
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run
sudo sh cuda_11.7.1_515.65.01_linux.run
进入安装程序引导界面后选择Continue并按[ENTER],通过用户条款后出现当前界面。cuda toolkit安装程序会默认安装与当前cuda版本最适配的显卡驱动,而由于本地已经安装了545.29.06版本的显卡驱动,需要在这里将[X]Driver中的“X”去掉,避免安装多个驱动带来的内核冲突。

随后的安装按引导界面提示进行即可,详细过程见Linux 下的 CUDA 安装和使用指南
安装多个cuda版本
CUDA本质是一组由cuda C++编写的工具包,一台主机上可以同时安装多个版本的cuda。使用时只需要在~/.bashrc文件中将对应版本cuda的安装路径加入环境变量即可。例如,现已经将11.7、12.0和12.1版本的cuda安装在了/usr/local/ 目录下,并且设置了名为cuda的软连接指向/usr/local/cuda-12.1
当想要使用其他版本的cuda时,只要在环境变量的PATH搜索中添加对应版本cuda toolkit的安装目录,或修改/usr/local/目录下软连接cuda的指向,即可完成cuda版本的切换。
vim ~/.bashrc
export PATH="/usr/local/cuda-xx.x/bin"
export LD_LIBRARY_PATH="/usr/local/cuda-xx.x/lib64"
最后使用 nvcc -V 查看当前cuda版本,可以看到cuda版本已经切换成功 (详细步骤参考创建多个cuda版本)
3.3 PyTorch
PyTorch 是一个开源的机器学习框架,由 Facebook 的人工智能研究团队开发和维护。Pytorch基于python代码编写,用于构建深度学习模型,提供了张量计算、自动微分和丰富的神经网络模块。
用户在环境变量中指定cuda版本后,需要到pytorch官网中上查找与本地cuda版本适配的pytorch工具包。一般情况下,pytorch版本与开源代码要求的略有不同不会影响使用,但pytorch基于的cuda版本一定要与本机环境变量中设置的cuda版本相同,否则程序运行时将出现Segment fault等报错。
使用anaconda创建虚拟环境并启动,在命令行输入从pytorch官网查找到的以下命令,即启动pytorch安装进程。
通过conda安装
# CUDA 11.7
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.7 -c pytorch -c nvidia
# CUDA 11.8
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 pytorch-cuda=11.8 -c pytorch -c nvidia
# CPU Only
conda install pytorch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 cpuonly -c pytorch
通过pip安装
# ROCM 5.4.2 (Linux only)
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/rocm5.4.2
# CUDA 11.7
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
# CUDA 11.8
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
# CPU only
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cpu
4. 测试
测试pytorch是否可以通过cuda toolkit驱动显卡,在命令行启动python,并输入以下命令
import torch
print(torch.cuda.is_available())
若最终输出True,则代表显卡可以正常使用。恭喜完成显卡驱动、CUDA和Pytorch全家桶的升级更新!
参考资料
Ubuntu 20.04 Nvidia驱动安装 - 知乎 (zhihu.com)
nvidia安装驱动各种问题汇总_ubuntu20.04安装显卡驱动报错-CSDN博客
创建多个cuda版本,可以自由切换,不干扰源环境,且不用sudo指令,操作简单 - 知乎 (zhihu.com)