1 问题描述
最近在学习GNN,需要使用PyTorch Geometric(PyG)库。在安装PyG的过程中,遇到了torch-sparse
安装失败的问题,错误提示为:
ERROR: Failed building wheel for torch-sparse
本文将详细记录问题的解决过程,并提供多种解决方案,帮助同样遇到问题的uu顺利安装PyG。
2 PyG安装流程
PyG的安装依赖于以下几个核心库:
torch-scatter
torch-sparse
torch-cluster
torch-spline-conv
torch-geometric
通常的安装命令如下:
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
pip install torch-sparse -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.10.0+cpu.html
pip install torch-geometric
然而,在安装torch-sparse
时,我这里遇到Failed building wheel for torch-sparse
的错误。
3. 解决方案
3.1 检查PyTorch和CUDA版本
首先,确保你的PyTorch和CUDA版本与PyG兼容。可以通过以下命令查看PyTorch和CUDA版本:
import torch
print(torch.__version__)
print(torch.version.cuda)
3.2 手动指定版本安装
如果版本不匹配,可以手动指定torch-sparse
的版本进行安装。以下是具体步骤:
-
PyG的官方Wheel文件页面:
https://pytorch-geometric.com/whl/index.html
顺便放一下官网链接:https://pytorch-geometric.readthedocs.io/en/latest/ -
找到与你的PyTorch和CUDA版本匹配的
torch-sparse
版本。例如,我的PyTorch版本是2.4.1
,CUDA版本是cu118
,使用以下命令:pip install torch-sparse==0.6.18 -f https://pytorch-geometric.com/whl/torch-2.4.1+cu118.html
-
依次安装其他依赖库:
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-2.4.1+cu118.html pip install torch-cluster -f https://pytorch-geometric.com/whl/torch-2.4.1+cu118.html pip install torch-spline-conv -f https://pytorch-geometric.com/whl/torch-2.4.1+cu118.html pip install torch-geometric
3.3 直接下载Wheel文件安装
如果还是不行,可以直接从PyG的Wheel文件页面下载对应的.whl
文件,然后使用pip
安装。例如:
pip install torch_sparse-0.6.18-cp310-cp310-win_amd64.whl
3.4 安装构建工具
如果缺少构建工具,可以尝试安装以下工具:
- Windows:安装Visual Studio Build Tools
- Linux:安装
cmake
和g++
:sudo apt-get install cmake g++
4 验证安装成功
安装完成后,可以通过以下一个小的demo来验证PyG是否安装成功:
import torch
from torch_geometric.data import Data
# 创建图数据demo
edge_index = torch.tensor([[0, 1], [1, 2]], dtype=torch.long)
x = torch.tensor([[1], [2], [3]], dtype=torch.float)
data = Data(x=x, edge_index=edge_index.t().contiguous())
print(data)
输出如下:
Data(x=[3, 1], edge_index=[2, 2])