背景

最近在复现一些使用老版本python、pytorch的深度学习代码时遇到了一些问题,尝试使用pip install pytorch==$指定版本$时,发现pip已经不支持安装如此老的版本,或者即使在安装后也无法使用GPUcuda

安装方法

首先需要准备一个conda,conda/miniconda都可,创建我们所需要python版本的虚拟环境

conda create -n myenv python=3.7

在这里我需要的python版本是3.7,myenv可以更改为你想取的任何虚拟环境名称
接下来我们进入刚刚创建的环境

conda activate myenv

接下来是配置所需要的pytorch、cuDNN、cudatoolkit
首先我们先使用conda search搜索可用的pytorch版本

conda search pytorch -c pytorch

接下来会出现搜索结果,如下所示

# Name                       Version           Build  Channel             
pytorch                        0.2.0 py27cuda7.5cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py27cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.2.0 py27cuda8.0cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py27cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.2.0 py35cuda7.5cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py35cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.2.0 py35cuda8.0cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py35cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.2.0 py36cuda7.5cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py36cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.2.0 py36cuda8.0cudnn5.1_0  pkgs/main           
pytorch                        0.2.0 py36cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py27cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py27cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py27cuda8.0cudnn7.0_0  pkgs/main           
pytorch                        0.3.0 py35cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py35cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py35cuda8.0cudnn7.0_0  pkgs/main           
pytorch                        0.3.0 py36cuda7.5cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py36cuda8.0cudnn6.0_0  pkgs/main           
pytorch                        0.3.0 py36cuda8.0cudnn7.0_0  pkgs/main           
pytorch                        0.3.1  py27had95abb_0  pkgs/main           
pytorch                        0.3.1  py27hfbe7015_1  pkgs/main           
pytorch                        0.3.1  py35had95abb_0  pkgs/main           
pytorch                        0.3.1  py35hfbe7015_1  pkgs/main           
pytorch                        0.3.1  py36had95abb_0  pkgs/main           
pytorch                        0.3.1  py36hfbe7015_1  pkgs/main           
pytorch                        0.4.0  py27hd73e86b_0  pkgs/main           
pytorch                        0.4.0  py27hdf912b8_0  pkgs/main           
pytorch                        0.4.0  py35hd73e86b_0  pkgs/main           
pytorch                        0.4.0  py35hdf912b8_0  pkgs/main           
pytorch                        0.4.0  py36hd73e86b_0  pkgs/main           
pytorch                        0.4.0  py36hdf912b8_0  pkgs/main           
pytorch                        0.4.1  py27ha74772b_0  pkgs/main           
pytorch                        0.4.1  py35ha74772b_0  pkgs/main           
pytorch                        0.4.1  py36ha74772b_0  pkgs/main           
pytorch                        0.4.1  py37ha74772b_0  pkgs/main           
pytorch                        1.0.1 cuda100py27he554f03_0  pkgs/main           
pytorch                        1.0.1 cuda100py36he554f03_0  pkgs/main           
pytorch                        1.0.1 cuda100py37he554f03_0  pkgs/main           
pytorch                        1.0.1 cuda80py27ha8650f8_0  pkgs/main           
pytorch                        1.0.1 cuda80py36ha8650f8_0  pkgs/main           
pytorch                        1.0.1 cuda80py37ha8650f8_0  pkgs/main           
pytorch                        1.0.1 cuda90py27h8b0c50b_0  pkgs/main           
pytorch                        1.0.1 cuda90py36h8b0c50b_0  pkgs/main           
pytorch                        1.0.1 cuda90py37h8b0c50b_0  pkgs/main           
pytorch                        1.0.1 cuda92py27h65efead_0  pkgs/main           
pytorch                        1.0.1 cuda92py36h65efead_0  pkgs/main           
pytorch                        1.0.1 cuda92py37h65efead_0  pkgs/main           
pytorch                        1.1.0 cuda100py27he554f03_0  pkgs/main           
pytorch                        1.1.0 cuda100py36he554f03_0  pkgs/main           
pytorch                        1.1.0 cuda100py37he554f03_0  pkgs/main           
pytorch                        1.1.0 cuda90py27h8b0c50b_0  pkgs/main           
pytorch                        1.1.0 cuda90py36h8b0c50b_0  pkgs/main           
pytorch                        1.1.0 cuda90py37h8b0c50b_0  pkgs/main           
pytorch                        1.1.0 cuda92py27h65efead_0  pkgs/main           
pytorch                        1.1.0 cuda92py36h65efead_0  pkgs/main           
pytorch                        1.1.0 cuda92py37h65efead_0  pkgs/main           
pytorch                        1.2.0 cpu_py27h00be3c6_0  pkgs/main           
pytorch                        1.2.0 cpu_py36h00be3c6_0  pkgs/main           
pytorch                        1.2.0 cpu_py37h00be3c6_0  pkgs/main           
pytorch                        1.2.0 cuda100py27h938c94c_0  pkgs/main           
pytorch                        1.2.0 cuda100py36h938c94c_0  pkgs/main           
pytorch                        1.2.0 cuda100py37h938c94c_0  pkgs/main           
pytorch                        1.2.0 cuda92py27hd3e106c_0  pkgs/main           
pytorch                        1.2.0 cuda92py36hd3e106c_0  pkgs/main 

