Этот пакет состоит из небольшой библиотеки расширения оптимизированных разрешенных матричных операций с поддержкой Autograd. Этот пакет в настоящее время состоит из следующих методов:
Все включены операционные работы по различным типам данных и реализованы как для процессора, так и для графического процессора. Чтобы избежать Hazzle создания torch.sparse_coo_tensor , этот пакет определяет операции на разреженных тензорах, просто передавая index и тензоры value в качестве аргументов (с теми же формами, что и в Pytorch). Обратите внимание, что только value поставляется с поддержкой автограда, поскольку index является дискретным и, следовательно, не дифференцируемым.
Обновление: теперь вы можете установить pytorch-sparse через Anaconda для всех основных комбинаций OS/Pytorch/CUDA? Учитывая, что у вас установлен pytorch >= 1.8.0 , просто запустите
conda install pytorch-sparse -c pyg
В качестве альтернативы мы предоставляем колеса PIP для всех основных комбинаций 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
где ${CUDA} следует заменить либо cpu , cu118 , cu121 или cu124 в зависимости от вашей установки Pytorch.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| Окна | ✅ | ✅ | ✅ | ✅ |
| macOS | ✅ |
Чтобы установить двоичные файлы для Pytorch 2.4.0, просто запустите
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html
где ${CUDA} следует заменить либо cpu , cu118 , cu121 или cu124 в зависимости от вашей установки Pytorch.
cpu | cu118 | cu121 | cu124 | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | ✅ | ✅ |
| Окна | ✅ | ✅ | ✅ | ✅ |
| 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, Pytorch 1.11.0, Pytorch 1.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:...
Если вы хотите дополнительно построить torch-sparse с поддержкой Metis, например, для приостановки, пожалуйста, загрузите и установите библиотеку Metis, следуя инструкциям в файле Install.txt . Обратите внимание, что Метис должен быть установлен с 64 -битным IDXTYPEWIDTH путем изменения include/metis.h . После этого установите переменную среды WITH_METIS=1 .
Затем беги:
pip install torch-scatter torch-sparse
При запуске в контейнере Docker без драйвера Nvidia 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)
Матричный продукт двух редких тензоров. Оба входных разреженных матриц должны быть объединены (используйте 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 также предлагает API C ++, который содержит C ++, эквивалентный моделей Python. Для этого нам нужно добавить TorchLib в -DCMAKE_PREFIX_PATH ( например , он может существовать в {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