Ubuntu CUDA相关问题全解
问题描述
在运行和学习 Pytorch 工程库时,不少项目会限定所使用的 Pytorch 和 cuda 版本信息。为了满足应用程序和框架本身对不同版本的 cuda 的需求,介绍如何本地环境确定所使用的cuda版本,如何切换cuda版本适配不同工程要求。
概念简介
Nvidia 官方提供的 CUDA Toolkit
是一个完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。
安装路径: /usr/local/cuda
Annaconda 的 cudatoolkit
对于 Pytorch 之类的深度学习框架而言,Pytorch 本身与 CUDA 相关的部分是提前编译好的 ,只需要其所依赖的动态链接库存在即可正常运行,在安装了cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit。
安装路径:/home/xxx/anaconda3/pkgs/
一、查看现有系统目录下CUDA版本
cuDNN版本查看
cat /usr/local/cuda/include/cudnn_version.h |grep CUDNN_MAJOR -A2
CUDA运行API版本查看
nvcc -V
或者:
在/usr/local路径下通过stat cuda命令查看当前使用的CUDA版本:
cd ~/usr/local
stat cuda
CUDA驱动API版本查看
nvidia-smi
二、安装新版本
CUDA:CUDA下载地址
1、下载对应版本的CUDA安装包(选择下载runfile文件 .run文件)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudosh cuda_11.8.0_520.61.05_linux.run
2、在下载文件的目录下,通过sudo sh cuda_10.0.130_410.48_linux.run命令进行安装,安装过程中各项选择如下:
#..一堆协议说明...
accept/decline/quit: accept #接受协议# 提示Existing package manager installation of the driver found. It is strongly recommended that you remove this before continuing
如果当前nvidia-smi中的CUDA Version高于安装版本,可选择continue
在下一步中去除driver项(在driver上回车),选择install
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 10.0 Samples?
(y)es/(n)o/(q)uit: n #不安装样例
安装成功后提示(需添加环境变量、需要的话后续可单独安装driver):
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-11.8/
Please make sure that
- PATH includes /usr/local/cuda-11.8/bin
- LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64, or, add /usr/local/cuda-11.8/lib64 to /etc/ld.so.conf and run ldconfig as root
To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.8/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 520.00 is required for CUDA 11.8 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
3、查看环境变量:
sudo gedit ~/.bashrc
确保存在:
exportPATH=/usr/local/cuda/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATHexportCUDA_HOME=/usr/local/cuda
使配置的环境生效:
source ~/.bashrc
4、安装后,在/usr/local路径下,通过ls命令查看是否存在新安装的CUDA目录:
cd /usr/local
ls
cuDNN:cuDNN下载地址
1、首先下载对应版本的cuDNN
2、cd到cudnn所在的文件夹下进行解压等操作:
wget https://developer.download.nvidia.com/compute/cudnn/9.1.0/local_installers/cudnn-local-repo-ubuntu2204-9.1.0_1.0-1_amd64.deb
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.1.0_1.0-1_amd64.deb
sudocp /var/cudnn-local-repo-ubuntu2204-9.1.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudoapt-get update
sudoapt-get-yinstall cudnn
Ubuntu中安装cudnn详细步骤参考:链接: Ubuntu系统安装CUDA和cuDNN
三、CUDA版本切换
总览:
#在切换cuda版本时rm-rf /usr/local/cuda #删除之前创建的软链接,//删除软链接,注意是 /usr/local/cuda 而不是 /usr/local/cuda/,前者仅删除软链接,而后者会删除软链接所指向的目录的所有内容,操作请小心sudoln-s /usr/local/cuda-11.8/ /usr/local/cuda/ #建立新的指向cuda-11.8的软连接
nvcc --version#查看当前 cuda 版本
1、查看当前 cuda 版本
cd ~/usr/local
stat cuda
当前cuda软链接在cuda-11.6上
2、切换版本
#cuda11.6 切换到 cuda11.8 cd ~/usr/local
sudorm-rf cuda
sudoln-s cuda-11.8 cuda
stat cuda
四、确定pytorch所使用的cuda版本
查看编译时版本:
import torch
>>>torch.version.cuda # 输出一个 cuda 版本>>>torch.__version__ # pytorch版本查看
查看运行时版本:
import torch
>>>import torch.utils
>>>import torch.utils.cpp_extension
>>> torch.utils.cpp_extension.CUDA_HOME #输出 Pytorch 运行时使用的 cuda
cuda使用时查询路径:
若在运行时需要使用 cuda 进行程序的编译或其他 cuda 相关的操作,Pytorch 会首先定位一个 cuda 安装目录(来获取所需的特定版本 cuda 提供的可执行程序、库文件和头文件等文件 )。具体而言,Pytorch 首先尝试获取环境变量CUDA_HOME/CUDA_PATH 的值作为运行时使用的 cuda 目录。若直接设置了 CUDA_HOME/CUDA_PATH 变量,则Pytorch 使用 CUDA_HOME/CUDA_PATH 指定的路径作为运行时使用的 cuda 版本的目录。
若上述环境变量不存在,则 Pytorch 会检查系统是否存在固定路径 /usr/local/cuda。默认情况下,系统并不存在对环境变量 CUDA_HOME 设置,故而 Pytorch 运行时默认检查的是 Linux 环境中固定路径 /usr/local/cuda 所指向的 cuda 目录。
从 Pytorch 确定使用的 cuda 版本的流程来看,想要指定 Pytorch 使用的 cuda 版本,主要有两种方法:
1、修改软链接 /usr/local/cuda 所指向的 cuda 安装目录
#cuda11.6 切换到 cuda11.8 cd ~/usr/local
sudorm-rf cuda
sudoln-s cuda-11.8 cuda
stat cuda
2、通过设置环境变量 CUDA_HOME 指向所需使用的 cuda 版本的安装目录。
临时方案:通过 export 命令修改全局变量,在当前终端退出后即失效:
exportCUDA_HOME=/usr/local/cuda-11.8/ //设置全局变量 CUDA_HOME
exportPATH=$PATH:/usr/local/cuda-11.8/bin/ //在 PATH 变量中加入需要使用的 cuda 版本的路径,使得系统可以使用 cuda 提供的可执行文件,包括 nvcc
参考博文:
https://zhuanlan.zhihu.com/p/91334380
https://blog.csdn.net/qq_41094058/article/details/116207333
版权归原作者 nomoremorphine 所有, 如有侵权,请联系我们删除。