このパッケージは、オートグラードサポートを備えた最適化されたスパースマトリックス操作の小さな拡張ライブラリで構成されています。このパッケージは現在、次の方法で構成されています。
含まれるすべての操作は、さまざまなデータ型で動作し、CPUとGPUの両方に実装されています。 torch.sparse_coo_tensorの作成のハズルを回避するために、このパッケージは、 indexとvalueテンソルを引数として単純に渡すだけで、スパーステンソルの操作を定義します(pytorchで定義されているものと同じ形状)。 indexは個別であり、したがって微分可能ではないためvalue自動グラードサポートが付属していることに注意してください。
更新: Anaconda経由でpytorch-sparseすべての主要なOS/Pytorch/Cudaの組み合わせにインストールできるようになりましたか? pytorch >= 1.8.0インストールされていることを考えると、単に実行する
conda install pytorch-sparse -c pyg
代わりに、すべての主要なOS/Pytorch/Cudaの組み合わせにピップホイールを提供しています。こちらをご覧ください。
Pytorch 2.5.0のバイナリをインストールするには、単に実行します
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.5.0+${CUDA}.html
Pytorchのインストールに応じて、 ${CUDA} cpu 、 cu118 、 cu121 、またはcu124のいずれかに置き換える必要があります。
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ |
| macos | ✅ |
Pytorch 2.4.0のバイナリをインストールするには、単に実行します
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html
Pytorchのインストールに応じて、 ${CUDA} cpu 、 cu118 、 cu121 、またはcu124のいずれかに置き換える必要があります。
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | ✅ | ✅ |
| macos | ✅ |
注:古いバージョンのバイナリは、Pytorch 1.4.0、Pytorch 1.5.0、Pytorch 1.6.0、Pytorch 1.7.0/1.7.1、Pytorch 1.8.0/1.8.1、Pytorch 1.9.0、Pytorch 1.10.0/1.10.1/1.10.2、Pytthch 1.10.0にも提供されています。 1.12.0/1.12.1、Pytorch 1.13.0/1.13.1、Pytorch 2.0.0/2.0.1、Pytorch 2.1.0/2.1.1/2.1.2、Pytorch 2.2.0/2.2.1/2.2.2、およびPytorch 2.3.0/2.3.1(同じ手順)。古いバージョンの場合、ソースからの手動インストールを防ぐために、最新のサポートされているバージョン番号を明示的に指定するか、 pip install --no-indexを介してインストールする必要があります。ここで最新のサポートバージョン番号を調べることができます。
少なくともPytorch 1.7.0がインストールされていることを確認し、 cuda/binとcuda/includeそれぞれ$PATHと$CPATHであることを確認してください。
$ python -c "import torch; print(torch.__version__)"
>>> 1.7.0
$ echo $PATH
>>> /usr/local/cuda/bin:...
$ echo $CPATH
>>> /usr/local/cuda/include:...
Metisサポートを備えたtorch-sparseをさらに構築する場合は、Partioningの場合は、 Install.txtファイルの指示に従ってメティスライブラリをダウンロードしてインストールしてください。 include/metis.h変更することにより、メチスは64ビットIDXTYPEWIDTHでインストールする必要があることに注意してください。その後、環境変数をWITH_METIS=1設定します。
その後、実行:
pip install torch-scatter torch-sparse
NvidiaドライバーなしでDockerコンテナで走るとき、Pytorchは計算機能を評価する必要があり、故障する可能性があります。この場合、計算機能がTORCH_CUDA_ARCH_LISTを介して設定されていることを確認してください。
export TORCH_CUDA_ARCH_LIST="6.0 6.1 7.2+PTX 7.5+PTX"
torch_sparse.coalesce(index, value, m, n, op="add") -> (torch.LongTensor, torch.Tensor)
行ごとの並べ替えindex並べ替えて、重複するエントリを削除します。重複したエントリは、それらを散乱させることにより削除されます。散乱のために、 torch_scatterの操作を使用できます。
"add" ) import torch
from torch_sparse import coalesce
index = torch . tensor ([[ 1 , 0 , 1 , 0 , 2 , 1 ],
[ 0 , 1 , 1 , 1 , 0 , 0 ]])
value = torch . Tensor ([[ 1 , 2 ], [ 2 , 3 ], [ 3 , 4 ], [ 4 , 5 ], [ 5 , 6 ], [ 6 , 7 ]])
index , value = coalesce ( index , value , m = 3 , n = 2 ) print(index)
tensor([[0, 1, 1, 2],
[1, 0, 1, 0]])
print(value)
tensor([[6.0, 8.0],
[7.0, 9.0],
[3.0, 4.0],
[5.0, 6.0]])
torch_sparse.transpose(index, value, m, n) -> (torch.LongTensor, torch.Tensor)
スパースマトリックスの寸法0と1を転送します。
Falseに設定されている場合、出力を合体しません。 (デフォルト: True ) import torch
from torch_sparse import transpose
index = torch . tensor ([[ 1 , 0 , 1 , 0 , 2 , 1 ],
[ 0 , 1 , 1 , 1 , 0 , 0 ]])
value = torch . Tensor ([[ 1 , 2 ], [ 2 , 3 ], [ 3 , 4 ], [ 4 , 5 ], [ 5 , 6 ], [ 6 , 7 ]])
index , value = transpose ( index , value , 3 , 2 ) print(index)
tensor([[0, 0, 1, 1],
[1, 2, 0, 1]])
print(value)
tensor([[7.0, 9.0],
[5.0, 6.0],
[6.0, 8.0],
[3.0, 4.0]])
torch_sparse.spmm(index, value, m, n, matrix) -> torch.Tensor
密なマトリックスを備えたスパースマトリックスのマトリックス積。
import torch
from torch_sparse import spmm
index = torch . tensor ([[ 0 , 0 , 1 , 2 , 2 ],
[ 0 , 2 , 1 , 0 , 1 ]])
value = torch . Tensor ([ 1 , 2 , 4 , 1 , 3 ])
matrix = torch . Tensor ([[ 1 , 4 ], [ 2 , 5 ], [ 3 , 6 ]])
out = spmm ( index , value , 3 , 3 , matrix ) print(out)
tensor([[7.0, 16.0],
[8.0, 20.0],
[7.0, 19.0]])
torch_sparse.spspmm(indexA, valueA, indexB, valueB, m, k, n) -> (torch.LongTensor, torch.Tensor)
2つのスパーステンソルのマトリックス積。両方の入力スパースマトリックスは合体する必要があります( coalesced属性を使用して力を使用します)。
Trueに設定されている場合、両方の入力スパースマトリックスを合体します。 (デフォルト: False ) import torch
from torch_sparse import spspmm
indexA = torch . tensor ([[ 0 , 0 , 1 , 2 , 2 ], [ 1 , 2 , 0 , 0 , 1 ]])
valueA = torch . Tensor ([ 1 , 2 , 3 , 4 , 5 ])
indexB = torch . tensor ([[ 0 , 2 ], [ 1 , 0 ]])
valueB = torch . Tensor ([ 2 , 4 ])
indexC , valueC = spspmm ( indexA , valueA , indexB , valueB , 3 , 3 , 2 ) print(indexC)
tensor([[0, 1, 2],
[0, 1, 1]])
print(valueC)
tensor([8.0, 6.0, 8.0])
pytest
torch-sparse Pythonモデルに相当するC ++を含むC ++ APIも提供しています。このcondaに、 -DCMAKE_PREFIX_PATHにTorchLibを追加する必要があります(たとえば、 {CONDA}/lib/python{XX}/site-packages/torchに存在する可能性があります):
mkdir build
cd build
# Add -DWITH_CUDA=on support for CUDA support
cmake -DCMAKE_PREFIX_PATH="..." ..
make
make install