Skip to content
Search

Pointcept:BuildMatrix

lastmod 2026-09-28created 2026-09-281 edits

Pointcept prebuilt wheel matrix (amd64 · arm64)

Written: 2026-09-28 · Target: the pointcept-wheelhouse package of the app.cvp.run Pointcept agent app

Overview

The Pointcept agent app builds its environment only from the pointcept-wheelhouse uploaded to the registry (roadmap decision R5). If there is no wheelhouse matching the host, it does not fall back to a source build; it stops in a blocked state. So for the agent to work with downloads alone, a wheelhouse must be prebuilt and uploaded for each host combination.

The PyPI and PyG indexes are mostly missing wheels for CUDA 13 (cu130) and for arm64. This page lays out the amd64·arm64 matrix to prebuild with scripts/build_wheels.sh, and the constraints confirmed by actually building and running.

Conclusion: Rather than making many combinations, building one wheelhouse per accel with a wide cuda_arch gives the widest coverage. 3–4 for amd64 and 3–4 for arm64 are enough.

The agent's wheelhouse selection rules

Based on wheelhouseFits·selectWheelhouse in app.cvp.run/cli/src/pointcept/packages.ts.

Rule

Impact on the matrix

The os·arch tags must match the host

os is only linux, so it cannot distinguish distributions (glibc). See glibc compatibility below

It does not filter by the python tag; it creates a venv with the version written in the tag

cp312 alone is enough. Other python combinations only duplicate candidates with the same conditions

The CUDA version of accel must be at most the driver CUDA

Cover each host driver lower bound with one per accel

The GPU's compute capability must be exactly in the cuda_arch list

Even if an 8.0 wheel runs on 8.6, it is not selected unless 8.6 is in the tag. You must list all target GPUs

With multiple candidates, it picks the highest by torch → CUDA → version

If you publish torch 2.13 tagged with 12.1, GB10 picks it and crashes. Standardize torch on 2.9.1 only

Every row is python 3.12, torch 2.9.1.

#

arch

accel

cuda_arch tag (recommended)

Target GPUs

Minimum driver

Compiled from source

Status

A1

amd64

cu126

7.5† 8.0 8.6 8.9 9.0

T4, A100, RTX30/40, L4, H100

12.6

flash-attn, swin3d, 5 local packages (spconv·cumm·PyG have prebuilts)

Not built

A2

amd64

cu128

7.5† 8.0 8.6 8.9 9.0 10.0 12.0

A1 + B200, RTX50, RTX PRO Blackwell

12.8

A1 + spconv (no spconv-cu128)

Not built

A3

amd64

cu129

A2 + 10.3

B300

12.9

A2 + PyG (no pt29cu129)

Optional

A4

amd64

cu130

7.5† 8.0 8.6 8.9 9.0 10.0 10.3 12.0

All 13.x drivers

13.0

A1 + cumm, spconv

Verified (12.0 only, published 2026.09.11) → rebuild wider

B1

arm64

cu126

8.0 8.6 8.9 9.0

GH200, Arm servers + A100/L40

12.6

All (except pccm·torch-geometric·ocnn)

Not built

B2

arm64

cu128

8.0 8.6 8.9 9.0 10.0 12.0

B1 + GB200, Arm + RTX PRO

12.8

All

Not built

B3

arm64

cu129

B2 + 10.3 12.1

GB300, GB10 with driver 12.9

12.9

All

Optional

B4

arm64

cu130

8.0 8.6 8.9 9.0 10.0 10.3 12.0 12.1

DGX Spark (GB10), GB200/300

13.0

All

Verified (12.1 only, completed 60 epochs) → rebuild wider

† 7.5 (Turing) can only be added after the agent is fixed first. See flash-attn.

Combination

Reason

cu130/cu132 + torch 2.13.0 (arm64)

Crashes on GB10 with merge_sort: failed to synchronize: cudaErrorIllegalAddress (2026-09-21, verify_mlops.sh A/B comparison). Because of the rule that picks the higher torch first, GB10 picks this combination just by it being published

cu132

