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

Metadata

Release files for torch-sparse-rocm 0.6.18.post7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for torch-sparse-rocm 0.6.18.post7
File
torch_sparse_rocm-0.6.18.post7-cp314-cp314-manylinux_2_32_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.32+ x86-64 Details
torch_sparse_rocm-0.6.18.post7-cp313-cp313-manylinux_2_32_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.32+ x86-64 Details
torch_sparse_rocm-0.6.18.post7-cp312-cp312-manylinux_2_32_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.32+ x86-64 Details
torch_sparse_rocm-0.6.18.post7-cp311-cp311-manylinux_2_32_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.32+ x86-64 Details
torch_sparse_rocm-0.6.18.post7-cp310-cp310-manylinux_2_32_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.32+ x86-64 Details

Total release size: 36.1 MB

Release files / torch_sparse_rocm-0.6.18.post7-cp314-cp314-manylinux_2_32_x86_64.whl

Download URL torch_sparse_rocm-0.6.18.post7-cp314-cp314-manylinux_2_32_x86_64.whl
Size 7.2 MB
Tags CPython 3.14 Linux glibc 2.32+ x86-64
SHA-256 checksum
How to use checksums
d11d6cf1b52c4fd39e45b8f3d06e69b6d7e73d5ad38013733791e9321ee2b1e2
BLAKE2b-256 checksum
How to use checksums
d2d7941bbb29bff39e0f67fbf369d44d370ef1481b6175c0d0306ac40f598101
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / torch_sparse_rocm-0.6.18.post7-cp313-cp313-manylinux_2_32_x86_64.whl

Download URL torch_sparse_rocm-0.6.18.post7-cp313-cp313-manylinux_2_32_x86_64.whl
Size 7.2 MB
Tags CPython 3.13 Linux glibc 2.32+ x86-64
SHA-256 checksum
How to use checksums
69209c41d5c14ce827ec3cc7cef38cb4e9b29a86c87993296db41e0ed9290503
BLAKE2b-256 checksum
How to use checksums
bbc5431c3f5945a1ee45fc0cc5eadce7534bb80cd24c83ac0d707cf52e0d1336
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / torch_sparse_rocm-0.6.18.post7-cp312-cp312-manylinux_2_32_x86_64.whl

Download URL torch_sparse_rocm-0.6.18.post7-cp312-cp312-manylinux_2_32_x86_64.whl
Size 7.2 MB
Tags CPython 3.12 Linux glibc 2.32+ x86-64
SHA-256 checksum
How to use checksums
b1870c8462f5a2e6491830ddc19fdde9f4b0fa6010ab822c4951466de7cecb34
BLAKE2b-256 checksum
How to use checksums
dc580d3207858dbf94eb4badca4dbbb25f585ffad837f01fdf3fe05bb62f73bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / torch_sparse_rocm-0.6.18.post7-cp311-cp311-manylinux_2_32_x86_64.whl

Download URL torch_sparse_rocm-0.6.18.post7-cp311-cp311-manylinux_2_32_x86_64.whl
Size 7.2 MB
Tags CPython 3.11 Linux glibc 2.32+ x86-64
SHA-256 checksum
How to use checksums
52883377e1dd679225ddf55d674301cb122c6b49d4e39cfa4a709908a376d5da
BLAKE2b-256 checksum
How to use checksums
0a70f94ce5c671d0040ac936131e8a498de333ebe4bee8d4b207d8908b544c1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / torch_sparse_rocm-0.6.18.post7-cp310-cp310-manylinux_2_32_x86_64.whl

Download URL torch_sparse_rocm-0.6.18.post7-cp310-cp310-manylinux_2_32_x86_64.whl
Size 7.2 MB
Tags CPython 3.10 Linux glibc 2.32+ x86-64
SHA-256 checksum
How to use checksums
2493d6c2555a5a75ef3719048ca5d8149d1aa1b1ae0fe05f1ff687b17bacc10f
BLAKE2b-256 checksum
How to use checksums
27dc83c85f131fbfba48fd4ad31c57985050cd281d9f05b6d36519306399d196
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page