赞
踩
在运行和学习 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/
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
nvcc -V
或者:
在/usr/local路径下通过stat cuda命令查看当前使用的CUDA版本:
cd ~/usr/local
stat cuda
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
sudo sh 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
确保存在:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_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
sudo cp /var/cudnn-local-repo-ubuntu2204-9.1.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cudnn
Ubuntu中安装cudnn详细步骤参考:链接: Ubuntu系统安装CUDA和cuDNN
总览:
#在切换cuda版本时
rm -rf /usr/local/cuda #删除之前创建的软链接,//删除软链接,注意是 /usr/local/cuda 而不是 /usr/local/cuda/,前者仅删除软链接,而后者会删除软链接所指向的目录的所有内容,操作请小心
sudo ln -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
sudo rm -rf cuda
sudo ln -s cuda-11.8 cuda
stat 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
sudo rm -rf cuda
sudo ln -s cuda-11.8 cuda
stat cuda
2、通过设置环境变量 CUDA_HOME 指向所需使用的 cuda 版本的安装目录。
临时方案:通过 export 命令修改全局变量,在当前终端退出后即失效:
export CUDA_HOME=/usr/local/cuda-11.8/ //设置全局变量 CUDA_HOME
export PATH=$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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。