Requires torch 2.12 or later, so it cannot be standardized on 2.9.1. cu130 wheels are enough for driver 13.2 hosts

cu131

There is no PyTorch index, so torch comes from cu130. It only raises the required driver over cu130 and gains nothing

cu118 · cu121 · cu124

No torch 2.9.1 (≤2.7.1, ≤2.5.1, ≤2.6.0 respectively), and cannot compile sm_100 or higher. No aarch64 torch either

Jetson Orin (8.7)

The aarch64 torch the agent downloads from download.pytorch.org is an SBSA build, so it does not run on L4T for Jetson

Thor (11.0)

No flash-attn kernel, and not within the compile range (8.0–12.0) of the torch aarch64 cu130 wheel. Unverified

Confirmed constraints

torch wheel index

List of cp312 wheels in download.pytorch.org/whl/<accel>/torch/ as of 2026-09-28.

accel

x86_64

aarch64

cu118

2.2–2.7.1

None

cu121

2.2–2.5.1

None

cu124

2.4–2.6.0

None

cu126

2.6–2.14

2.6, 2.9.0–2.14 (no 2.7·2.8)

cu128

2.7–2.11

2.7, 2.9–2.11 (no 2.8)

cu129

2.8–2.13 (no 2.12.0)

2.8–2.13 (no 2.12.0)

cu130

2.9–2.14

2.9–2.14

cu132

2.12–2.14

2.12–2.14

The versions common to cu126·cu128·cu129·cu130 and both arches are 2.9.x, 2.10, 2.11. Of these, only 2.9.1 is verified.

torch lower bounds filtered by the builder (cuda_min_torch): cu126 ≥ 2.6.0, cu128 ≥ 2.7.0, cu129 ≥ 2.8.0, cu130 ≥ 2.9.0, cu132 ≥ 2.12.0.

PyPI · PyG prebuilt gaps

Package

Range with prebuilts

Notes

spconv

cu118·cu121·cu124·cu126, x86_64 only (2.3.8)

cu128·cu129·cu130 packages do not exist at all

cumm

cu126·cu128, x86_64 only (0.8.2)

No cu130 package

torch-scatter / torch-sparse / torch-cluster

data.pyg.org, x86_64 only

Nothing at all for aarch64. cu129 only goes up to torch 2.8. cu130 covers torch 2.9–2.14

flash-attn

None (sdist only)

Compiled from source in every combination

Therefore arm64 compiles all 12 native packages from source. Only the pure Python packages pccm, torch-geometric, and ocnn use prebuilts.

Per-package pins and patches

Package

Verified version

Constraints

pccm

0.4.16

cumm's setup.py imports it, so it must be installed into the venv first

cumm

cumm-cu130 0.8.2

Its own arch table does not know 8.8·10.3·11.0·12.1. The builder lowers them to the PTX of the nearest lower arch (12.1 → 12.0+PTX, driver JIT)

spconv

spconv-cu130 2.3.8

A fork patch relaxed the cumm upper bound to <0.9.0. When training on GB10, ConvAlgo.Native must be forced (MaskImplicitGemm crashes on sm_121)

torch-scatter / sparse / cluster

2.1.2 / 0.6.18 / 1.6.3

Compiled from source on arm64

torch-geometric

2.7.0

Pinned to <2.8. From 2.8, voxel_grid requires pyg-lib, and pyg-lib has no aarch64 wheels

flash-attn

2.8.3.post1

See flash-attn below

swin3d

1.0.0

Uses the cvprun/Swin3D fork. Upstream fails to compile on newer torch because of the .type() API

pointgroup_ops

0.0.0

Requires libsparsehash-dev, which the builder installs itself

ocnn

2.3.3

Pure Python

