在Ubuntu 多个版本CUDA共存,并且随意切换

本文详述在Ubuntu系统中实现CUDA多个版本的共存与灵活切换的方法,包括CUDA的安装、配置环境变量、安装CUDNN及验证安装是否成功。同时,介绍了如何通过修改软链接和环境变量实现不同CUDA版本间的无缝切换。
PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

另一篇文章传送:Ubuntu16.04 安装显卡驱动+cuda8.0+cudnn-v6+opecv2.4.13+caffe_ytusdc的博客-优快云博客

在配置caffe和tensflow 时,往往需要的CUDA版本不一样,这就需要多个版本的CUDA共存,并且能够随意切换,免去了每次重新安装配置cuda的过程。

cuda_8.0.61_375.26_linux.run   文件名说明

前面的cuda_8.0.61代表cuda的版本,后面的375.26代表的对应的NVIDIA驱动的版本

1、安装CUDA

第二次安装CUDA跟第一次稍微不同:

Do you want to install a symbolic link at /usr/local/cuda? 

(y)es/(n)o/(q)uit: n

第二次按照此处最好选择n, 看下面的解释

#..一堆协议说明...
#直接按q退出协议说明.
zerozone@zerozone: accept/decline/quit: accept  #接受协议

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26? 
y)es/(n)o/(q)uit: n  #是否显卡驱动包,由于已经安装显卡驱动,选择n

Install the CUDA 8.0 Toolkit?
(y)es/(n)o/(q)uit: y #是否安装工具包,选择y

Enter Toolkit Location
[ default is /usr/local/cuda-8.0 ]: #工具包安装地址,默认回车即可

Do you want to install a symbolic link at /usr/local/cuda?
(y)es/(n)o/(q)uit: n #添加链接**注意这个链接,如果你之前安装过另一个版本的cuda,除非你确定想 
                      要用这个新版本的cuda,否则这里就建议选no,因为指定该链接后会将cuda指向 
                      这个新的版本**

Install the CUDA 8.0 Samples?
(y)es/(n)o/(q)uit: y #安装样例

Enter CUDA Samples Location
 [ default is /root ]:  #样例安装地址默认即可

# ***安装信息***
Installing the CUDA Toolkit in /usr/local/cuda-8.0 ...

Missing recommended library: libXi.so
Missing recommended library: libXmu.so
#注意,这里出现了Missing recommended library错误,
#是因为博主在第一次安装时,没有添加最开始的那条安装相关依赖的指令,
#之后我添加了依赖后,再次安装,就没有Missing错误了

Installing the CUDA Samples in /root ...
Copying samples to /root/NVIDIA_CUDA-8.0_Samples now...
Finished copying samples.

===========
= Summary =
===========
Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-8.0
Samples:  Installed in /root, but missing recommended libraries

Please make sure that
 -   PATH includes /usr/local/cuda-8.0/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-8.0/lib64, or, add /usr/local/cuda-8.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-8.0/bin

Please see CUDA_Installation_Guide_Linux.pdf in /usr/local/cuda-8.0/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.

To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:

    sudo <CudaInstaller>.run -silent -driver

Logfile is /tmp/cuda_install_6388.log   
# ***安装完成***

安装完成后如下图所示:

解释:
cuda ----是软链接,指向的是cuda-8.0,因此对cuda的操作实际上就是对cuda-8.0文件夹的操作,
下面的操作中的*/cuda-8.0/* 等操作其实可以换成 /cuda/
cuda-8.0 --是cuda实际安装的文件(认为本次按照的是cuda-8.0)

cuda-9.0 ---是安装的第二个版本的CUDA
 

2、cuda安装后的配置

安装完毕后,再声明一下环境变量,并将其写入到 ~/.bashrc 的尾部:

本文以cuda8.0做示例

注意:环境变量写入的是想要使用的cuda版本所在的文件夹,根据需要更改

sudo gedit ~/.bashrc  #打开~/.bashrc文件

#####将以下内容写入到~/.bashrc尾部 #####
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

source ~/.bashrc   #source ~/.bashrc

 测试cuda的Samples,验证是否安装成功

cd /usr/local/cuda-8.0/samples/1_Utilities/deviceQuery
sudo make    //该命令首次执行即可
sudo ./deviceQuery

cuda的卸载

sudo /usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl

sudo rm -r /usr/local/cuda-8.0 #运行完成之后,使用下面的命令删除残余

3、CUDNN的安装

同样以cuda-8.0示例

cd cuda/include/ 
sudo cp cudnn.h /usr/local/cuda-8.0/include/  #复制头文件 
cd ../lib64    #打开lib64目录 
sudo cp lib* /usr/local/cuda-8.0/lib64/    #复制库文件 
sudo chmod a+r /usr/local/cuda-8.0/include/cudnn.h /usr/local/cuda-8.0/lib64/libcudnn*    #给所有用户增加这些文件的读权限 

建立软连接(这一步慎重安装)

(注意, 最新版本的cudnn 安装好像不用建立软连接了,上面的过程执行完就可以, 来回配置麻烦,不想配置了, 以后有机会去验证呢)
在终端输入()

cd /usr/local/cuda-8.0/lib64/     #进入到lib64目录进行操做
sudo rm -rf libcudnn.so libcudnn.so.6 #删除原有动态文件
sudo ln -s libcudnn.so.6.0.21 libcudnn.so.6 #生成软衔接
sudo ln -s libcudnn.so.6 libcudnn.so #生成软链接

注意此处的 libcudnn.so.6.0.21、libcudnn.so.6 都是根据cudnn解压之后的文件定的,我用的是cudnn-8.0-linux-x64-v6 的所以此处是libcudnn.so.6.0.21、libcudnn.so.6

安装完成后可用 nvcc -V命令验证是否安装成功

4、CUDA多个版本切换

到/usr/local/ 目录下使用stat命令查看当前cuda软链接指向的哪个cuda版本,如下所示:

stat /usr/local/cuda

可以看到,文件类型是symbolic link,而指向的目录正是/usr/local/cuda-9.0,当我们想使用cuda-8.0版本时,只需要删除该软链接,然后重新建立指向cuda-8.0版本的软链接即可(注意名称还是cuda,因为要与bashrc文件里设置的保持一致)

sudo rm -rf cuda
sudo ln -s /usr/local/cuda-8.0 /usr/local/cuda

注意:修改完成之后,记住要修改文件 ~/.bashrc 中的相关路径,然后使用 stat cuda 和 nvcc -V 命令查看cuda版本,确定两个命令都指向同一个cuda版本才证明切换成功

cuda版本查看:

cat /usr/local/cuda/version.txt  #方法1
nvcc -V                          #方法2

cudnn版本查看

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

如图所示cudnn版本就是 7.4.2

参考文章:在ubuntu上安装多个版本的CUDA,并且可以随时切换_ZeroZone零域的博客-优快云博客_多版本cuda

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### 管理并切换多个 CUDA 版本的解决方案 在 Linux 系统中,尤其是 Ubuntu 上,可以通过多种方式管理和切换多个 CUDA 版本。以下提供一种高效且可靠的策略,结合环境变量配置、软连接设置以及系统替代品管理工具(`update-alternatives`),确保不同 CUDA 版本之间的无缝切换。 --- #### 1. 安装多个 CUDA 版本 安装多个 CUDA 版本时,默认情况下它们会被放置于 `/usr/local/` 下的不同目录中,例如 `/usr/local/cuda-11.6` 和 `/usr/local/cuda-12.1`[^1]。每种版本的安装过程大致相同,只需从 NVIDIA 官方网站下载对应的 `.run` 文件并执行即可。 ##### (1)下载并安装指定版本CUDA 以安装 CUDA 11.1 为例,运行以下命令完成安装: ```bash wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run sudo sh cuda_11.1.0_455.23.05_linux.run ``` 在安装过程中,可以选择跳过驱动程序安装(如果已存在合适的驱动版本),直接安装 CUDA 工具链[^4]。 重复上述步骤可安装更多版本CUDA。 --- #### 2. 配置环境变量 为了方便使用特定版本CUDA,需正确配置环境变量 `CUDA_HOME`, `PATH`, 和 `LD_LIBRARY_PATH`。 ##### (1)编辑 `.bashrc` 或 `.zshrc` 打开用户的 shell 配置文件(通常为 `~/.bashrc` 或 `~/.zshrc`),添加如下内容以便动态切换 CUDA 版本: ```bash export CUDA_VERSION=cuda-12.1 # 替换为目标 CUDA 版本编号 export CUDA_HOME=/usr/local/$CUDA_VERSION export PATH=$CUDA_HOME/bin:$PATH export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH:-} ``` 保存后,通过以下命令使修改生效: ```bash source ~/.bashrc ``` ##### (2)验证当前 CUDA 版本 运行以下命令检查是否成功切换到目标版本: ```bash nvcc --version ``` 输出应显示当前配置的 CUDA 版本信息。 --- #### 3. 使用软连接简化切换 虽然可以直接手动修改环境变量,但频繁变更可能导致误操作。为此,可以借助软连接技术快速切换默认 CUDA 版本。 ##### (1)删除现有软连接(如有) 先移除可能存在的旧软连接: ```bash sudo rm -rf /usr/local/cuda ``` ##### (2)创建新的软连接 假设希望将默认 CUDA 版本设为 12.1,则运行以下命令: ```bash sudo ln -s /usr/local/cuda-12.1 /usr/local/cuda ``` 同理,若想切换至其他版本(如 11.6),只需更新软连接的目标路径: ```bash sudo ln -s /usr/local/cuda-11.6 /usr/local/cuda ``` 注意:这种方法并非完全可靠,因为某些软件仍可能依赖显式的环境变量而非软连接[^2]。 --- #### 4. 利用 `update-alternatives` 进行自动化管理 对于更复杂的场景,推荐采用 `update-alternatives` 工具统一管理多个 CUDA 版本。 ##### (1)注册各个 CUDA 版本 依次将所有已安装的 CUDA 版本加入 `update-alternatives` 数据库: ```bash sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-11.6 100 sudo update-alternatives --install /usr/local/cuda cuda /usr/local/cuda-12.1 150 ``` 其中最后一个参数表示优先级,数值越高越靠前。 ##### (2)选择目标 CUDA 版本 运行以下命令交互式选择默认 CUDA 版本: ```bash sudo update-alternatives --config cuda ``` 系统会提示类似以下选项列表: ``` There are 2 choices for the alternative cuda (providing /usr/local/cuda). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/local/cuda-12.1 150 auto mode 1 /usr/local/cuda-11.6 100 manual mode 2 /usr/local/cuda-12.1 150 manual mode Press <enter> to keep the current choice[*], or type selection number: ``` 输入对应序号完成切换[^5]。 --- #### 5. 测试与验证 无论采取哪种方法,最终都需要测试新配置的有效性。建议编写一个小脚本来批量验证常用命令的行为一致性,例如: ```python import os, subprocess def test_cuda_version(): result = subprocess.run(['nvcc', '--version'], stdout=subprocess.PIPE) print(result.stdout.decode('utf-8')) test_cuda_version() print(os.environ['CUDA_HOME']) ``` --- ### 总结 综合来看,最灵活的方式是结合软连接和 `update-alternatives` 来实现多 CUDA 版本的便捷切换。前者适合简单需求,后者则更适合复杂项目开发环境下的长期维护工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值