spconv
is a project that provide heavily-optimized sparse convolution implementation with tensor core support. check benchmark to see how fast spconv 2.x runs.
Spconv 1.x code. We won't provide any support for spconv 1.x since it's deprecated. use spconv 2.x if possible.
Check spconv 2.x algorithm introduction to understand sparse convolution algorithm in spconv 2.x!
Use spconv >= cu114 if possible. cuda 11.4 can compile greatly faster kernel in some situation.
Update Spconv: you MUST UNINSTALL all spconv/cumm/spconv-cuxxx/cumm-cuxxx first, use pip list | grep spconv
and pip list | grep cumm
to check all installed package. then use pip to install new spconv.
spconv 2.3: int8 quantization support. see docs and examples for more details.
spconv 2.2: ampere feature support (by EvernightAurora), pure c++ code generation, nvrtc, drop python 3.6
import spconv as spconv_core; spconv_core.constants.SPCONV_ALLOW_TF32 = True
to enable them.Firstly you need to use import spconv.pytorch as spconv
in spconv 2.x.
Then see this.
Don't forget to check performance guide.
see common problems.
You need to install python >= 3.7 first to use spconv 2.x.
You need to install CUDA toolkit first before using prebuilt binaries or build from source.
You need at least CUDA 11.0 to build and run spconv 2.x. We won't offer any support for CUDA < 11.0.
We offer python 3.7-3.11 and cuda 10.2/11.3/11.4/11.7/12.0 prebuilt binaries for linux (manylinux).
We offer python 3.7-3.11 and cuda 10.2/11.4/11.7/12.0 prebuilt binaries for windows 10/11.
For Linux users, you need to install pip >= 20.3 first to install prebuilt.
WARNING: spconv-cu117 may require CUDA Driver >= 515.
pip install spconv
for CPU only (Linux Only). you should only use this for debug usage, the performance isn't optimized due to manylinux limit (no omp support).
pip install spconv-cu102
for CUDA 10.2
pip install spconv-cu113
for CUDA 11.3 (Linux Only)
pip install spconv-cu114
for CUDA 11.4
pip install spconv-cu117
for CUDA 11.7
pip install spconv-cu120
for CUDA 12.0
NOTE It's safe to have different minor cuda version between system and conda (pytorch) in CUDA >= 11.0 because of CUDA Minor Version Compatibility. For example, you can use spconv-cu114 with anaconda version of pytorch cuda 11.1 in a OS with CUDA 11.2 installed.
NOTE In Linux, you can install spconv-cuxxx without install CUDA to system! only suitable NVIDIA driver is required. for CUDA 11, we need driver >= 450.82. You may need newer driver if you use newer CUDA. for cuda 11.8, you need to have driver >= 520 installed.
See this page to check supported GPU names by arch.
If you use a GPU architecture that isn't compiled in prebuilt, spconv will use NVRTC to compile a slightly slower kernel.
CUDA version | GPU Arch List |
---|---|
11.1~11.7 | 52,60,61,70,75,80,86 |
11.8+ | 60,70,75,80,86,89,90 |
The c++ code will be built automatically when you change c++ code in project.
For NVIDIA Embedded Platforms, you need to specify cuda arch before build: export CUMM_CUDA_ARCH_LIST="7.2"
for xavier, export CUMM_CUDA_ARCH_LIST="6.2"
for TX2, export CUMM_CUDA_ARCH_LIST="8.7"
for orin.
You need to remove cumm
in requires
section in pyproject.toml after install editable cumm
and before install spconv due to pyproject limit (can't find editable installed cumm
).
You need to ensure pip list | grep spconv
and pip list | grep cumm
show nothing before install editable spconv/cumm.
git clone https://github.com/FindDefinition/cumm
, cd ./cumm
, pip install -e .
git clone https://github.com/traveller59/spconv
, cd ./spconv
, pip install -e .
import spconv
and wait for build finish.tools/msvc_setup.ps1
git clone https://github.com/FindDefinition/cumm
, cd ./cumm
, pip install -e .
git clone https://github.com/traveller59/spconv
, cd ./spconv
, pip install -e .
import spconv
and wait for build finish.You need to rebuild cumm
first if you are build along a CUDA version that not provided in prebuilts.
export SPCONV_DISABLE_JIT="1"
pip install pccm cumm wheel
python setup.py bdist_wheel
+pip install dists/xxx.whl
tools/msvc_setup.ps1
$Env:SPCONV_DISABLE_JIT = "1"
pip install pccm cumm wheel
python setup.py bdist_wheel
+pip install dists/xxx.whl
If you find this project useful in your research, please consider cite:
@misc{spconv2022,
title={Spconv: Spatially Sparse Convolution Library},
author={Spconv Contributors},
howpublished = {\url{https://github.com/traveller59/spconv}},
year={2022}
}
The work is done when the author is an employee at Tusimple.
Apache 2.0