ChrisKim
Do not go gentle into that good night.
颢天

Linux 系统 CUDA 多版本共存以及切换

今天在安装某国产机器学习框架时,发现其环境要求极为刁钻,仅支持三个 CUDA 的版本号。我又不愿意破坏当前的 CUDA 环境,通过查询和实验,发现了一个非常不错的 CUDA 多版本共存方案,可以方便地进行 CUDA 版本的切换,下面进入教程。

教程以 Windows 下的 Ubuntu WSL2 为例,正常的 Linux 该方法也一样通用。

1 安装较新版本显卡驱动

由于每个 CUDA 版本都有显卡驱动版本号限制,低版本的显卡驱动是不支持高版本 CUDA 的,反之是兼容的。因此建议安装一个较新版本的显卡驱动(至少要支持你想运行的最高版本的 CUDA),这样系统中将要安装的多个 CUDA 版本就都能正常运行了。

显卡驱动的具体安装不展开赘述,如果你不会安装,那么建议查询显卡驱动安装相关教程。

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:

https://assets.zouht.com/img/blog/3754-01.webp

本文链接:https://www.zouht.com/3754.html
本文使用:CC BY-NC-SA 4.0 许可
# # # #
首页      教程      Linux 系统 CUDA 多版本共存以及切换

发表回复

textsms
account_circle
email

  • LiuShen

    高端操作 [嗑瓜子] [嗑瓜子] [嗑瓜子] 某国产机器学习框架哈哈

    4 周前 回复

颢天

Linux 系统 CUDA 多版本共存以及切换
今天在安装某国产机器学习框架时,发现其环境要求极为刁钻,仅支持三个 CUDA 的版本号。我又不愿意破坏当前的 CUDA 环境,通过查询和实验,发现了一个非常不错的 CUDA 多版本共存方案,可…
扫描二维码继续阅读
2024-05-24