首先,cuda toolkit是安装在linux系统中的基于显卡开发的工具安装包。
在conda中安装的pytorch会自带一个cuda toolkit(阉割版)+cuDNN,这两个在选择正确版本的pytorch时将自动安装,不需要额外操作。
(关于这里具体的依赖关系以及详细原理,感兴趣可移步:图文并茂讲解CUDA, CUDA Toolkit, CUDA Driver, CUDA Runtime, nvcc之间的关系及其版本兼容性-CSDN博客)
1、安装cuda toolkit(输入nvcc -V后显示版本号可跳过这一步)
首先,需要选择安装正确版本的cuda toolkit。
要求一、cuda toolkit的版本不能超过nvidia-smi中显示的版本,同时安装版本不能超过Driver-version对应的数字。具体查阅1. CUDA 12.5 Release Notes — Release Notes 12.5 documentation中的Table 3。举例:笔者使用的是搭载4090的服务器。查表后得知最新可选的版本为12.2。
要求二、cuda toolkit的版本不能过老,例如笔者使用的4090就无法适配CUDA 10.1,显卡适配的版本最好查阅一下。实际中不与最新版本相差太远应该都没问题。
要求一要求二需都满足,不满足导致的报错见文末。
确认好版本后,下载对应的包,或者直接使用wget+对应版本链接并安装,如:
wget https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.42.02_linux.run
sudo sh cuda_12.5.0_555.42.02_linux.run
我这里是让管理员帮忙拷贝对应的包。
正确安装后,输入
nvcc -V
显示版本信息,即cuda toolkit版本安装正确。
注:多版本cuda管理/有cuda了但nvcc not found问题:公用服务器上可能涉及多个版本的包同时存在。由于涉及到系统路径LD_LIBRARY_PATH、CUDA_HOME和PATH:这里提供三种解决方法。
方法一、将对应的cuda包的路径修改为/usr/local/cuda/。对于具备了 root 权限的用户而言,在安装有多版本 cuda 的 Linux 系统上,只需切换 /usr/local/cuda 所指向的 cuda 目录,让其指向所需的 cuda 版本的安装位置,即可让 Pytorch 在运行时使用指定版本的 cuda 运行程序。修改软链接的方法如下命令所示,命令删除原有的软链接,并新建指向新路径的软链接。
//删除软链接,注意是 /usr/local/cuda 而不是 /usr/local/cuda/,前者仅删除软链接,而后者会删除软链接所指向的目录的所有内容,请小心
sudo rm -rf /usr/local/cuda
//创建名为 /usr/local/cuda 的软链接,其指向 cuda_path 所指定的 cuda 安装目录
sudo ln -s cuda_path /usr/local/cuda
对于非root用户则可以直接强制修改原始的软链接(root用户也可以使用):
//修改或创建软链接 /usr/local/cuda 使其指向指定版本的 cuda 目录
sudo ln -sf cuda_path /usr/local/cuda
方法二、将安装的对应版本的cuda加入系统路径LD_LIBRARY_PATH、CUDA_HOME和PATH,这里选择直接在终端输入:
//需要将这里的路径修改为对应cuda版本的路径,一般在/usr/local/路径下
export LD_LIBRARY_PATH=/usr/local/cuda-***/lib64/:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-***/
export PATH=/usr/local/cuda-***/bin/:$PATH
注意:操作完后,需要输入一下指令以永久保存设置,否则这一设置将在重启终端后失效:
source ~/.bashrc
同样,输入nvcc -V后显示版本信息则说明cuda toolkit配置完成。设置完成后可输入以下指令查看是否设置路径成功:
echo $CUDA_HOME
echo $LD_LIBRARY_PATH
echo $PATH
方法三、使用vim编辑系统变量,命令行输入:
vim ~/.bashrc
进入vim系统以后,j和k为光标上下移动,i为当行开始修改,小写字母o为在下一行插入。
在最末尾末尾插入对应的系统变量:
//需要将这里的路径修改为对应cuda版本的路径,一般在/usr/local/路径下
export LD_LIBRARY_PATH=/usr/local/cuda-***/lib64/:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda-***/
export PATH=/usr/local/cuda-***/bin/:$PATH
ESC为结束输入。输入指令保存修改。
#保存修改
:wq
# 如果想要不保存修改并退出,则输入
:q!
同样注意:操作完后,需要输入一下指令以永久保存设置,否则这一设置将在重启终端后失效:
source ~/.bashrc
同样,输入nvcc -V后显示版本信息则说明cuda toolkit配置完成。
2、安装anaconda(简略)
下载ananconda:
或者,想要下载更多历史版本:
这里同样支持使用wget下载,下载完cd到对应的目录,输入
//更换成对应的安装包名
bash Anaconda3-2024.02-1-Linux-x86_64.sh
第一步输入yes后安装,第二步为输入安装路径,直接按回车即为安装到默认路径,第三步输入yes后帮助完成conda初始化。输入以下任意指令后显示版本则完成第二步:
conda info --envs
conda --version
如果手快了第三步直接跳过了,或者初始化部分选择no,即使安装了也会显示conda:command not found。这时需要手动配置环境变量:
//路径改为对应的安装目录。
export PATH=/root/anaconda3/bin:$PATH
//永久保存配置
source ~/.bashrc
输入conda info --envs或conda --version后正确显示则安装完成。这时重启终端,命令行前会多一个(base),即默认环境,以后每次启动终端都将自动启动conda。
安装canda结束后,建议配置镜像源,否则下载速度较慢(笔者的公用服务器不存在这一问题,故跳过)。具体可参考如:linux中anaconda更换源_linux anaconda 换源-CSDN博客。
3、安装python+pytorch
anaconda中可以同时包含多个虚拟环境,我们所有的安装都需要确定在其中哪一个环境安装(不建议安装在默认的base环境中)。
正确选择与cuda适配的pytorch版本和与其适配的python版本,版本选择见01 Pytorch和CUDA对应的版本及Pytorch和Python对应的版本及Python与Anaconda的对应关系_pytorch和cuda对应版本-CSDN博客
选择对应的python及pytorch版本后创建一个带有python的新的环境,注意修改环境名为想要的名字,
conda create --name your_env_name python=3.x
等待安装完成后,启动对应环境(记得修改对应环境名):
conda activate your_env_name
现在,命令行前的括号内显示的是新创建的conda虚拟环境。注意:不启动环境,后续安装就会都安装在默认环境base里。
接着我们安装pytorch,官网为PyTorch,我们选择正确的版本:
或者选择更多历史版本Previous PyTorch Versions | PyTorch,注意,要与前文选择的cuda版本和python版本相匹配,这里推荐使用conda安装:
安装完毕后,可以通过conda list查看已安装的包。
确认安装pytorch的conda环境是否能正常使用:终端输入python后进入python指令。
输入以下命令确认是否正确安装。
import torch
# 以下两条命令都要确认!!
torch.cuda.is_available()
torch.zeros(1).cuda()
如果第一条显示False,则一般是cuda版本过高,不满足安装cuda toolkit部分的要求一。
如果第一条显示True,但第二条有如下报错,则一般为cuda版本过低,不满足安装cuda toolkit部分的要求二,需要重新安装较新版本的cuda toolkit。
UserWarning:
NVIDIA GeForce RTX 4090 with CUDA capability sm_89 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.
If you want to use the NVIDIA GeForce RTX 4090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name))