Skip to main content

PyTorch Sparse

PyPI Version Testing Status Linting Status Code Coverage


This package consists of a small extension library of optimized sparse matrix operations with autograd support. This package currently consists of the following methods:

All included operations work on varying data types and are implemented both for CPU and GPU. To avoid the hazzle of creating torch.sparse_coo_tensor, this package defines operations on sparse tensors by simply passing index and value tensors as arguments (with same shapes as defined in PyTorch). Note that only value comes with autograd support, as index is discrete and therefore not differentiable.

Installation

Anaconda

Update: You can now install pytorch-sparse via Anaconda for all major OS/PyTorch/CUDA combinations 🤗 Given that you have pytorch >= 1.8.0 installed, simply run

conda install pytorch-sparse -c pyg

Binaries

We alternatively provide pip wheels for all major OS/PyTorch/CUDA combinations, see here.

PyTorch 2.4

To install the binaries for PyTorch 2.4.0, simply run

pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.4.0+${CUDA}.html

where ${CUDA} should be replaced by either cpu, cu118, cu121, or cu124 depending on your PyTorch installation.

cpu cu118 cu121 cu124
Linux
Windows
macOS

PyTorch 2.3

To install the binaries for PyTorch 2.3.0, simply run

pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.3.0+${CUDA}.html

where ${CUDA} should be replaced by either cpu, cu118, or cu121 depending on your PyTorch installation.

cpu cu118 cu121
Linux
Windows
macOS

Note: Binaries of older versions are also provided for 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/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, and PyTorch 2.2.0/2.2.1/2.2.2 (following the same procedure). For older versions, you need to explicitly specify the latest supported version number or install via pip install --no-index in order to prevent a manual installation from source. You can look up the latest supported version number here.

From source

Ensure that at least PyTorch 1.7.0 is installed and verify that cuda/bin and cuda/include are in your $PATH and $CPATH respectively, e.g.:

$ python -c "import torch; print(torch.__version__)"
>>> 1.7.0

$ echo $PATH
>>> /usr/local/cuda/bin:...

$ echo $CPATH
>>> /usr/local/cuda/include:...

If you want to additionally build torch-sparse with METIS support, e.g. for partioning, please download and install the METIS library by following the instructions in the Install.txt file. Note that METIS needs to be installed with 64 bit IDXTYPEWIDTH by changing include/metis.h. Afterwards, set the environment variable WITH_METIS=1.

Then run:

pip install torch-scatter torch-sparse

When running in a docker container without NVIDIA driver, PyTorch needs to evaluate the compute capabilities and may fail. In this case, ensure that the compute capabilities are set via TORCH_CUDA_ARCH_LIST, e.g.:

export TORCH_CUDA_ARCH_LIST="6.0 6.1 7.2+PTX 7.5+PTX"

Functions

Coalesce

torch_sparse.coalesce(index, value, m, n, op="add") -> (torch.LongTensor, torch.Tensor)

Row-wise sorts index and removes duplicate entries. Duplicate entries are removed by scattering them together. For scattering, any operation of torch_scatter can be used.

Parameters

  • index (LongTensor) - The index tensor of sparse matrix.
  • value (Tensor) - The value tensor of sparse matrix.
  • m (int) - The first dimension of sparse matrix.
  • n (int) - The second dimension of sparse matrix.
  • op (string, optional) - The scatter operation to use. (default: "add")

Returns

  • index (LongTensor) - The coalesced index tensor of sparse matrix.
  • value (Tensor) - The coalesced value tensor of sparse matrix.

Example

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

Transpose

torch_sparse.transpose(index, value, m, n) -> (torch.LongTensor, torch.Tensor)

Transposes dimensions 0 and 1 of a sparse matrix.

Parameters

  • index (LongTensor) - The index tensor of sparse matrix.
  • value (Tensor) - The value tensor of sparse matrix.
  • m (int) - The first dimension of sparse matrix.
  • n (int) - The second dimension of sparse matrix.
  • coalesced (bool, optional) - If set to False, will not coalesce the output. (default: True)

Returns

  • index (LongTensor) - The transposed index tensor of sparse matrix.
  • value (Tensor) - The transposed value tensor of sparse matrix.

Example

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

Sparse Dense Matrix Multiplication

torch_sparse.spmm(index, value, m, n, matrix) -> torch.Tensor

Matrix product of a sparse matrix with a dense matrix.

Parameters

  • index (LongTensor) - The index tensor of sparse matrix.
  • value (Tensor) - The value tensor of sparse matrix.
  • m (int) - The first dimension of sparse matrix.
  • n (int) - The second dimension of sparse matrix.
  • matrix (Tensor) - The dense matrix.

Returns

  • out (Tensor) - The dense output matrix.

Example

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

Sparse Sparse Matrix Multiplication

