
Security News
Researcher Exposes Zero-Day Clickjacking Vulnerabilities in Major Password Managers
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
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.
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
We alternatively provide pip wheels for all major OS/PyTorch/CUDA combinations, see here.
To install the binaries for PyTorch 2.1.0, simply run
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.1.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 | β |
To install the binaries for PyTorch 2.0.0, simply run
pip install torch-scatter torch-sparse -f https://data.pyg.org/whl/torch-2.0.0+${CUDA}.html
where ${CUDA}
should be replaced by either cpu
, cu117
, or cu118
depending on your PyTorch installation.
cpu | cu117 | cu118 | |
---|---|---|---|
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 and PyTorch 1.13.0/1.13.1 (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.
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"
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.
"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)
Transposes dimensions 0 and 1 of a sparse matrix.
False
, will not coalesce the output. (default: 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
Matrix product of a sparse matrix with a dense matrix.
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)
Matrix product of two sparse tensors.
Both input sparse matrices need to be coalesced (use the coalesced
attribute to force).
True
, will coalesce both input sparse matrices. (default: 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
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
FAQs
PyTorch Extension Library of Optimized Autograd Sparse Matrix Operations
We found that torch-sparse demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Hacker Demonstrates How Easy It Is To Steal Data From Popular Password Managers
Security News
Oxlintβs new preview brings type-aware linting powered by typescript-go, combining advanced TypeScript rules with native-speed performance.
Security News
A new site reviews software projects to reveal if theyβre truly FOSS, making complex licensing and distribution models easy to understand.