Pytorch:版本冲突与解决
花了三天时间终于完成了在某校集群上pytorch环境的安装,记录一下中途遇到的各种问题和解决方案
在安装各种库/软件时,一定要先看看自己的系统支持什么版本
yysy这校园网在图书馆之外的地方都巨慢
安装过程
众所周知,学校的集群是断网的,只能够通过校园网访问。所以一般网上需要联网的安装方法都无法使用,必须要把安装包下载下来,通过scp上传到服务器上才能进行安装。
所幸服务器上至少还有个yum和pip的本地源
因为服务器上本地源,所以我默认本地源软件和系统硬件配置是适配的,直接使用 pip 安装。
pip3 install torch==1.9.0 torchvision==1.10.0 --user
pip3 install pytorch geometric --user
之后快乐的运行,遇到报错显示缺少 torch_sparse 模块。信息检索之后再次安装:
pip3 install torch_cluster
pip3 install torch_scatter
pip3 install torch_sparse
pip3 install torch_spline_conv
再运行,遇到报错:
File "/home/NAS/yysun/.local/lib/python3.6/site-packages/torch_sparse/__init__.py", line 16, in <module>
f'{library}_{suffix}', [osp.dirname(__file__)]).origin)
AttributeError: 'NoneType' object has no attribute 'origin'
好像是导入 torch_sparse 模块的时候遇到问题,chatgpt 搜索一下:
这个错误通常是由于找不到 torch_sparse 库中某个文件的路径所致。这可能是因为库没有正确安装或者是路径没有正确设置。
您可以尝试以下几种方法来解决这个问题:
确认您已经安装了最新版本的 torch_sparse 库。您可以运行以下命令来更新该库:
pip install --upgrade torch-sparse
确认 torch_sparse 目录已经正确设置。您可以使用以下命令来确认该库的安装路径是否正确:
python -c "import torch_sparse; print(torch_sparse)" 如果这个命令无法正常运行,那么您可能需要重新安装并配置 torch_sparse 库。
如果前两种方法都没有解决问题,请尝试手动将 torch_sparse 库添加到 sys.path 中。您可以使用以下代码实现:
import sys sys.path.append('/path/to/torch_sparse') # 将路径替换为
torch_sparse库所在的路径导入其他库和模块
from NeuralNetwork import *
注意,这不是一个长期的解决方案,应该在找到更好的解决方案之后尽早删除它。
试了之后没有什么用,在 github 官方的 issue 上看到了这个帖子,内容大概是说 torch_scatter 的版本不匹配。这才意识到存在版本不兼容的问题。
查看显卡信息:
nvidia-smi
或者显卡型号之后去nvidia官网上查询对应的 cuda 版本,之后再下载对应的版本。按照官网上的流程下载完毕之后,检查是否安装完成。
nvcc --version
之后再按照 cuda 的版本选择 torch 应该安装的版本,版本兼容信息查看网址。并在Pytorch官网上查看应该下载的版本。官网上会给出这样一条命令:
# CUDA 11.1
pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html
pip -f 命令的含义是在 -f 后的 url 中获取安装目录与安装包。所以在这里需要手动访问 -f 之后的网址,找到并下载自己需要对应版本的 .whl 文件,通过 scp 上传之后使用命令:
pip3 install (balabala).whl --user
装完之后,在 https://data.pyg.org/whl/ 上找到对应的 torch 和 CUDA 版本,使用同样的方法安装依赖的库。
在完成上述步骤之后,再次快乐的运行程序。结果显示报错:
File "/home/NAS/yysun/.local/lib/python3.6/site-packages/torchvision/datasets/lsun.py", line 2, in <module>
from PIL import Image
File "/home/NAS/yysun/.local/lib/python3.6/site-packages/PIL/Image.py", line 114, in <module>
from . import _imaging as core
ImportError: libjpeg.so.8: cannot open shared object file: No such file or directory
好家伙,缺少了 libjpeg.so.8 动态链接库。查询是否存在对应的软件并安装。
yum search *libjpeg*
sudo yum install libjpeg-turbo-devel.x86_64
结果安装完之后还是没有,检查安装目录下有没有 libjpeg.so.8
rpm -ql libjpeg-turbo-devel.x86_64
ls /usr/lib64 | grep libjepg
结果发现只有 /usr/lib64/libjpeg.so。这时候看到一篇文章,里面提供了 libjpeg 库的下载地址和安装方法,按照博客的方法安装完之后再次运行,没有报错。
总结
- 配置环境时一定要看系统是否支持以及软件之间的版本兼容
- 编译源码的时候各种路径一定要弄清楚之后再填,99%的错误源于路径错误导致的动态链接库错误