torch_sparse.spspmm(indexA, valueA, indexB, valueB, m, k, n) -> (torch.LongTensor, torch.Tensor)

Matrix product of two sparse tensors. Both input sparse matrices need to be coalesced (use the coalesced attribute to force).

Parameters

  • indexA (LongTensor) - The index tensor of first sparse matrix.
  • valueA (Tensor) - The value tensor of first sparse matrix.
  • indexB (LongTensor) - The index tensor of second sparse matrix.
  • valueB (Tensor) - The value tensor of second sparse matrix.
  • m (int) - The first dimension of first sparse matrix.
  • k (int) - The second dimension of first sparse matrix and first dimension of second sparse matrix.
  • n (int) - The second dimension of second sparse matrix.
  • coalesced (bool, optional): If set to True, will coalesce both input sparse matrices. (default: False)

Returns

  • index (LongTensor) - The output index tensor of sparse matrix.
  • value (Tensor) - The output value tensor of sparse matrix.

Example

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

Running tests

pytest

C++ API

torch-sparse also offers a C++ API that contains C++ equivalent of python models. For this, we need to add TorchLib to the -DCMAKE_PREFIX_PATH (e.g., it may exists in {CONDA}/lib/python{X.X}/site-packages/torch if installed via conda):

mkdir build
cd build
# Add -DWITH_CUDA=on support for CUDA support
cmake -DCMAKE_PREFIX_PATH="..." ..
make
make install

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

torch_sparse_rocm-0.6.18.post6-cp314-cp314-manylinux_2_32_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.32+ x86-64

torch_sparse_rocm-0.6.18.post6-cp313-cp313-manylinux_2_32_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.32+ x86-64

torch_sparse_rocm-0.6.18.post6-cp312-cp312-manylinux_2_32_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.32+ x86-64

torch_sparse_rocm-0.6.18.post6-cp311-cp311-manylinux_2_32_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.32+ x86-64

torch_sparse_rocm-0.6.18.post6-cp310-cp310-manylinux_2_32_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.32+ x86-64

File details

Details for the file torch_sparse_rocm-0.6.18.post6-cp314-cp314-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_sparse_rocm-0.6.18.post6-cp314-cp314-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 dcd5fbf9c4615a6131ab40c81da631ed138786c182aa23f426edf32728630cfa
MD5 e96a595edcbfdb2343cc5b9d1dd8b694
BLAKE2b-256 c6ea47dd266835a8fb6292d973edbf8e206cb97c3581c20e1a15d99d8782669c

See more details on using hashes here.

File details

Details for the file torch_sparse_rocm-0.6.18.post6-cp313-cp313-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_sparse_rocm-0.6.18.post6-cp313-cp313-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 795adc5dba2c2cedb633bf6ffbe652e999c631bf3189fe270e0254ded696f9e9
MD5 0ee9d9dd0ee33190069b12dcdd933a1d
BLAKE2b-256 70ca2a85c8ebab61abc69fc40ce4b8f95e48b20c88aafc3592b5d0e183cd8a87

See more details on using hashes here.

File details

Details for the file torch_sparse_rocm-0.6.18.post6-cp312-cp312-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_sparse_rocm-0.6.18.post6-cp312-cp312-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 332feaf3b9864e1894c003b229c1025869bfa6ad940f0fb17d0e6b9638e397fa
MD5 c027badf28c23d360430dfdbd50d306b
BLAKE2b-256 2fc35e99568e30636b3861eeda91238628e76dcf79ae1eb3daa3bd81bb02c681

See more details on using hashes here.

File details

Details for the file torch_sparse_rocm-0.6.18.post6-cp311-cp311-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_sparse_rocm-0.6.18.post6-cp311-cp311-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 115022953d0949964940c1ade41fc5694a2cab5cfc5a510dcf2011e63220db8c
MD5 6895a7cbe2a5c39a54447c4ee9e3095d
BLAKE2b-256 694efd44aa88c9ea7209dff2e85a898f3533f412af3034d35b3c2fb3dd839e7f

See more details on using hashes here.

File details

Details for the file torch_sparse_rocm-0.6.18.post6-cp310-cp310-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_sparse_rocm-0.6.18.post6-cp310-cp310-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 b08dc328fff9bbb2cdccaf7d4fa81f0129e5b6c52ae945dddecd3a509cd52a7c
MD5 ecfd771c7eb29f653d3b3e6bac0b5217
BLAKE2b-256 5acb9c90fcbefd015ba8ba69f64cf9197c6c4adfc6f050117950dcced74d1c43

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.6.18.post6 This release

5 files

0.6.18.post5

5 files

0.6.18.post4

5 files

0.6.18.post3

5 files

0.6.18.post2

5 files

0.6.18.post1

5 files

0.6.18

5 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page