PyTorch环境配置笔记

每次跑深度学习代码之前,配环境都是令人头疼的一件事,为了便于以后排查错误,将一些基本概念和常见问题整理了出来。

显卡

不是所有的GPU都支持CUDA,CUDA是NVIDIA推出的。一般用的都是NVIDIA的卡,所以应该不会碰到这个问题。

显存

显存之于GPU,就像内存之于CPU。

显卡驱动(特指NVIDIA Driver)

显卡驱动是连接显卡和计算机的桥梁,方便计算机识别GPU是否正确安装。NVIDIA Driver是NVIDIA显卡驱动软件,这个版本一般是和显卡型号相关的。

CUDA

CUDA的全称是Compute Unified Device Architecture(统一计算设备架构),属于一种并行计算平台和编程模型,能使GPU更简单地进行通用计算。运行CUDA应用程序要求系统至少有一个具有CUDA功能的GPU与CUDA Toolkit兼容的驱动程序

CUDA的安装路径一般在:/usr/local/cuda-xx.x/(xx.x为版本号)一个系统中可以安装多个CUDA版本,使用时修改软链接即可。

查看显卡支持的最高CUDA版本(驱动API):

nvidia-smi

CUDA多版本切换(有管理员权限):

1
2
3
4
# 将~/.bashrc下与CUDA相关的路径都改为/usr/local/cuda,不添加版本号
rm -rf /usr/local/cuda # 删除旧的软链接
sudo ln -s /usr/local/cuda-xx.x /usr/local/cuda # 添加新的软链接
nvcc -V # 检查当前版本

查询GPU算力:官方算力表

GPU算力和CUDA版本对应关系:速查表

cuDNN

cuDNN是一个专为深度学习设计的软件库,里面提供了很多计算函数,如卷积。cuDNN与CUDA的关系好比是工具和工作台,安装了CUDA相当于只买来了一个平台,并没有提供专为深度神经网络加速的工具,因此还需要安装cuDNN。cuDNN是插入式设计,因此安装的时候只需要把cuDNN相关文件直接复制到CUDA路径中即可。

官网综述链接

注:cuDNN和CUDA的版本存在一定对应关系,但是一般到了11以上的版本就不太会出现冲突了。详见官网

CUDA Toolkit

CUDA Toolkit主要包含了CUDA-C和CUDA-C++编译器、一些实用程序库、library API的代码示例和一些CUDA开发工具。一般安装CUDA Toolkit都是默认安装了CUDA Driver的,需要关注的是,CUDA Toolkit和在Anaconda中安装torch时自动安装的cudatoolkit有一定区别。CUDA Toolkit的功能更加完整,只有在进行其他CUDA相关程序的编译时才会用到,和项目的环境需求有关。安装PyTorch的时候,cudatoolkit包含了与CUDA相关的动态链接库,PyTorch本身与CUDA相关的部分是预编译好的,不需要重新执行编译过程。

官网综述链接

注:CUDA Toolkit和CUDA Driver的版本存在一定对应关系。详见官网

NVCC

NVCC是CUDA的编译器,一般存放在CUDA Toolkit的/bin目录中,类似于C语言的gcc编译器。

查看当前CUDA版本(运行API):

nvcc -V

此命令无效时检查环境变量是否配好:

1
2
3
4
5
6
7
# 配置环境变量
sudo gedit ~/.bashrc
# 添加如下信息
export PATH="/usr/local/cuda-xx.x/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-xx.x/lib64:$LD_LIBRARY_PATH"
# 关闭文件,使之生效
source ~/.bashrc

PyTorch和CUDA

使用conda查看版本

1
2
3
conda list | grep cuda
conda list | grep torch
conda list | grep pytorch # 使用conda安装的pytorch

使用Python查看版本

1
2
3
4
5
6
7
8
9
10
import torch
import torch.utils
import torch.utils.cpp_extension

print(torch.__version__) # 查看torch版本
print(torch.cuda.is_available()) # 看安装好的torch和cuda能不能用,也就是看GPU能不能用

print(torch.version.cuda) # 输出一个cuda版本,该cuda版本并不一定是pytorch在实际系统上运行时使用的cuda版本,而是编译该pytorch release版本时使用的cuda版本,也就是官方绑定的cuda版本

print(torch.utils.cpp_extension.CUDA_HOME) #输出pytorch运行时实际使用的cuda

关于Pytorch和CUDA的版本冲突

  1. 一定先去算力表查看GPU架构支持的CUDA版本。
  2. 找到PyTorch和CUDA的交集,选择版本最高的CUDA。

离线安装