Skip to main content

PyTorch Cluster

PyPI Version Testing Status Linting Status Code Coverage


This package consists of a small extension library of highly optimized graph cluster algorithms for the use in PyTorch. The package consists of the following clustering algorithms:

All included operations work on varying data types and are implemented both for CPU and GPU.

Installation

Anaconda

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

conda install pytorch-cluster -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-cluster -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-cluster -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.4.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.4.0

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

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

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

Then run:

pip install torch-cluster

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

Graclus

A greedy clustering algorithm of picking an unmarked vertex and matching it with one its unmarked neighbors (that maximizes its edge weight). The GPU algorithm is adapted from Fagginger Auer and Bisseling: A GPU Algorithm for Greedy Graph Matching (LNCS 2012)

import torch
from torch_cluster import graclus_cluster

row = torch.tensor([0, 1, 1, 2])
col = torch.tensor([1, 0, 2, 1])
weight = torch.tensor([1., 1., 1., 1.])  # Optional edge weights.

cluster = graclus_cluster(row, col, weight)
print(cluster)
tensor([0, 0, 1])

VoxelGrid

A clustering algorithm, which overlays a regular grid of user-defined size over a point cloud and clusters all points within a voxel.

import torch
from torch_cluster import grid_cluster

pos = torch.tensor([[0., 0.], [11., 9.], [2., 8.], [2., 2.], [8., 3.]])
size = torch.Tensor([5, 5])

cluster = grid_cluster(pos, size)
print(cluster)
tensor([0, 5, 3, 0, 1])

FarthestPointSampling

A sampling algorithm, which iteratively samples the most distant point with regard to the rest points.

import torch
from torch_cluster import fps

x = torch.tensor([[-1., -1.], [-1., 1.], [1., -1.], [1., 1.]])
batch = torch.tensor([0, 0, 0, 0])
index = fps(x, batch, ratio=0.5, random_start=False)
print(index)
tensor([0, 3])

kNN-Graph

Computes graph edges to the nearest k points.

Args:

  • x (Tensor): Node feature matrix of shape [N, F].
  • k (int): The number of neighbors.
  • batch (LongTensor, optional): Batch vector of shape [N], which assigns each node to a specific example. batch needs to be sorted. (default: None)
  • loop (bool, optional): If True, the graph will contain self-loops. (default: False)
  • flow (string, optional): The flow direction when using in combination with message passing ("source_to_target" or "target_to_source"). (default: "source_to_target")
  • cosine (boolean, optional): If True, will use the Cosine distance instead of Euclidean distance to find nearest neighbors. (default: False)
  • num_workers (int): Number of workers to use for computation. Has no effect in case batch is not None, or the input lies on the GPU. (default: 1)
import torch
from torch_cluster import knn_graph

x = torch.tensor([[-1., -1.], [-1., 1.], [1., -1.], [1., 1.]])
batch = torch.tensor([0, 0, 0, 0])
edge_index = knn_graph(x, k=2, batch=batch, loop=False)
print(edge_index)
tensor([[1, 2, 0, 3, 0, 3, 1, 2],
        [0, 0, 1, 1, 2, 2, 3, 3]])

Radius-Graph

Computes graph edges to all points within a given distance.

Args:

  • x (Tensor): Node feature matrix of shape [N, F].
  • r (float): The radius.
  • batch (LongTensor, optional): Batch vector of shape [N], which assigns each node to a specific example. batch needs to be sorted. (default: None)
  • loop (bool, optional): If True, the graph will contain self-loops. (default: False)
  • max_num_neighbors (int, optional): The maximum number of neighbors to return for each element. If the number of actual neighbors is greater than max_num_neighbors, returned neighbors are picked randomly. (default: 32)
  • flow (string, optional): The flow direction when using in combination with message passing ("source_to_target" or "target_to_source"). (default: "source_to_target")
  • num_workers (int): Number of workers to use for computation. Has no effect in case batch is not None, or the input lies on the GPU. (default: 1)
import torch
from torch_cluster import radius_graph

x = torch.tensor([[-1., -1.], [-1., 1.], [1., -1.], [1., 1.]])
batch = torch.tensor([0, 0, 0, 0])
edge_index = radius_graph(x, r=2.5, batch=batch, loop=False)
print(edge_index)
tensor([[1, 2, 0, 3, 0, 3, 1, 2],
        [0, 0, 1, 1, 2, 2, 3, 3]])

Nearest

Clusters points in x together which are nearest to a given query point in y. batch_{x,y} vectors need to be sorted.

import torch
from torch_cluster import nearest

x = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch_x = torch.tensor([0, 0, 0, 0])
y = torch.Tensor([[-1, 0], [1, 0]])
batch_y = torch.tensor([0, 0])
cluster = nearest(x, y, batch_x, batch_y)
print(cluster)
tensor([0, 0, 1, 1])

RandomWalk-Sampling

Samples random walks of length walk_length from all node indices in start in the graph given by (row, col).

import torch
from torch_cluster import random_walk

row = torch.tensor([0, 1, 1, 1, 2, 2, 3, 3, 4, 4])
col = torch.tensor([1, 0, 2, 3, 1, 4, 1, 4, 2, 3])
start = torch.tensor([0, 1, 2, 3, 4])

walk = random_walk(row, col, start, walk_length=3)
print(walk)
tensor([[0, 1, 2, 4],
        [1, 3, 4, 2],
        [2, 4, 2, 1],
        [3, 4, 2, 4],
        [4, 3, 1, 0]])

Running tests

pytest

C++ API

torch-cluster also offers a C++ API that contains C++ equivalent of python models.

export Torch_DIR=`python -c 'import torch;print(torch.utils.cmake_prefix_path)'`
mkdir build
cd build
# Add -DWITH_CUDA=on support for the CUDA if needed
cmake ..
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_cluster_rocm-1.6.3.post6-cp314-cp314-manylinux_2_32_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.32+ x86-64

torch_cluster_rocm-1.6.3.post6-cp313-cp313-manylinux_2_32_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.32+ x86-64

torch_cluster_rocm-1.6.3.post6-cp312-cp312-manylinux_2_32_x86_64.whl (4.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.32+ x86-64

torch_cluster_rocm-1.6.3.post6-cp311-cp311-manylinux_2_32_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.32+ x86-64

torch_cluster_rocm-1.6.3.post6-cp310-cp310-manylinux_2_32_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.32+ x86-64

File details

Details for the file torch_cluster_rocm-1.6.3.post6-cp314-cp314-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_cluster_rocm-1.6.3.post6-cp314-cp314-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 192189e2e5958dd11ddb8b1e09144099d01b6eebac72295a2ac5d30e63f0588f
MD5 62fa75419226c4c24f2877f2006b792e
BLAKE2b-256 ac840730b4a9321db5b3619f3ea939a74d070a2d8769aa3f3b2bbdc7832c7af5

See more details on using hashes here.

File details

Details for the file torch_cluster_rocm-1.6.3.post6-cp313-cp313-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_cluster_rocm-1.6.3.post6-cp313-cp313-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 24395f9102b0b1f5a5cd3431ac1b58c8c158c84a55245bf1dc4e768675d080af
MD5 b237d2056fb10e50537a9ce9150b3970
BLAKE2b-256 1b47d345617c35406e4ebf06d47c566629758da2cc9e0c524ec8324ceaa9dcf9

See more details on using hashes here.

File details

Details for the file torch_cluster_rocm-1.6.3.post6-cp312-cp312-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_cluster_rocm-1.6.3.post6-cp312-cp312-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 235dfb6ff7f4a7d3ef988190c83f5c5ba845a1edd211361c15c96ed800be67c0
MD5 5f2f10165a7ade0608ebe907c9ba7168
BLAKE2b-256 0c9a1d64eff2d03a95f00ff2c43aab5ff3f9f47bcbbddc5c0a274781bf960e5d

See more details on using hashes here.

File details

Details for the file torch_cluster_rocm-1.6.3.post6-cp311-cp311-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_cluster_rocm-1.6.3.post6-cp311-cp311-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 19d32029f97cc1837abb488ea9f9da68638778a3fe9750a84cd89b86d53314cb
MD5 43b8e0eb71f5bdf86173b34bf34deab4
BLAKE2b-256 e97d3c92d0f2ed243e0d8dd96b1312b5f4e0738158265579166be6f34e04efa4

See more details on using hashes here.

File details

Details for the file torch_cluster_rocm-1.6.3.post6-cp310-cp310-manylinux_2_32_x86_64.whl.

File metadata

File hashes

Hashes for torch_cluster_rocm-1.6.3.post6-cp310-cp310-manylinux_2_32_x86_64.whl
Algorithm Hash digest
SHA256 f2b9ef1baa8fac1cce212fba557a1f97dffa374b4f2d3569a7683369cc36fa40
MD5 4b98773d35ed11f1c80815a201b5f6bb
BLAKE2b-256 69c9b1042ce11cecea7c41e05a072ba57c7c9327ecbdbb009bf4c9d7c5b39300

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.6.3.post6 This release

5 files

1.6.3.post5

5 files

1.6.3.post4

5 files

1.6.3.post3

5 files

1.6.3.post2

5 files

1.6.3.post1

5 files

1.6.3

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