flash-attn

  • flash-attn 2.x only produces cubins for sm_80, 90, 100, 120. 8.6·8.7·8.9 run on the sm_80 cubin.
  • 10.3 and 12.1 are in a different Blackwell family, so the cubins do not load. The builder builds with 100+PTX, 120+PTX so they are reached via driver JIT (commit c35c4d4, 2026-09-10).
    • It builds and works on DGX Spark (sm_121). Since 2026-09-11 it has been recorded in the manifest as compiled flash_attn-2.8.3.post1-…-linux_aarch64.whl, and on 2026-09-21 it completed 60 epochs of training with enable_flash=True.
    • Before 2026-09-10 there was no arch matching 12.1, so it was silently skipped.
  • Builds targeting only 7.5 (Turing), 11.0 (Thor), or Orin have nothing to compile and are skipped.
  • The agent decides whether to use flash only by whether import flash_attn succeeds (scripts.ts). So if you put 7.5 in the tag of a wheelhouse containing flash-attn, flash turns on on T4 and fails. To add 7.5, the agent must first be fixed to enable flash only when capability ≥ 8.0.
  • PTX is JIT-compiled on first load, so CUDA_CACHE_PATH must point to a writable path to pay the JIT cost only once.
  • It is the package with the longest build time. Building just 12.1 on GB10 took about 18.7 minutes. Since there are at most 4 cubins, widening the arch list does not increase the cost endlessly.

glibc compatibility

Updated 2026-09-28: the build_wheels.sh default changed to --os manylinux_2_28, which resolves this issue. Below are measurements from the earlier ubuntu24.04 builds (including 2026.09.11, currently published in the registry). See manylinux_2_28 build.

The current wheels are built in an ubuntu24.04 container. The maximum symbol versions confirmed with objdump are as follows (amd64 cu130).

Wheel

GLIBC

GLIBCXX

cumm_cu130

2.38

3.4.32

spconv_cu130

2.34

3.4.32

pointops

2.32

3.4.21

flash_attn

2.32

3.4.21

On Ubuntu 22.04 hosts (glibc 2.35, GLIBCXX 3.4.30), importing cumm·spconv fails. The agent's os tag is only linux, so it cannot filter out such hosts in advance. There are two alternatives.

  1. Build with --os ubuntu22.04. Wheels built on 22.04 also run on 24.04. Not yet tried.
  2. Add the glibc version to the tag and check it in wheelhouseFits.

Prebuilts and tag accuracy

When prebuilt spconv·cumm·PyG are downloaded on amd64 as in A1·A2, the arch set of those wheels is decided upstream and may differ from the cuda_arch tag. To make the tag exact, use --force-source. The build time increases in exchange.

Upload size

Widening the arch list makes the cumm·spconv wheels larger. First check whether the Workers CPU limit problem in the admin package upload relay (pointcept-agent-app-roadmap.md) has been resolved.

How to build

amd64 is built directly on an amd64 host and arm64 directly on DGX Spark. QEMU cross builds are not used because nvcc is 10–30x slower. Keep the output directory separate so it does not mix with existing single-arch results. If the same directory is used, manifest.txt gets appended to.

The two loops below are in the repository as scripts/build_matrix_amd64.sh and scripts/build_matrix_arm64.sh. Output goes to wheelhouse-wide/ (git-ignored), and trailing arguments are passed to build_wheels.sh (e.g. --jobs 8, --dry-run).

# amd64
for spec in "cu126|8.0 8.6 8.9 9.0" \
            "cu128|8.0 8.6 8.9 9.0 10.0 12.0" \
            "cu130|8.0 8.6 8.9 9.0 10.0 10.3 12.0"; do
  bash scripts/build_wheels.sh build --arch amd64 --accel "${spec%%|*}" \
    --torch 2.9.1 --python 3.12 --cuda-arch "${spec#*|}" \
    --force-source --out wheelhouse-wide --keep-going -y
done

# arm64 (DGX Spark)
for spec in "cu126|8.0 8.6 8.9 9.0" \
            "cu128|8.0 8.6 8.9 9.0 10.0 12.0" \
            "cu130|8.0 8.6 8.9 9.0 10.0 10.3 12.0 12.1"; do
  bash scripts/build_wheels.sh build --arch arm64 --accel "${spec%%|*}" \
    --torch 2.9.1 --python 3.12 --cuda-arch "${spec#*|}" \
    --out wheelhouse-wide --keep-going -y
done

To include A3·B3 (cu129), add "cu129|… 10.3 12.1" in the same format.

