今天在安装某国产机器学习框架时,发现其环境要求极为刁钻,仅支持三个 CUDA 的版本号。我又不愿意破坏当前的 CUDA 环境,通过查询和实验,发现了一个非常不错的 CUDA 多版本共存方案,可以方便地进行 CUDA 版本的切换,下面进入教程。
教程以 Windows 下的 Ubuntu WSL2 为例,正常的 Linux 该方法也一样通用。
本文转自我的个人博客,前往可获得最佳排版体验。 原文链接:https://www.zouht.com/3754.html 本文使用:CC BY-NC-SA 4.0 许可
由于每个 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
显卡驱动的具体安装不展开赘述,如果你不会安装,那么建议查询显卡驱动安装相关教程。
前往 CUDA 的下载官网:https://developer.nvidia.com/cuda-toolkit-archive
选择自己需要的 CUDA 版本,选择对应的系统进行下载,建议选择 .run 形式的安装器。以 root 权限运行 .run 安装器,根据提示进行安装即可。过程中需要注意取消勾选显卡驱动,不要重新安装驱动,因为我们上一步已经安装过了。
如果你有多个需要的 CUDA 版本,那就依次下载安装即可,后文我们再介绍如何进行版本切换。
前往 cuDNN 的下载官网:https://developer.nvidia.com/cudnn-archive
注意选择和上一步安装的 CUDA 版本适配的 cuDNN 版本,我们需要分别给每个版本的 CUDA 安装对应版本的 cuDNN 库。建议选择 .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* 我们的切换方式原理是软链接。每个 CUDA 版本安装后,会在 创建对应版本的文件夹,例如 ,我们可以创建一个软链接 ,让软链接指向对应版本的 CUDA,我们通过修改软链接的指向就能修改 CUDA 版本了。
我们通过文本编辑器打开用户文件夹下的 ,这里用 vim 为例:
在该文件尾部添加以下内容:
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
} 注意,如果你的 内已经有类似于前两行的内容,那么需要删除它,替换为我的写法。
添加后保存该文件,然后使用 刷新该文件。
上述脚本在 bash 内注册了一个函数叫 switch_cuda,通过调用该函数即可快速切换 CUDA 版本。用法为:switch_cuda xx.x (版本号)
以下是切换的演示,首先将 CUDA 版本切换到了 11.6,然后再切回 12.3:
