이 패키지는 Autograd 지원을 갖춘 최적화 된 스파 스 매트릭스 작업의 소형 확장 라이브러리로 구성됩니다. 이 패키지는 현재 다음 방법으로 구성됩니다.
포함 된 모든 작업은 다양한 데이터 유형에 대해 작동하며 CPU 및 GPU 모두에 구현됩니다. torch.sparse_coo_tensor 생성하는 hazzle을 피하기 위해이 패키지는 단순히 index 와 value 텐서를 인수 (Pytorch에 정의 된 것과 동일한 모양으로)로 전달하여 드문 텐서의 작업을 정의합니다. index 개별적이어서 차별화되지 않으므로 값 만 value 만 AutoGrad 지원과 함께 제공됩니다.
업데이트 : 이제 모든 주요 OS/Pytorch/Cuda 조합에 대해 Anaconda를 통해 pytorch-sparse 설치할 수 있습니까? pytorch >= 1.8.0 설치되어 있으면 간단히 실행하십시오.
conda install pytorch-sparse -c pyg
대안으로 모든 주요 OS/Pytorch/CUDA 조합에 대한 PIP 휠을 제공합니다.
Pytorch 2.5.0 용 바이너리를 설치하려면 간단히 실행하십시오
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.5.0+${CUDA}.html
여기서 ${CUDA} Pytorch 설치에 따라 cpu , cu118 , cu121 또는 cu124 로 대체해야합니다.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| 리눅스 | ✅ | ✅ | ✅ | ✅ |
| 창 | ✅ | ✅ | ✅ | ✅ |
| 마코스 | ✅ |
Pytorch 2.4.0 용 바이너리를 설치하려면 간단히 실행하십시오
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html
여기서 ${CUDA} Pytorch 설치에 따라 cpu , cu118 , cu121 또는 cu124 로 대체해야합니다.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| 리눅스 | ✅ | ✅ | ✅ | ✅ |
| 창 | ✅ | ✅ | ✅ | ✅ |
| 마코스 | ✅ |
참고 : 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, Pytorch 1.11.0, Pytorch 1.12.0, Pytorch 1.12.12. 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:...
예를 들어 Partioning을 위해 Metis 지원으로 torch-sparse 추가로 구축하려면 Install.txt 파일의 지침에 따라 Metis 라이브러리를 다운로드하여 설치하십시오. Metis는 include/metis.h 변경하여 64 비트 IDXTYPEWIDTH 로 설치해야합니다. 그 후에는 환경 변수를 WITH_METIS=1 설정하십시오.
그런 다음 실행 :
pip install torch-scatter torch-sparse
Nvidia 드라이버가없는 Docker 컨테이너에서 실행할 때 Pytorch는 컴퓨팅 기능을 평가해야하며 실패 할 수 있습니다. 이 경우 Compute 기능이 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)
Row-Wise 정렬 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 또한 C ++ API를 제공하는 C ++ API를 제공합니다. 이를 위해 -DCMAKE_PREFIX_PATH 에 TorchLib 추가해야합니다 ( 예 : {CONDA}/lib/python{XX}/site-packages/torch conda 존재할 수 있습니다.
mkdir build
cd build
# Add -DWITH_CUDA=on support for CUDA support
cmake -DCMAKE_PREFIX_PATH="..." ..
make
make install