Why does every 3D Gaussian Splatting install die on day one?
Clone the famous repo, run conda env create, watch it die on CUDA skew, missing cl.exe, or a submodule that never cloned. Still how the 2023 reference tree fails on modern boxes. This guide gets a working 3D Gaussian Splatting train/render stack with packaged gaussian-splatting 2.10.3 (PyPI release dated Sep 8, 2026): same core algorithms, normal pip UX, maintained gsplat CUDA backend.
Bit-for-bit parity with Kerbl et al.? Keep graphdeco-inria/gaussian-splatting nearby. To train this week on CUDA 12, start with the wheel.
System requirements (before you pip anything)
| Item | Minimum | Recommended |
|---|---|---|
| OS | Linux or Windows 10/11 | Ubuntu 22.04+ or Win11 |
| GPU | NVIDIA, Compute Capability 7.0+ | RTX 30/40-class, 12GB+ VRAM |
| VRAM (train) | ~6-8GB small scenes / heavy downscale | 16-24GB for full paper-style quality |
| RAM / disk | 16GB RAM, 20GB free (practical floor) | 32GB+ RAM, SSD for datasets |
| Software | Python 3.10+, NVIDIA driver, CUDA toolkit matched to PyTorch | PyTorch ≥2.4, CUDA 12.4 toolkit, gsplat |
Original project docs sized paper-quality runs around a 24GB card and CC 7.0+. Packaged builds run leaner – gsplat’s README claims up to ~4× less GPU memory (and up to ~15% less train time) versus the classic rasterizer on matched evals – but you still need NVIDIA. No AMD/Intel path in these stacks as of March 2026.
Funny how often the “GPU problem” is actually a compiler-path problem. The card is fine; the shell that launched pip never saw nvcc or cl.exe.
Download / official sources
- Packaged trainer (this guide):gaussian-splatting 2.10.3 on PyPI –
pip install --upgrade gaussian-splatting - Rasterizer backend:gsplat 1.5.3 (Jul 4, 2025 on PyPI; git main if you need newer than wheels)
- Paper + datasets + Windows viewers:INRIA project page
- Reference source:github.com/graphdeco-inria/gaussian-splatting – clone with
--recursive - Paper:arXiv:2308.04079 (Kerbl et al., ACM TOG 2023)
Skip random one-click forks. The PyPI package is a documented refactor from commit a2a91d9, with gsplat/2DGS-style options on top of the same core math.
Install 3D Gaussian Splatting 2.10.3 step by step
Clean venv or conda env. Match the PyTorch CUDA tag to the toolkit on the machine – maintainers call out 12.4. Mismatch is how you get silent wrong-arch binaries or runtime lib import errors later.
# 1) Env
conda create -n gs310 python=3.11 -y
conda activate gs310
# 2) CUDA toolkit (12.4 via system install or conda-forge/nvidia)
# `nvcc --version` must work before gsplat's first import
# 3) PyTorch with matching CUDA (cu124/cu128 - pick what matches driver/toolkit)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu124
# 4) Rasterizer + packaged 3DGS
pip install gsplat
pip install --upgrade gaussian-splatting
# Optional: live packaged git instead of the wheel
# pip install wheel setuptools
# pip install --upgrade git+https://github.com/yindaheng98/gaussian-splatting.git@master --no-build-isolation
First import gsplat JIT-compiles CUDA kernels. Needs nvcc on PATH, a C++ toolchain, headers, and spare RAM. Machine wedged mid-compile? export MAX_JOBS=1 and pin arch – e.g. export TORCH_CUDA_ARCH_LIST=8.9 for your SM. Custom Python builds sometimes also need C_INCLUDE_PATH pointed at the right include dir (community workaround territory; see gsplat issue discussions such as #539).
Pro tip: On Windows, open the “x64 Native Tools” VS prompt (or put MSVC
cl.exeonPATH) before that first gsplat import. Classic 3DGS pain was the pip subprocess buildingdiff-gaussian-rasterizationwithout a compiler – WinError 182 / metadata-generation-failed shows up the same way when MSVC is missing.
First-time configuration + sample data
Happy path: official Tanks & Temples / Deep Blending COLMAP bundle from INRIA (tandt_db zip on the project page).
mkdir -p data output && cd data
wget https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/datasets/input/tandt_db.zip
unzip tandt_db.zip
cd ..
# Packaged quick start: densify mode, 30k iters, truck scene
python -m gaussian_splatting.train -s data/truck -d output/truck -i 30000 --mode densify
No YAML for the default path. Early flags: -s COLMAP source, -d output, -i iterations, --mode densify. Package docs also describe gsplat-2dgs backend switches, depth regularization, and exposure-related options once a basic run works – check the PyPI install/quick-start section for the exact flag names on 2.10.3 rather than copying blog folklore.
Your own captures? Poses are on you. This package does not ship dataset creation. Use original convert.py from graphdeco or nerfstudio ns-process-data if you already live there.
Verify the install works
python - <<'PY'
import torch
import gsplat
import gaussian_splatting
print("torch", torch.__version__, "cuda", torch.cuda.is_available())
print("device", torch.cuda.get_device_name(0) if torch.cuda.is_available() else "cpu")
print("gsplat OK", getattr(gsplat, "__version__", "unknown"))
print("gaussian_splatting import OK")
PY
# After a short train (or point -d at a finished run)
python -m gaussian_splatting.render -s data/truck -d output/truck -i 7000 --mode densify
python -m gaussian_splatting.viewer -d output/truck -i 7000
You want: CUDA True, a real GPU name, no libcudart / extension import errors, and point_cloud/iteration_*/point_cloud.ply under -d. Import “hangs” on first run? Usually JIT – watch CPU/RAM; killing mid-link leaves a bad torch_extensions cache.
Common install errors and fixes
1. metadata-generation-failed / WinError 182 while building rasterizer wheels
OS cannot run the compiler binary setup found. Install VS Build Tools (C++ workload), launch from Native Tools, set DISTUTILS_USE_SDK=1, put MSVC Hostx64x64 on PATH, reinstall with pip install . --no-build-isolation inside extension folders if you are on original submodules. Graphdeco issue traffic on Win11 (including #1322) maps to this pattern.
2. libcudart.so.12 (or .11) missing at import
Extension linked against a different CUDA runtime than LD_LIBRARY_PATH. Align driver ↔ toolkit ↔ torch+cuXXX. Export CUDA_HOME and toolkit lib64, then reinstall gsplat and gaussian-splatting.
3. gsplat JIT: no nvcc / pyconfig.h / RAM thrash
export PATH=/usr/local/cuda-12.4/bin:$PATH
export CUDA_HOME=/usr/local/cuda-12.4
export TORCH_CUDA_ARCH_LIST=8.6 # your GPU's SM version
export MAX_JOBS=1
# custom Python builds may also need:
# export C_INCLUDE_PATH=/path/to/python/include
python -c "import gsplat"
4. Original environment.yml on CUDA 12 hosts
Official README path still assumes CUDA SDK 11.x, not 12. Forcing the old yml on a 12-only machine is why submodule builds fail metadata or wheels. Prefer the pip stack above. If you need the reference optimizer anyway: plain conda Python, pip install torch...cu128 (or your tag), submodules with --no-build-isolation, explicit TORCH_CUDA_ARCH_LIST. Some newer toolchains also need a #include <cstdint> patch in rasterizer_impl.h – community fix, not upstream gospel.
Upgrade, original-repo note, uninstall
Upgrade packaged tool:
pip install --upgrade gsplat gaussian-splatting
API pin: pip install gaussian-splatting==2.10.3.
Still want the original optimizer?
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
cd gaussian-splatting
# Manual torch+cuda 12 env beats stock environment.yml on modern GPUs
python train.py -s /path/to/colmap_scene
Pull latest main if you need fixes landed after the fork point; do not assume every packaged flag exists there.
Uninstall / cleanup:
pip uninstall -y gaussian-splatting gsplat
rm -rf ~/.cache/torch_extensions # bad JIT builds
conda env remove -n gs310 # if conda
# delete output/ and large COLMAP trees when finished
Is a “correct” research clone worth a day of toolchain archaeology when the PyPI build already trains your scene? Depends whether you are shipping views or reproducing a table.
Next move: truck scene, 30k densify, viewer on an early iteration while it finishes. PLY shows up and the viewer loads – you are done fighting install folklore.
FAQ
Is gaussian-splatting 2.10.3 the same as the official INRIA code?
Core algorithms track the fork commit a2a91d9. Packaging, gsplat backend, and extra modes (2DGS-style paths, depth reg, exposure tools as documented on PyPI) are additive. Need pure paper reproduction and SIBR viewer binaries? Graphdeco repo + INRIA downloads.
How much VRAM do I need for my own room scan?
Single-room phone capture, COLMAP’d, often fits 8-12GB if you downscale images or thin the set. Big outdoor scenes still lean 16-24GB unless you cull hard or stay on gsplat’s lighter raster path. OOM at densification? Drop resolution first. There is no NeRF-style mini-batch knob to nudge.
Docker or nerfstudio instead?
Yes – when you want a lockfile. splatfacto already sits on gsplat; ns-process-data then ns-train splatfacto is the short path from video to splat. Use this pip package when you want a thin trainer without the full nerfstudio stack.