搞了一晚上,这里把要点说一下:
官网 PyTorch 提供了pip、conda等四种安装方式,我尝试了pip和conda这两种。之前一直认为pip才是最简洁的方式,今天算是对这两种方式有了个全面的了解。先说结论:建议用conda安装,不建议pip。
官网首页自然是展示了最新的版本,但由于我的PyTorch程序限制使用1.4.0,CUDA版本是10.0,和官网是不一致的,只能自己写规则下载对应的版本。虽然PyTorch官网也给出了previous version供下载,也贴心地罗列了各版本的下载命令,但千人千面,每个人的情况都是不一样的,必须自己按照实际情况修改。比如下面的范例:
# CUDA 10.0
conda install pytorch==1.2.0 torchvision==0.4.0 cudatoolkit=10.0 -c pytorch
根据我自身情况,我改成了如下:
# CUDA 10.0
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.0 -c pytorch
这里的pytorch和torchvision,以及cudatoolkit是有一个对应关系的,一般在安装过程中如果不匹配,系统会给出提示,并罗列所有的匹配版本供参考。具体可以上网查,我这里简单罗列下:
pytorch==1.3.0 torchvision==0.4.0 cudatoolkit=9.2 or 10.0
pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.0
pytorch==1.5.0 torchvision==0.6.0 cudatoolkit=10.1
这里不的不提pip的垃圾之处了,我按照官网demo命令,修改并执行了如下命令:
# CUDA 10.0
pip install torch===1.4.0 torchvision===0.5.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html
虽然显示标注了cuda10.0版本、成功安装,但后期发现pytorch仍然给出的是cuda10.1版本,导致cuda和后续一些包全部不兼容。所以不建议用pip了。
那如何查看torch cuda安装的版本对不对?执行下面两条命令,对比一下。
$ python -c "import torch; print(torch.version.cuda)"
>>> 10.0
$ nvcc --version
>>> 10.0
我用pip安装以后,第一个版本总是显示10.1。
PyTorch Geometric(以下简称PyG)的官网相当贴心了,为了防止你在没安PyG之前,PyTorch已经出问题,这个官网前四个步骤一步步教你仔细检查PyTorch装的对不对。我刚才提到的torch cuda的问题就是这样检查出来的。
Installation - pytorch_geometric 1.4.3 documentation
这里按流程走就好,再次强调,一定根据自己的实际环境去配置、编写conda或者pip命令,一定不要自己想当然的 pip install xxx、conda install xxx,版本装错了,很麻烦!
官网给的四个包,不要忘了安装:
$ pip install torch-scatter==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.5.0.html
$ pip install torch-sparse==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.5.0.html
$ pip install torch-cluster==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.5.0.html
$ pip install torch-spline-conv==latest+${CUDA} -f https://pytorch-geometric.com/whl/torch-1.5.0.html
$ python setup.py install or pip install torch-geometric
注意要把${CUDA} 替换成cu100或者cu101或者你的版本,+号和latest都不要变,torch-1.5.0最好也换成你自己的torch版本号,我换成了1.4.0,至于1.5.0是否有影响,这个我没有测试。
参考文献:
都在文章里了,经验:网贴可以看,但是以stackflow和外网为主,中网可以看,目的是懂得为什么会报错,但是实际操作不要按中网的来。外网也没有现成解决方案的,直接去官网上读文档。