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])