在build那一列我们可以看到py后面的数字代表的是python版本、cuda后面的数字代表的是cuda\cudatoolkit版本、cudnn后面数字代表的是cuDNN版本
接下来我们执行cudatoolkit、cudnn的搜索,目的是找出符合我们要求并且在这三次搜索中都能下载到的版本

conda search cuDNN -c conda-forge
conda search cudatoolkit -c conda-forge

搜索结果不再展示,和pytorch搜索结果格式一致
然后我们需要在这三个搜索结果中找出满足以下三个条件的版本:

  1. pytorch、cudatoolkit、cudnn版本都可以在搜索结果中找到
  2. 这三个版本同时出现在pytorch搜索结果中,比如pytorch 2.4.1 py3.8_cuda11.8_cudnn9.1.0_0 pytorch,这里就表明py3.8_cuda11.8_cudnn9.1.0_0这三个版本是适配的
  3. cuda版本也就是cudatoolkit版本小于nvidia-smi中显示的cuda版本

找到同时满足这三个条件的版本后,我们可以进行下载并安装

conda install cudnn=8.3.2.44 -c conda-forge
conda install cudatoolkit=11.6.0 -c conda-forge
conda install pytorch=1.12.0 torchvision cudatoolkit=11.6 cudnn=8.3.2 -c pytorch

以上的版本是我自己需要的,只是一个示例,在实践中需要自己根据上面的条件找出自己需要的版本,然后利用这三条语句分别下载安装
现在我们就已经安装好了gpu版本的pytorch、cuda
可以运行这份代码来检测一下是否安装成功

import torch

print(torch.__version__)  # 应该输出 你安装的pytorch版本
print(torch.cuda.is_available())  # 应该输出 True,如果 GPU 版本安装正确且驱动程序设置无误
print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "No GPU device available")

如果输出的是

1.12.0(刚刚下载的版本)
True
NVIDIA RTX 3090(服务器中的GPU型号)

便证明安装成功
到此为止我们的gpu版本pytorch便安装成功,以及可以运行简单的GPU上运行的代码
接下来我们进行
torch-scatter
torch-sparse
torch-cluster
torch-spline-conv
这四个常用的包的安装
由于在老版本pytorch环境中用到的这四种包的版本通常也比较老,不易通过pip指令直接下载
我们采用直接下载对应whl文件的方法来下载安装
首先我们打开https://pytorch-geometric.com/whl/
在这里插入图片描述
可以看到网页中有很多版本的选项,我们找到刚刚下载安装的torch、cuda版本并点进去,比如我安装的是pytorch1.12.0 cudatoolkit11.6,那么就点击torch-1.12.0+cu116
在这里插入图片描述
可以看到网页中有很多whl文件可以下载
选择对应版本的whl文件下载即可
比如我要下载torch-scatter,就找到torch-scatter区域,找到cp37,注意这里的cp后面的数字代表的是python版本,我刚刚创建环境时使用的是python3.7版本,那么就选择cp37,此时我使用的是Linux系统所以选择Linux版本
选择好后点击即可下载
下载完成后将文件通过scp等方法传到服务器上
再在终端中执行

pip install torch_spline/torch_scatter-2.1.0+pt112cu116-cp37-cp37m-linux_x86_64.whl

即可完成下载安装,注意示例中的路径需要更改为实际路径

Logo

欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