Verification and publishing

  1. Check installation, import, kernels, and PTv3 forward with scripts/verify_wheels.sh <wheelhouse 디렉터리>.
  2. If possible, check through training with scripts/verify_mlops.sh.
  3. Publish each combination to the registry with a unique version and attach tags.
{"os":"linux","arch":"arm64","accel":"cu130","torch":"2.9.1","python":"3.12",
 "cuda_arch":"8.0 8.6 8.9 9.0 10.0 10.3 12.0 12.1"}

Only two have been verified on real GPUs: sm_120 (RTX PRO 2000) and sm_121 (GB10). The other arches have only been compiled, so note "unverified" in the package description.

Runtime conditions: is matching arch and GPU enough?

No. Even assuming the whole matrix above is built, there are more host-side conditions, and some GPUs need agent code changes to run properly even when the wheels match.

Host conditions

Condition

Reason

When not met

Linux

The os tag is only linux. There are no wheelhouses for Windows or macOS

Blocked with no_match at the selection stage

NVIDIA driver CUDA ≥ accel

wheelhouseFits compares them. For example, driver 12.4 cannot get cu126

no_match (below 12.6 is outside the matrix)

nvidia-smi works

probeHost reads the driver version and compute_cap from it

no_gpu

glibc ≥ 2.28

Building with manylinux_2_28 gives the same lower bound as torch. Existing wheels built on ubuntu24.04 require glibc 2.38 and GLIBCXX 3.4.32

pip rejects manylinux wheels at the install stage. Existing wheels install and then fail at import (Ubuntu 22.04, RHEL 8·9, etc.)

Internet access

torch is not in the registry, so it is downloaded from download.pytorch.org (about 3 GB). ccimport·fire·pybind11 required by spconv and 13 pure Python dependencies are downloaded from PyPI (--no-index not used)

Installation fails. Cannot be used on air-gapped networks

About 5 GB or more of disk

Needs torch 3 GB, wheels 130 MB or more (larger with a wider arch list), and weights (555 MB per model)

Installation fails

GPU memory

A condition unrelated to the wheels. Without flash-attn, 8 GB cards hit OOM

Per-request OOM

Plan

The package's min_plan

plan_required

GPUs that require agent changes first

Target

Problem

Required action

sm_121 (DGX Spark), sm_103 (B300)

cumm does not know these arches, so spconv is built as PTX only (12.1 → 12.0+PTX, 10.3 → 10.0+PTX). In mlops, the MaskImplicitGemm kernel under this condition crashed at random iterations (42, 67). mlops forced ConvAlgo.Native with the GeoSpconvAlgo hook and completed 100 epochs. The app.cvp.run agent has no such handling (searching cli/src/pointcept/ for ConvAlgo returns 0 results)

Native pinning must be added to the agent's training·inference scripts. Until then, training on GB10 can crash midway even when the wheels match

sm_75 (T4, RTX20)

There is no flash-attn kernel, but the agent enables flash if the import succeeds

Do not put 7.5 in the tag until it is fixed to enable flash only when capability ≥ 8.0

Hosts with mixed GPUs

The capabilities of all GPUs must be within a single tag

E.g. with an RTX 3090 (8.6) and RTX 5090 (12.0) together, only cu128·cu130 match

Jetson Orin, Thor

torch is an SBSA build, so it does not work

Not supported

Verification status

"Built" and "runs" are different. The only combinations confirmed end-to-end on real GPUs are amd64 cu130 sm_120 and arm64 cu130 sm_121 (in mlops, with Native pinning). For the other arches, it is only confirmed that nvcc compiled them successfully. 8.0–9.0, 10.0, and 12.0, which are built as cubins, are low risk, but 10.3·12.1, which rely on PTX JIT, need verification on real hardware.

Summary

On a host with Linux, driver CUDA ≥ accel, glibc 2.28 or later (for manylinux builds), and internet access, installation and inference work as long as arch·GPU match. However, two things are needed first.

  1. GB10 and B300: spconv Native pinning must be added to the agent.
  2. Ubuntu 22.04·RHEL hosts: the wheelhouse must be rebuilt with manylinux_2_28 and published. The currently published 2026.09.11 is an ubuntu24.04 build.

