Skip to content
Search

Pointcept

lastmod 2026-10-27created 2026-02-1340 edits

Perceive the world with sparse points, a codebase for point cloud perception research. Latest works: Concerto (NeurIPS'25), Sonata (CVPR'25 Highlight), PTv3 (CVPR'24 Oral)

A point cloud perception research framework with unified support for PTv3, Sonata, Concerto, and more

Categories

Implementations

It is also an official implementation of the following paper:

  • 🚀 Utonia - Toward One Encoder for All Point Clouds
  • Concerto - Joint 2D-3D Self-Supervised Learning Emerges Spatial Representations
  • Sonata - Self-Supervised Learning of Reliable Point Representations
  • Point Transformer V3 - Simpler, Faster, Stronger
  • OA-CNNs - Omni-Adaptive Sparse CNNs for 3D Semantic Segmentation
  • Towards Large-scale 3D Representation Learning with Multi-dataset Point Prompt Training
  • Masked Scene Contrast - A Scalable Framework for Unsupervised 3D Representation Learning
  • Learning Context-aware Classifier for Semantic Segmentation (3D Part)
  • Point Transformer V2 - Grouped Vector Attention and Partition-based Pooling
  • Point Transformer

Additionally, Pointcept integrates the following excellent work (contain above):

  • Backbone: MinkUNet, SpUNet, SPVCNN, OACNNs, PTv1, PTv2, PTv3, StratifiedFormer, OctFormer, Swin3D
  • Semantic Segmentation: Mix3d, CAC
  • Instance Segmentation: PointGroup
  • Pre-training: PointContrast, Contrastive Scene Contexts, Masked Scene Contrast, Point Prompt Training, Sonata, Concerto
  • Datasets: ScanNet, ScanNet200, ScanNet++, S3DIS, ArkitScene, HM3D, Matterport3D, Structured3D, SemanticKITTI, nuScenes, ModelNet40, Waymo

Requirements

  • Ubuntu: 18.04 and above.
  • CUDA: 11.3 and above.
  • PyTorch: 1.10.0 and above.

Blackwell Architecture support

You must use CUDA Toolkit 12.8 or later.

Applications built using CUDA Toolkit 12.8 or earlier

CUDA applications built using CUDA Toolkit versions 2.1 through 12.8 are compatible with Blackwell GPUs as long as they are built to include PTX versions of their kernels. You can test this by forcing the PTX to be JIT-compiled at application load time with the following steps.

  1. Download and install the latest driver from https://www.nvidia.com/drivers.
  2. Set the environment variable CUDA_FORCE_PTX_JIT=1
  3. Launch the application.

With CUDA_FORCE_PTX_JIT=1 set, the GPU binary code embedded in the application binary is ignored.

Instead, the PTX code of each kernel is JIT-compiled to produce GPU binary code. Applications that do not include PTX code will not run. This means the application is not compatible with the Blackwell architecture and must be rebuilt for compatibility.

Conversely, if the application works normally with this environment variable set, it is compatible with the Blackwell architecture.

Installing required packages

sudo apt install libsparsehash-dev gcc-13 g++-13

Installing spconv

Because spconv-cu128 was not found in the package registry and you require spconv-cu128, we can conclude that your requirements are unsatisfiable.

The cause is that the spconv-cu128 wheel is not yet on PyPI. The latest is spconv-cu126 (2.3.8).

Three ways to deal with it:

Option

Description

Pros and cons

Use spconv-cu126

Run the cu126 wheel on the CUDA 12.8 runtime

✅ Installs immediately. CUDA ABI compatible. ⚠️ No native Blackwell kernels → PTX JIT fallback (delay on first run, slight performance loss)

Build spconv from source

pip install spconv + cumm manually

✅ Native sm_120. ❌ Long build time and complex setup; cumm must be built as well

Drop spconv

Remove it from requirements

✅ Simple. ❌ SparseUNet/MinkUNet backbones unusable (PTv3 unaffected)

uv initialization

I dislike the conda family. So I set things up with uv.

Python version used: 3.10 (exact version 3.10.19)

requirements.cu128.txt

Create a requirements.cu124.txt file and add the following:

# Pointcept - GPU requirements (CUDA 12.8 / Blackwell sm_120)
# Usage:
#   ./uv-install-cu128.sh
# or manually:
#   uv venv --python 3.10 && source .venv/bin/activate
#   uv pip install -r requirements.cu128.txt
#   TORCH_CUDA_ARCH_LIST="12.0" uv pip install ./libs/pointops
#
# System prerequisites:
#   - CUDA 12.8 toolkit + cuDNN 9.x (nvcc must know sm_120)
#     https://developer.nvidia.com/cuda-12-8-0-download-archive
#   - gcc-13 / g++-13
#   - libsparsehash-dev (apt install libsparsehash-dev)
#   - NVIDIA driver >= 570 (Blackwell consumer cards require driver 572+)

--extra-index-url https://download.pytorch.org/whl/cu128

# PyTorch (CUDA 12.8, Blackwell officially supported from 2.7.0)
# NOTE: +cu128 local version identifier 를 명시해야 PyPI 의 CPU 빌드로 대체되지 않음.
torch==2.7.0+cu128
torchvision==0.22.0+cu128
torchaudio==2.7.0+cu128

# PyG extensions (torch 2.7 + cu128 wheels)
--find-links https://data.pyg.org/whl/torch-2.7.0+cu128.html
torch-cluster==1.6.3
torch-scatter==2.1.2
torch-sparse==0.6.18
torch-geometric==2.7.0

# spconv — SparseUNet / MinkUNet 백본용
# NOTE: spconv-cu128 wheel 은 아직 PyPI 에 미공개.
#       cu126 wheel 을 CUDA 12.8 런타임에서 사용 (CUDA major ABI 호환).
#       Blackwell 전용 cubin 이 없어 첫 실행 시 PTX JIT 지연이 발생할 수 있음.
#       PTv3 only 사용자는 이 줄을 주석 처리해도 무방.
spconv-cu126==2.3.8

# Core
ninja
h5py
pyyaml
sharedarray
tensorboard
tensorboardx
wandb
yapf
addict
einops
scipy
plyfile
termcolor
timm
peft
open3d

# CLIP
ftfy
regex
tqdm
clip @ git+https://github.com/openai/CLIP.git

# (Optional) Blackwell 대응 flash-attn — 필요 시 별도 설치 권장
# flash-attn>=2.7.4

Installation script

Create a uv-install-cu128.sh file and run it:

#!/bin/bash
set -euo pipefail

PYTHON_VERSION="3.10"
VENV_DIR=".venv"
MIN_CUDA_MAJOR=12
MIN_CUDA_MINOR=8

echo "=== Pointcept GPU (CUDA 12.8 / Blackwell sm_120) Installation ==="

# --- [1/6] System prerequisite checks ---
echo "[1/6] Checking system prerequisites..."

if ! command -v uv &> /dev/null; then
    echo "ERROR: 'uv' not found."
    echo "  Install: curl -LsSf https://astral.sh/uv/install.sh | sh"
    exit 1
fi

if ! command -v nvcc &> /dev/null; then
    echo "ERROR: nvcc not found."
    echo "  Blackwell (sm_120) requires CUDA >= ${MIN_CUDA_MAJOR}.${MIN_CUDA_MINOR} toolkit."
    echo "  Install: https://developer.nvidia.com/cuda-12-8-0-download-archive"
    exit 1
fi

NVCC_VER=$(nvcc --version | grep -oP 'release \K[0-9]+\.[0-9]+' | head -1)
NVCC_MAJOR=${NVCC_VER%.*}
NVCC_MINOR=${NVCC_VER#*.}
if [ "$NVCC_MAJOR" -lt "$MIN_CUDA_MAJOR" ] || \
   { [ "$NVCC_MAJOR" -eq "$MIN_CUDA_MAJOR" ] && [ "$NVCC_MINOR" -lt "$MIN_CUDA_MINOR" ]; }; then
    echo "ERROR: nvcc ${NVCC_VER} found, but Blackwell (sm_120) requires >= ${MIN_CUDA_MAJOR}.${MIN_CUDA_MINOR}."
    echo "  Current nvcc: $(which nvcc)"
    echo "  Install CUDA 12.8 toolkit and ensure it is first in PATH."
    echo "    export PATH=/usr/local/cuda-12.8/bin:\$PATH"
    echo "    export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64:\$LD_LIBRARY_PATH"
    exit 1
fi
echo "  nvcc ${NVCC_VER} OK"

if command -v nvidia-smi &> /dev/null; then
    GPU_CC=$(nvidia-smi --query-gpu=compute_cap --format=csv,noheader | head -1)
    echo "  GPU compute capability: ${GPU_CC}"
fi

if ! command -v g++-13 &> /dev/null; then
    echo "WARNING: g++-13 not found."
    echo "  CUDA 12.8 nvcc requires gcc-13/g++-13 on Ubuntu 22.04+."
    echo "  Install: sudo apt install gcc-13 g++-13"
fi

if ! dpkg -s libsparsehash-dev &> /dev/null 2>&1; then
    echo "WARNING: libsparsehash-dev not found."
    echo "  Install: sudo apt install libsparsehash-dev"
    if [[ -t 0 ]]; then
        read -p "Continue anyway? [y/N] " -r
        [[ $REPLY =~ ^[Yy]$ ]] || exit 1
    else
        echo "  Non-interactive shell — aborting."
        exit 1
    fi
fi

# --- [2/6] Create / activate venv ---
if [ ! -d "$VENV_DIR" ]; then
    echo "[2/6] Creating virtual environment (Python $PYTHON_VERSION)..."
    uv venv --python "$PYTHON_VERSION"
else
    echo "[2/6] Virtual environment already exists, reusing..."
fi
source "$VENV_DIR/bin/activate"

# --- [3/6] Install Python dependencies ---
echo "[3/6] Installing Python dependencies (PyTorch cu128 + PyG + spconv)..."
# --reinstall: 기존 venv 재사용 시 torch 등이 상위 버전으로 남아 있을 수 있으므로
#              requirements pin 으로 강제 복구.
uv pip install --reinstall -r requirements.cu128.txt

# --- [4/6] Verify PyTorch sees Blackwell ---
echo "[4/6] Verifying PyTorch / CUDA runtime..."
python - <<'PY'
import torch
print(f"  torch {torch.__version__}")
print(f"  torch.version.cuda = {torch.version.cuda}")
print(f"  cuda available     = {torch.cuda.is_available()}")
if torch.cuda.is_available():
    cc = torch.cuda.get_device_capability(0)
    print(f"  GPU                = {torch.cuda.get_device_name(0)}")
    print(f"  compute capability = sm_{cc[0]}{cc[1]}")
    arches = torch.cuda.get_arch_list()
    print(f"  supported arches   = {arches}")
    if not any(a.endswith("_120") or a.endswith("_100") for a in arches):
        print("  WARNING: this PyTorch build has no Blackwell (sm_100/sm_120) kernels.")
PY

# --- [5/6] Build C++/CUDA extensions with Blackwell arch ---
echo "[5/6] Building libs/pointops (and siblings) for sm_120..."
# Ship kernels for Ampere + Ada + Hopper + Datacenter-Blackwell + Consumer-Blackwell.
export TORCH_CUDA_ARCH_LIST="8.0;8.6;8.9;9.0;10.0;12.0"
echo "  TORCH_CUDA_ARCH_LIST=${TORCH_CUDA_ARCH_LIST}"

EXT_LIBS=("pointops" "pointops2" "pointgroup_ops" "pointrope" "pointseg")
for lib in "${EXT_LIBS[@]}"; do
    if [ -d "libs/$lib" ] && [ -f "libs/$lib/setup.py" ]; then
        echo "  -> building libs/$lib"
        (cd "libs/$lib" && rm -rf build/ dist/ *.egg-info && uv pip install --no-build-isolation .)
    fi
done

# --- [6/6] Smoke test ---
echo "[6/6] Running smoke test..."
python - <<'PY'
import torch
assert torch.cuda.is_available(), "CUDA not available"
x = torch.randn(1024, 3, device="cuda")
y = (x @ x.T).sum()
torch.cuda.synchronize()
print(f"  CUDA matmul OK  (sum={y.item():.3f})")
try:
    import pointops
    print("  pointops import OK")
except Exception as e:
    print(f"  pointops import FAILED: {e}")
try:
    import spconv.pytorch as spconv
    print("  spconv import OK  (cu126 wheel on CUDA 12.8 runtime; PTX JIT on sm_120)")
except Exception as e:
    print(f"  spconv import FAILED: {e}")
PY

echo ""
echo "=== Installation complete ==="
echo "Activate env: source ${VENV_DIR}/bin/activate"

When run, it prints roughly the following:

$ ./uv-install-cu128.sh
=== Pointcept GPU (CUDA 12.8 / Blackwell sm_120) Installation ===
[1/6] Checking system prerequisites...
  nvcc 12.8 OK
  GPU compute capability: 12.0
[2/6] Creating virtual environment (Python 3.10)...
Using CPython 3.10.19
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
[3/6] Installing Python dependencies (PyTorch cu128 + PyG + spconv)...
Resolved 164 packages in 6.47s
Prepared 164 packages in 14ms
Installed 164 packages in 109ms
 + absl-py==2.4.0
 + accelerate==1.13.0
 + addict==2.4.0
 + aiohappyeyeballs==2.6.1
 + aiohttp==3.13.5
 + aiosignal==1.4.0
 + annotated-doc==0.0.4
 + annotated-types==0.7.0
 + anyio==4.13.0
 + asttokens==3.0.1
 + async-timeout==5.0.1
 + attrs==26.1.0
 + blinker==1.9.0
 + ccimport==0.4.4
 + certifi==2022.12.7
 + charset-normalizer==2.1.1
 + click==8.3.2
 + clip==1.0 (from git+https://github.com/openai/CLIP.git@d05afc436d78f1c48dc0dbf8e5980a9d471f35f6)
 + comm==0.2.3
 + configargparse==1.7.5
 + contourpy==1.3.2
 + cumm-cu126==0.7.11
 + cycler==0.12.1
 + dash==4.1.0
 + decorator==5.2.1
 + einops==0.8.2
 + exceptiongroup==1.3.1
 + executing==2.2.1
 + fastjsonschema==2.21.2
 + filelock==3.25.2
 + fire==0.7.1
 + flask==3.1.3
 + fonttools==4.62.1
 + frozenlist==1.8.0
 + fsspec==2026.2.0
 + ftfy==6.3.1
 + gitdb==4.0.12
 + gitpython==3.1.46
 + grpcio==1.80.0
 + h11==0.16.0
 + h5py==3.16.0
 + hf-xet==1.4.3
 + httpcore==1.0.9
 + httpx==0.28.1
 + huggingface-hub==1.11.0
 + idna==3.4
 + importlib-metadata==7.1.0
 + ipython==8.39.0
 + ipywidgets==8.1.8
 + itsdangerous==2.2.0
 + jedi==0.19.2
 + jinja2==3.1.6
 + joblib==1.5.3
 + jsonschema==4.26.0
 + jsonschema-specifications==2025.9.1
 + jupyter-core==5.9.1
 + jupyterlab-widgets==3.0.16
 + kiwisolver==1.5.0
 + lark==1.3.1
 + markdown==3.10.2
 + markdown-it-py==4.0.0
 + markupsafe==3.0.3
 + matplotlib==3.10.8
 + matplotlib-inline==0.2.1
 + mdurl==0.1.2
 + mpmath==1.3.0
 + multidict==6.7.1
 + narwhals==2.19.0
 + nbformat==5.10.4
 + nest-asyncio==1.6.0
 + networkx==3.4.2
 + ninja==1.13.0
 + numpy==2.2.6
 + nvidia-cublas-cu12==12.8.3.14
 + nvidia-cuda-cupti-cu12==12.8.57
 + nvidia-cuda-nvrtc-cu12==12.8.61
 + nvidia-cuda-runtime-cu12==12.8.57
 + nvidia-cudnn-cu12==9.7.1.26
 + nvidia-cufft-cu12==11.3.3.41
 + nvidia-cufile-cu12==1.13.0.11
 + nvidia-curand-cu12==10.3.9.55
 + nvidia-cusolver-cu12==11.7.2.55
 + nvidia-cusparse-cu12==12.5.7.53
 + nvidia-cusparselt-cu12==0.6.3
 + nvidia-nccl-cu12==2.26.2
 + nvidia-nvjitlink-cu12==12.8.61
 + nvidia-nvtx-cu12==12.8.55
 + open3d==0.19.0
 + packaging==24.1
 + pandas==2.3.3
 + parso==0.8.6
 + pccm==0.4.16
 + peft==0.19.1
 + pexpect==4.9.0
 + pillow==12.1.1
 + platformdirs==4.9.6
 + plotly==6.7.0
 + plyfile==1.1.3
 + portalocker==2.10.1
 + prompt-toolkit==3.0.52
 + propcache==0.4.1
 + protobuf==7.34.1
 + psutil==7.2.2
 + ptyprocess==0.7.0
 + pure-eval==0.2.3
 + pybind11==3.0.4
 + pydantic==2.13.2
 + pydantic-core==2.46.2
 + pygments==2.20.0
 + pyparsing==3.3.2
 + pyquaternion==0.9.9
 + python-dateutil==2.9.0.post0
 + pytz==2026.1.post1
 + pyyaml==6.0.3
 + referencing==0.37.0
 + regex==2026.4.4
 + requests==2.28.1
 + retrying==1.4.2
 + rich==15.0.0
 + rpds-py==0.30.0
 + safetensors==0.7.0
 + scikit-learn==1.7.2
 + scipy==1.15.3
 + sentry-sdk==2.58.0
 + setuptools==70.2.0
 + sharedarray==3.2.4
 + shellingham==1.5.4
 + six==1.17.0
 + smmap==5.0.3
 + spconv-cu126==2.3.8
 + stack-data==0.6.3
 + sympy==1.14.0
 + tensorboard==2.20.0
 + tensorboard-data-server==0.7.2
 + tensorboardx==2.6.5
 + termcolor==3.3.0
 + threadpoolctl==3.6.0
 + timm==1.0.26
 + tokenizers==0.22.2
 + tomli==2.4.1
 + torch==2.7.0+cu128
 + torch-cluster==1.6.3+pt27cu128
 + torch-geometric==2.7.0
 + torch-scatter==2.1.2+pt27cu128
 + torch-sparse==0.6.18+pt27cu128
 + torchaudio==2.7.0+cu128
 + torchvision==0.22.0+cu128
 + tqdm==4.66.5
 + traitlets==5.14.3
 + transformers==5.5.4
 + triton==3.3.0
 + typer==0.24.1
 + typing-extensions==4.15.0
 + typing-inspection==0.4.2
 + tzdata==2026.1
 + urllib3==1.26.13
 + wandb==0.26.0
 + wcwidth==0.6.0
 + werkzeug==3.1.8
 + widgetsnbextension==4.0.15
 + xxhash==3.6.0
 + yapf==0.43.0
 + yarl==1.23.0
 + zipp==3.19.2
[4/6] Verifying PyTorch / CUDA runtime...
  torch 2.7.0+cu128
  torch.version.cuda = 12.8
  cuda available     = True
  GPU                = NVIDIA RTX PRO 2000 Blackwell Generation Laptop GPU
  compute capability = sm_120
  supported arches   = ['sm_75', 'sm_80', 'sm_86', 'sm_90', 'sm_100', 'sm_120', 'compute_120']
[5/6] Building libs/pointops (and siblings) for sm_120...
  TORCH_CUDA_ARCH_LIST=8.0;8.6;8.9;9.0;10.0;12.0
  -> building libs/pointops
Using Python 3.10.19 environment at: /home/zer0/Projects/Pointcept/.venv
Resolved 27 packages in 1.87s
      Built pointops @ file:///home/zer0/Projects/Pointcept/libs/pointops
Prepared 1 package in 1m 33s
Installed 1 package in 0.83ms
 + pointops==1.0 (from file:///home/zer0/Projects/Pointcept/libs/pointops)
  -> building libs/pointops2
Using Python 3.10.19 environment at: /home/zer0/Projects/Pointcept/.venv
Resolved 27 packages in 1.58s
      Built pointops2 @ file:///home/zer0/Projects/Pointcept/libs/pointops2
Prepared 1 package in 1m 16s
Installed 1 package in 0.96ms
 + pointops2==1.0 (from file:///home/zer0/Projects/Pointcept/libs/pointops2)
  -> building libs/pointgroup_ops
Using Python 3.10.19 environment at: /home/zer0/Projects/Pointcept/.venv
Resolved 1 package in 1.41s
      Built pointgroup-ops @ file:///home/zer0/Projects/Pointcept/libs/pointgroup_ops
Prepared 1 package in 16.03s
Installed 1 package in 0.81ms
 + pointgroup-ops==0.0.0 (from file:///home/zer0/Projects/Pointcept/libs/pointgroup_ops)
  -> building libs/pointrope
Using Python 3.10.19 environment at: /home/zer0/Projects/Pointcept/.venv
Resolved 1 package in 2.17s
      Built pointrope @ file:///home/zer0/Projects/Pointcept/libs/pointrope
Prepared 1 package in 1m 39s
Installed 1 package in 0.69ms
 + pointrope==0.0.0 (from file:///home/zer0/Projects/Pointcept/libs/pointrope)
  -> building libs/pointseg
Using Python 3.10.19 environment at: /home/zer0/Projects/Pointcept/.venv
Resolved 26 packages in 2.29s
      Built pointseg @ file:///home/zer0/Projects/Pointcept/libs/pointseg
Prepared 1 package in 31.73s
Installed 1 package in 0.44ms
 + pointseg==1.0 (from file:///home/zer0/Projects/Pointcept/libs/pointseg)
[6/6] Running smoke test...
  CUDA matmul OK  (sum=1048.214)
  pointops import OK
  spconv import OK  (cu126 wheel on CUDA 12.8 runtime; PTX JIT on sm_120)

=== Installation complete ===
Activate env: source .venv/bin/activate

See also

Favorite site

author Zer0 sitemap