3080/3090 pytorch gpu计算环境安装指南 ubuntu20.04
本文档写于2020年10月22日,若有任何官方安装包更新 请使用官方轮子进行安装
30系列显卡安装pytorch gpu计算环境需要解决的核心问题
30系列显卡是新一代架构,新驱动不支持cuda9以及cuda10,所以必须安装cuda11、而pytorch现在稳定版为1.6,最高仅支持到cud10.2。所以唯一的办法就是使用上处于beta测试的1.7或1.8。这也是为啥一开始就强调本文的写作时间,因为未来一定会有稳定版发布,请使用稳定版。torch_geometric 计算包官方发布的现成轮子仅支持到pytorch-1.6和cuda10.2。
所以核心问题就是cuda11 pytorch 以及torch_geometric之间的匹配。
环境介绍
ubuntu 20.04
Nvidia 驱动版本 455.23
cuda 11.1
cudnn-11.1-linux-x64-v8.0.4.30
pytorch 1.8.0a0+fe4f90c
torchvision 0.8
torch_geometric 1.6.1
安装驱动 cuda cudnn
首先安装显卡驱动 cuda cudnn 这一部分和以往任何一个版本的安装过程基本相同,网上博客很多就不赘述了。
需要注意的是必须安装cuda11,重要的话得加黑。对应版本的cudnn也是必须得装,因为接下来我们要采用编译安装的方法安装后续的计算环境,其依赖于cudnn。
注意:新版的cudnn安装时要将所有的.h文件都拷贝过去,因为cudnn.h有相对以前些许改动。
解压cudnn的压缩包后执行:
sudo cp cuda/include/cudnn* /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn*
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
这里也可以拷贝到 /usr/local/cuda-11.1/的路径下 但是记得进行重新建立软连接,将其链接到/usr/local/cuda
安装pytorch
conda安装
不使用torch_geometric的小伙伴可以直接
conda install pytorch torchvision cudatoolkit=11 -c pytorch-nightly
此命令安装的是cuda11.0对应的pytorch-1.8,conda会再装一个cuda11.0工具 不与前面装的cuda 11.1冲突
源码编译安装
pytorch官方提供的稳定版轮子只支持到1.6,cuda只支持到10.2. 虽然Nightly版本已经支持到cuda11.0 但是为了后面编译安装torch_geometric 我们需要使用cuda11.1对应的pytorch,所以pytorch也需要编译安装
参照https://github.com/pytorch/pytorch的编译安装指南。
首先安装依赖
conda install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi typing_extensions future six requests dataclasses
从github克隆源码
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
git submodule sync
git submodule update --init --recursive
这里因为github在墙外面,直接git是不行的,需要手动下载或者使用代理
编译安装
export CMAKE_PREFIX_PATH=${CONDA_PREFIX:-"$(dirname $(which conda))/../"}
python setup.py install
编译安装完成后记得退出当前文件夹,不要在当前文件夹下测试import torch 否则会有一个报错告诉你更改文件夹
在其他任意地方进行安装检查:
$ python -c "import torch; print(torch.__version__)"
>>> 1.8.0a0+fe4f90c
$ python -c "import torch; print(torch.version.cuda)"
>>> 11.1
$ python -c "import torch; print(torch.cuda.current_device())"
>>> 0
记得要做最后一个检查,因为只有这个检查通过了才说明你的pytorch能够使用30系列gpu,如果你的pytorch对应的不是cuda11,前两个检查能通过,第三个会报错说pytorch和3080/3090不兼容
安装 torchvision
git clone --recursive https://github.com/pytorch/vision.git
cd vision/
python setup.py install
安装检查
$ python -c "import torchvision; print(torchvision.__version__)"
>>> 0.8.0a0+8088cc9
安装 PyTorch Geometric
PyTorch Geometric 官方提供的轮子只支持到pytorch-1.6,我们前面编译安装出来的是1.8,因此需要进行编译安装
添加环境变量
export PATH=/usr/local/cuda/bin:$PATH
export CPATH=/usr/local/cuda/include:$CPATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
检查cuda版本与pytorch中使用的cuda版本是否相同
$ nvcc --version
>>> 11.1
$ python -c "import torch; print(torch.version.cuda)"
>>> 11.1
这两个显示的cuda必须相同,这就是为什么前面必须得编译安装pytorch。因为conda安装现在只提供cuda11.0对应的pytorch。
编译安装,一个一个来,编译的很慢
pip install torch-scatter
pip install torch-sparse
pip install torch-cluster
pip install torch-spline-conv
pip install torch-geometric
安装过程中如果提示 :/local/usr/cuda/bin/nvcc 找不到 这是因为环境变量里多了个冒号,需要更改CUDA_HOME环境变量
sudo gedit ~/.bashrc
将 export CUDA_HOME=$CUDA_HOME:/usr/local/cuda 改为 export CUDA_HOME=/usr/local/cuda 然后使之生效
source ~/.bashrc
自此,torch-geometric安装成功。但是别急,前方天坑。当你import torch_geometric时 大概率会失败
为什么说大概率会失败,因为很可能你看到这个博客的时候这个bug还没改。
在torch_sparse/tensor.py的126行这里,作者写的时候可能脑子抽了,有个代码错误。
原文是
def type_as(self, tensor=torch.Tensor):
把等号改成冒号,注意是英文冒号
def type_as(self, tensor:torch.Tensor):
然后再次安装检查
$ python -c "import torch_geometric; print(torch_geometric.__version__)"
>>> 1.6.1
大功告成