Single-bundle distribution (download once and run without sudo)

Everything the agent uses for training and inference can be packed into one per (arch, accel), so that it runs just by downloading and extracting. The NVIDIA driver and glibc cannot be put in the bundle and must be on the host. For the format, a compressed archive (tar.zst) per (arch, accel) is recommended over AppImage.

What can and cannot go in the bundle

Component

Bundleable

Notes

Python interpreter

✓

Uses python-build-standalone. This is exactly the python uv installs, and it works even when moved to another path

torch, torchvision

✓

About 1.1 GB

CUDA runtime, cuDNN, NCCL, cuBLAS

✓

cu12·cu13 torch installs them together as nvidia-* pip wheels (about 2.7 GB). No CUDA toolkit is needed on the host

15 Pointcept wheels, source, pure Python dependencies

✓

About 200 MB

libstdc++.so.6

✓

Building with manylinux removes the need for a newer version in the first place. See manylinux_2_28 build below

libgomp

✓

torch already bundles it

libGL, libglib (open3d)

Not needed

The agent uses a stub instead of open3d

C compiler (Triton JIT)

△

On first run, Triton compiles a small launcher with the system cc. The mlops image includes gcc as a runtime dependency for this reason. It has not yet been confirmed whether the Pointcept training·inference path actually goes through Triton. If it does, include the ziglang wheel and set it as CC to solve it within the bundle

NVIDIA kernel driver and libcuda.so

✗

Paired with the kernel module, so the host's must be used. The driver CUDA ≥ accel condition remains

glibc

✗ (effectively)

The whole bundle has the glibc of the build base as its lower bound. Building with manylinux_2_28 makes the lower bound 2.28

  • AppImage must be mounted with FUSE to run. On hosts without libfuse2, sudo apt install libfuse2 is required, which defeats the purpose. Containers often lack /dev/fuse. Using --appimage-extract-and-run ends up extracting every time anyway.
  • The bundle is around 5 GB, so there is no benefit to mounting squashfs on every run.
  • The agent already has the necessary structure. The registry's archive type, the CLI's extractAll, version markers, and the ~/.cache/cvp/<app> root can be used as-is. Download the archive once, extract it, and run with bin/python3; no sudo, FUSE, or network (PyPI, download.pytorch.org) is needed.
pointcept-runtime-<arch>-<accel>.tar.zst   # 예: arm64-cu130
└─ runtime/
   ├─ python/          # python-build-standalone 3.12. venv가 아니라 이 python의 site-packages에 직접 설치
   │  └─ lib/python3.12/site-packages/   # torch, nvidia-*, Pointcept 휠, 순수 의존성
   ├─ lib/             # 호스트보다 새 공유 라이브러리가 필요할 때만
   ├─ src/pointcept/   # 고정 커밋 소스
   ├─ scripts/         # 추론·학습 워커
   └─ env.sh           # PYTHONPATH, LD_LIBRARY_PATH, TRITON_CACHE_DIR, CUDA_CACHE_PATH
  • Do not use a venv. Absolute paths are baked into pyvenv.cfg and script shebangs, so moving it breaks them. Always run via python/bin/python3 -m … or the script path.
  • Size: the agent's current rfdetr·sam2 venvs are 4.7–5.3 GB extracted (torch 1.1 + nvidia 2.7 + triton 0.7 GB). Pointcept adds about 0.2 GB to this, so it is expected to be about 2.5–3 GB compressed. For the 6 combinations in the recommended matrix, the total is about 15–18 GB.
  • Do not put weights in the bundle. They are 555 MB per model and optional, so keep them as separate packages as now.
  • Reuse: the torch and nvidia parts (about 4.5 GB) are the same as rfdetr·sam2. If multiple apps are later moved to bundles, splitting into two layers, a "torch base per (arch, accel)" and an "app layer", lets them share downloads and disk. Currently the python versions differ (rfdetr·sam2 use 3.11, Pointcept uses 3.12).

