今天在安装某国产机器学习框架时,发现其环境要求极为刁钻,仅支持三个 CUDA 的版本号。我又不愿意破坏当前的 CUDA 环境,通过查询和实验,发现了一个非常不错的 CUDA 多版本共存方案,可以方便地进行 CUDA 版本的切换,下面进入教程。
教程以 Windows 下的 Ubuntu WSL2 为例,正常的 Linux 该方法也一样通用。
1 安装较新版本显卡驱动
由于每个 CUDA 版本都有显卡驱动版本号限制,低版本的显卡驱动是不支持高版本 CUDA 的,反之是兼容的。因此建议安装一个较新版本的显卡驱动(至少要支持你想运行的最高版本的 CUDA),这样系统中将要安装的多个 CUDA 版本就都能正常运行了。
- 当前系统的显卡驱动版本可使用
nvidia-smi
指令查询 - CUDA 要求的驱动版本可在文档的表三查阅:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
- NVIDIA 显卡驱动可在官网下载:https://www.nvidia.com/download/index.aspx
显卡驱动的具体安装不展开赘述,如果你不会安装,那么建议查询显卡驱动安装相关教程。
2 安装需要的 CUDA 版本
前往 CUDA 的下载官网:https://developer.nvidia.com/cuda-toolkit-archive
选择自己需要的 CUDA 版本,选择对应的系统进行下载,建议选择 .run 形式的安装器。以 root 权限运行 .run 安装器,根据提示进行安装即可。过程中需要注意取消勾选显卡驱动,不要重新安装驱动,因为我们上一步已经安装过了。
如果你有多个需要的 CUDA 版本,那就依次下载安装即可,后文我们再介绍如何进行版本切换。
3 安装对应的 cuDNN 库
前往 cuDNN 的下载官网:https://developer.nvidia.com/cudnn-archive
注意选择和上一步安装的 CUDA 版本适配的 cuDNN 版本,我们需要分别给每个版本的 CUDA 安装对应版本的 cuDNN 库。建议选择 .tar.xz 形式的压缩包。
下载好后,使用 tar -xvf xxx.tar.xz
解压 cuDNN 库,然后直接执行以下指令进行安装:(注意在正确位置填上对应的版本号,例如 cuda-12.3)
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-<版本号>/include sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-<版本号>/lib64 sudo chmod a+r /usr/local/cuda-<版本号>/include/cudnn*.h /usr/local/cuda-<版本号>/lib64/libcudnn*
4 配置切换脚本
我们的切换方式原理是软链接。每个 CUDA 版本安装后,会在 /usr/local
创建对应版本的文件夹,例如 cuda-12.3
,我们可以创建一个软链接 /usr/local/cuda
,让软链接指向对应版本的 CUDA,我们通过修改软链接的指向就能修改 CUDA 版本了。
我们通过文本编辑器打开用户文件夹下的 .bashrc
,这里用 vim 为例:vim ~/.bashrc
在该文件尾部添加以下内容:
export PATH=$PATH:/usr/local/cuda/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 function switch_cuda { if [[ $1 =~ ^[0-9]+\.[0-9]+$ ]]; then sudo rm /usr/local/cuda sudo ln -s /usr/local/cuda-$1 /usr/local/cuda nvcc --version else echo invalid version fi }
注意,如果你的 .bashrc
内已经有类似于前两行的内容,那么需要删除它,替换为我的写法。
添加后保存该文件,然后使用 source .bashrc
刷新该文件。
5 测试多版本切换
上述脚本在 bash 内注册了一个函数叫 switch_cuda,通过调用该函数即可快速切换 CUDA 版本。用法为:switch_cuda xx.x (版本号)
以下是切换的演示,首先将 CUDA 版本切换到了 11.6,然后再切回 12.3:
发表回复