一. 结论:
一个带显卡的环境系统能安装多个CUDA版本,但不能安装多个NVIDIA驱动版本,多个驱动版本会导致冲突,NVIDIA驱动能向下兼容CUDA版本,但不能向上兼容CUDA版本。
例如,一个系统已经安装好了CUDA11.4和对应的NVIDIA驱动,但又安装了CUDA11.8用于AI算法训练,此时AI算法训练使用的还是CUDA11.4,而不是CUDA11.8。(此时成功安装的CUDA11.8,并不是nvdia-smi显示的CUDA的版本号,而是CUDA Tookit对应的版本号)
**建议: **如果想要支持真正的多个CUDA版本切换,并且用于AI算法训练,需要安装一个较高版本的NVIDIA驱动和CUDA版本,这样系统中将要安装的多个 CUDA 版本就都能正常切换和运行了。
二. 上述结论原因:
这里涉及到nvidia-smi和nvcc的区别,以及不同CUDA版本对应不同的NVIDIA驱动版本。
2.1 nvidia-smi和nvcc的区别
(1)执行nvcc -V命令,显示是CUDA Tookit对应的版本号,是为了确保与您正在编译的CUDA代码兼容,不提供有关GPU的实时状态信息。
(2)执行nvidia-smi命令,显示是cuda的版本号(每个cuda版本对应了不同驱动版本),提供有关系统中NVIDIA GPU的实时状态信息。如果用于AI算法训练,关注的是nvidia-smi这个输出信息。
2.2 不同CUDA版本对应不同的NVIDIA驱动版本
以CUDA 11.4和CUDA 11.8为例,需要的驱动版本不同。如果安装了CUDA 11.8对应的驱动,那么既能支持CUDA 11.8, 也能支持CUDA 11.4; 反之则不行。
三. 解决方案:
3.1 安装新CUDA版本和NVIDIA驱动和cuDNN库
如果已经安装了NVIDIA驱动版本,先卸载旧驱动,再安装新CUDA对应的驱动,如果没有安装过NVIDIA驱动版本,可以直接安装新CUDA版本,它会自动安装对应的NVIDIA驱动。再安装cuDNN库。这块内容网上很多,可以百度或谷歌一下。
3.2 切换不同的CUDA版本(以CUDA 11.4和CUDA 11.8为例)
(1)用软链接的方式切换不同的CUDA版本
A. 执行vi ~/.bashrc, 写入CUDA 环境变量
# CUDA enviroment variable
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
再更新环境变量:
source ~/.bashrc
B. 删除原有软链接
# 假设以前安装的cuda-11.8
sudo rm -rf /usr/local/cuda
C. 新建软链接
# 假设cuda-11.4是新安装的cuda
sudo ln -s /usr/local/cuda-11.4 /usr/local/cuda
D. 执行nvidia-smi验证
(2)不用软链接方式
A. 执行vi ~/.bashrc,指定cuda版本以切换不同的CUDA版本
# cuda-11.4
#export PATH=$PATH:/usr/local/cuda-11.4/bin
#export CUDA_HOME=/usr/local/cuda-11.4
#export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH
# cuda-11.8
export PATH=$PATH:/usr/local/cuda-11.8/bin
export CUDA_HOME=/usr/local/cuda-11.8
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
再更新环境变量:
source ~/.bashrc
再执行nvidia-smi验证。
版权归原作者 BCDBao 所有, 如有侵权,请联系我们删除。