Remaining host conditions

  1. Linux, and an NVIDIA driver matching (arch, accel). nvidia-smi must work.
  2. At least the glibc lower bound set by the build base (2.28 for manylinux_2_28)
  3. About 8 GB or more of disk (the archive and the extracted result)
  4. GB10·B300 need spconv ConvAlgo.Native pinning in the agent scripts. This is a code problem unrelated to the bundle.

Sticking points

  • Upload: uploading multi-GB files to the registry requires the Workers CPU limit problem in the admin upload relay to be solved first. Switching to presigned direct uploads is one option.
  • Verification method: run everything from download and extraction through inference·training on a base image with nothing installed. This means a state where only the driver is injected via nvidia-container-toolkit, such as docker run --gpus all ubuntu:22.04, debian:12, rockylinux:9. Whether Triton finds a compiler also shows up at this stage.

manylinux_2_28 build

manylinux is not a way to remove the glibc dependency. It standardizes the approach of building on an old glibc to lower the lower bound. build_wheels.sh now uses this as its default (--os manylinux_2_28).

What manylinux actually does

Step

Details

Effect

1. Build on an old base

manylinux_2_28 is based on glibc 2.28. Here nvidia/cuda:*-devel-rockylinux8 is used

Linked glibc symbols are bound to 2.28 or lower

2. Compile with gcc-toolset

New C++ features are statically linked via libstdc++_nonshared.a, and only the system's (RHEL 8) old libstdc++ is referenced as a shared library

The GLIBCXX_3.4.32 problem disappears (3.4.25 or lower)

3. auditwheel repair

Other .so files are copied into the wheel, and the manylinux_2_28_<arch> tag is added to the filename

No separate libraries are needed on the host

4. Policy check

repair rejects wheels that exceed the policy

The build fails instead of import failing on the host

As a result, it works on any Linux with glibc 2.28 or later (RHEL 8·9, Ubuntu 20.04 or later, Debian 10 or later). This lower bound is the same as that of the torch wheel itself (manylinux_2_28), so the additional constraints caused by the Pointcept wheels are zero. Upstream spconv-cu124·cu126 and cumm-cu126 are also distributed as manylinux_2_28.

Since the platform tag is in the wheel filename, on hosts with insufficient glibc pip rejects it at the install stage and states the reason. The problem of crashing with an obscure error at import goes away.

Build base images

nvidia/cuda:<버전>-devel-rockylinux8 is distributed for amd64 and arm64 for all of CUDA 11.8, 12.1, 12.4, 12.6, 12.8, 12.9, 13.0, 13.1, and 13.2 (Docker Hub, checked 2026-09-28). For CPU targets, rockylinux:8 is used.

There are also pytorch/manylinux2_28-builder (x86_64) and pytorch/manylinuxaarch64-builder (aarch64), which PyTorch uses to build its own wheels. But they are separate repositories per architecture, so the rockylinux8 image, which provides both platforms under one name, was chosen.

Behavior of build_wheels.sh

  • The --os default is manylinux_2_28. ubuntu24.04 and ubuntu22.04 can still be used.
  • Inside the container, it enables EPEL and PowerTools with dnf and installs gcc-toolset, cmake, git, openblas-devel, and sparsehash-devel.
  • The gcc-toolset version is matched to the range nvcc allows. 11 for cu118, 12 for cu121, and 13 otherwise.
  • Compiled wheels and prebuilt wheels with the linux_* tag (PyG, etc.) all go through auditwheel repair --plat manylinux_2_28_<arch>. If a prebuilt fails the policy, that package is compiled from source.
  • Libraries excluded from repair: libtorch*, libc10*, libshm*, libcaffe2*, libgomp* (provided by torch), libcudart*, libnvrtc*, libcublas*, libcusparse*, libcurand*, libcufft*, libcusolver*, libnvJitLink*, libnvToolsExt*, libcudnn*, libnccl*, libcupti*, libnvshmem* (provided by nvidia-* wheels), libcuda.so* (provided by the driver). Putting these in the wheel loads a different copy from the one torch uses, causing conflicts.
  • ROCm only has Ubuntu images. Without --os, it builds on ubuntu24.04 (no tag); if --os manylinux_2_28 is specified, that combination is skipped.
  • --native builds use the host OS, so no manylinux tag is added.
  • The output path does not distinguish OS (<out>/linux-<arch>/<accel>/torch<ver>-cp<py>/). Rebuilding into the same directory replaces the old ubuntu wheels with manylinux wheels.

Comparison with other approaches

Approach

Assessment

manylinux_2_28 build and auditwheel

Adopted. Same lower bound as torch, industry standard, and verified upstream

Going lower with manylinux2014 (glibc 2.17)

No benefit. torch requires 2.28 since 2.6, so the lower bound ends up at 2.28 anyway

Putting glibc and ld-linux in the bundle (nix-bundle approach)

Possible but not recommended. The host driver's libcuda.so is loaded into the same process, mixing two glibcs and causing NSS·locale·dlopen path problems

Cross-building against an old glibc with zig cc

Unstable as nvcc's host compiler

Verification results (2026-09-28, amd64 · cu130 · torch 2.9.1 · sm_120)

Built pccm, cumm, spconv, torch-scatter, and pointops with --os manylinux_2_28.

Wheel

auditwheel tag

Max GLIBC

Max GLIBCXX

Additionally bundled libraries

cumm_cu130 0.8.2

manylinux_2_24 · 2_28

2.14

3.4.21

None

spconv_cu130 2.3.8

manylinux_2_27 · 2_28

2.14

3.4.21

None

torch_scatter 2.1.2

manylinux_2_24 · 2_28

2.14

3.4.21

None

pointops 1.0

manylinux_2_24 · 2_28

2.14

3.4.21

None

When the same combination was built on ubuntu24.04, cumm required GLIBC 2.38 / GLIBCXX 3.4.32.

The PyG prebuilts did not pass the policy. auditwheel rejected torch_scatter-2.1.2+pt29cu130-…-linux_x86_64.whl (data.pyg.org) for "too-recent versioned symbols", and the builder fell back to compiling from source. This means the PyG prebuilts used on amd64 so far could also have broken on older hosts. In exchange, the amd64 build time grows by the compile time of the 3 PyG packages.

Runtime check (docker run --gpus all, with only uv, python 3.12, torch 2.9.1+cu130, and the wheels installed on a base image with nothing else installed):

Container

glibc

Existing ubuntu24.04 wheels

manylinux wheels

ubuntu:22.04

2.35

cumm import fails: GLIBC_2.38' not found

spconv SubMConv3d, torch_scatter scatter_mean, pointops knn_query all succeed on GPU

rockylinux:8

2.28

(not tested)

All succeed as above

Not yet confirmed

  • flash-attn, swin3d, torch-sparse, torch-cluster, pointops2, pointgroup_ops, pointseg, pointrope built with manylinux
  • arm64 (DGX Spark) manylinux build
  • cu118·cu121 using gcc-toolset-11·12

Remaining decisions

  • glibc: whether to build with ubuntu22.04 or distinguish by tag → resolved with the manylinux_2_28 default
  • 7.5 (Turing): whether to add it to the tag after fixing the agent to decide flash use by capability
  • Whether to publish cu129 (A3·B3)
  • Whether to add spconv ConvAlgo.Native pinning to the agent (app.cvp.run). Required to support GB10·B300

References

  • Pointcept
  • Pointcept fork: scripts/build_wheels.sh, scripts/verify_wheels.sh, scripts/verify_mlops.sh
  • mlops: src/geo_mlops/resources/training_runtime/Dockerfile.pointcept, src/geo_mlops/resources/training_runtime/pointcept_semseg.py(GeoSpconvAlgo),docs/plans/36_pointcept_training_runtime_plan.md, docs/plans/50_pointgroup_instance_segmentation_plan.md
  • app.cvp.run: cli/src/pointcept/packages.ts, cli/src/pointcept/env.ts, cli/src/pointcept/scripts.ts, docs/plans/pointcept-agent-app-roadmap.md
author Zer0 sitemap