Gaussian Splatting 不是一个「模型」,它是一套优化流程。Kerbl 等人在 SIGGRAPH 2023 的原始论文里,用一堆各向异性三维高斯球去拟合一组已知位姿的照片,再用可微光栅化把它们泼回屏幕,做到 1080p 分辨率下 ≥100 fps 的实时新视角合成,质量还压过当时的 Mip-NeRF360。所以这里没有「7B 还是 70B」,只有「这个场景收敛出了多少个高斯」——而显存,几乎完全由这个数字决定。
这就带来了自建时最反直觉的一件事:3DGS 的显存占用不是开训那一刻定死的,而是随着致密化(densification)一路往上爬。官方 README 把硬件要求写成「24 GB VRAM(训练到论文评测质量)」,同时又老老实实补了一句「按我们的估算,用少得多的显存(约 8GB)应该也能跑」。两句话都对,差别就在你允不允许高斯无限增殖。理解了这一点,选卡这件事才有依据。
另一件必须先说的事是授权。graphdeco-inria/gaussian-splatting 挂的是 Inria 与 MPII 的自定义研究许可,正文里用全大写写着「未经许可方事先明确同意,用户不得为商业目的使用、利用或分发本软件」,商用要发邮件给 Inria 技术转移部门。想把成果放进产品,正确做法是换到 Apache-2.0 的实现——nerfstudio 的 gsplat、NVIDIA 的 3DGRUT、或者完全不依赖 CUDA 的 Brush。这页后面每条路线都会标清楚。
01 —
六条主流实现路线,显存和适用面各不相同
同一套数学,不同的工程取舍——先对号入座,再去挑卡
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| graphdeco-inria/gaussian-splatting(原版 + 2024.10 加速分支) | 典型场景 100 万–600 万高斯 | 24GB(论文级 30K 迭代)/官方称约 8GB 为理论下限 | 输入图像宽度 1–1.6K 像素,超过 1.6K 自动降采样 | 学术基线,指标对齐用它。合并了 Taming-3DGS 的加速光栅化器,默认快 1.6 倍、加 --optimizer_type sparse_adam 快 2.7 倍,还带上了深度正则、曝光补偿和 --antialiasing。授权为非商用研究许可。 |
| nerfstudio-project/gsplat v1.6(Apache-2.0) | 默认收敛约 323 万高斯,可用 --cap-max 直接锁死 | 30K 单卡 5.7GB(原版同条件 9.0GB);MCMC 100 万高斯 1.98GB、300 万 4.99GB | 支持多卡 DDP,4 卡跑同一场景时单卡只占 2.0GB | 工程首选。官方基准里 Mip-NeRF360 七场景平均 PSNR 与原版打平(28.95),显存少约 4 成、时间少约 4%;四卡把 37 分 13 秒压到 11 分 28 秒。要 PyTorch 2.7+,支持 CUDA 12.8/13.2。 |
| Splatfacto / Splatfacto-big(nerfstudio) | 由 nerfstudio 的致密化策略自动决定 | 约 6GB/约 12GB | 整图训练而非光线采样,依赖 COLMAP 稀疏点云初始化 | 底层就是 gsplat,胜在 ns-process-data 到 ns-viewer 一条龙。想快速把手机绕拍的一段视频变成可交互场景,这条路摩擦最小。 |
| NVIDIA 3DGRUT:3DGRT + 3DGUT(Apache-2.0) | 与原版同量级,额外承载二次光线 | 需带 RT Core 的显卡;官方基准跑在 RTX 5090 上 | 支持畸变相机、鱼眼、卷帘快门,以及反射/折射/阴影 | 3DGRT 用光线追踪替代泼溅,3DGUT 用无迹变换让光栅化吃下畸变相机。NeRF Synthetic 上 3DGUT 训练 214.6 秒、846 FPS,3DGRT 训练 479.3 秒、347 FPS;Mip-NeRF360 上 3DGUT+MCMC 为 PSNR 27.78、308 FPS。自动驾驶和 XR 场景基本绕不开它。 |
| Hierarchical 3D Gaussians(SIGGRAPH 2024) | 按 100 米立方分块,每块 100–2000 台相机 | 渲染端默认按 16GB 显存预算调度,另加约 1.5GB 帧缓冲 | 官方示例 1500 张图分 2 块;训练端建议 48GB 级显卡 | 唯一能吃下街区级、公里级采集的官方方案:分块独立训练再合并层级结构,按视距和显存预算按需调页。官方在 RTX A6000 上给出的时间是 COLMAP 47 分钟、分块预处理 95 分钟、训练 171 分钟。 |
| Brush(Apache-2.0,WebGPU + Burn) | 与场景规模同步 | 无 CUDA 依赖,AMD/Intel/Apple/浏览器均可 | 支持 COLMAP 与 nerfstudio 数据格式,训练过程实时可视 | 编译出来是无依赖的单文件二进制,macOS、Windows、Linux、Android、浏览器全都能跑。交付给不装 CUDA 的客户端时是最省事的一条路,代价是生态和算子成熟度还不及 gsplat。 |
02 —
在 NexGPU 上,这四张卡覆盖 95% 的 3DGS 需求
按你实际要跑的路线选,不用为了「保险」多付一倍
用 gsplat + MCMC 复现指标、批量跑消融,显存锁在 5GB 以内
RTX 3090 24GB$0.193/卡·时
MCMC 把高斯数量上限写死后显存完全可预测(100 万约 1.98GB、300 万约 4.99GB),24GB 的 3090 富余极大,而这是整个价目表里最便宜的 24GB 卡。
原版 3DGS 跑满 30K 迭代、不限制致密化,要论文级评测质量
RTX 4090 24GB$0.540/卡·时
官方硬件要求就是 24GB,且 Ada 架构能把 fused-ssim 与 sparse_adam 的 2.7 倍加速吃满,不用靠 --data_device cpu 换显存。
跑 3DGRT/3DGUT,要反射折射、鱼眼或卷帘快门相机
RTX 5090 32GB$0.723/卡·时
3DGRT 的性能直接依赖 RT Core,而 NVIDIA 官方公布的那组基准(3DGUT 846 FPS)就是在 RTX 5090 上测的,环境和数字都能对得上。
分层 3DGS 做街区/园区级大场景,上万张图分块训练合并
RTX A6000 48GB$0.817/卡·时
官方仓库公布的 47/95/171 分钟三段耗时就是在 RTX A6000 上跑出来的,48GB 显存同时装得下合并阶段的层级结构和 16GB 渲染预算。
03 —
四步,从一段绕拍视频到可漫游场景
在 NexGPU 实例上直接照抄即可,PyTorch 与 CUDA 镜像已经预装
- 01
开实例,把仓库和子模块一次拉全
选带 PyTorch 的预置镜像开机,SSH 进去。原版仓库的三个子模块 diff-gaussian-rasterization、simple-knn、fused-ssim 必须跟着拉下来,漏掉任何一个都会在编译阶段炸;注意编译器要用 g++ 或 MSVC,官方明确写了不支持 Clang,GPU 计算能力需 7.0 以上。
git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive && pip install -e submodules/diff-gaussian-rasterization submodules/simple-knn submodules/fused-ssim - 02
COLMAP 求解相机位姿,这一步才是真正的瓶颈
convert.py 会调 COLMAP 做特征提取、匹配和稀疏重建,产出位姿和初始点云。位姿糊了后面全白搭——高斯会长成一团棉花。官方分层 3DGS 的示例里,1500 张图这一步花了 47 分钟,所以别把它当作可以忽略的预处理。图像宽度超过 1.6K 会被自动降到 1.6K,想保留细节请自己控制输入分辨率。
python convert.py -s data/my_scene - 03
开训:原版求指标,gsplat 求省显存
原版默认 30000 次迭代,在 7000 和 30000 步各存一次。显存吃紧就上 --data_device cpu、调高 --densify_grad_threshold、或者把 --test_iterations 设成 -1 避开评测时的显存尖峰。如果你要的是可控显存和商用授权,直接换 gsplat 的 MCMC 策略,--strategy.cap-max 写多少,显存就锁在多少。
python train.py -s data/my_scene -m output/my_scene --optimizer_type sparse_adam --antialiasing - 04
导出、压缩、交付
训练产物是 point_cloud/iteration_30000/point_cloud.ply,原始 PLY 体积很可观,直接丢给前端会拖垮首屏。转成 PlayCanvas 的 SOG 格式(meta.json + WebP 纹理,可打包成单个 .sog)体积能降到 PLY 的十五分之一到二十分之一,同一套工具也能输出 .spz 和 compressed.ply。实例停机计算就停止计费,PLY 留在盘上只按存储算。
npx splat-transform output/my_scene/point_cloud/iteration_30000/point_cloud.ply scene.sog
把账算给你看
先算大的。官方 Hierarchical 3DGS 仓库自己公布了示例数据集(1500 张图、2 个分块)在 RTX A6000 上的三段耗时:COLMAP 47 分钟、分块预处理 95 分钟、训练 171 分钟,合计 313 分钟 ≈ 5.22 小时。NexGPU 的 RTX A6000 48GB 是 $0.817/卡·时,5.22 × 0.817 ≈ $4.26。一个街区级大场景,从原始照片到可漫游的分层高斯,四美元多。 再算小的。用 gsplat 把 Mip-NeRF360 全部七个场景各跑满 30K 迭代,官方基准单场景 35 分 49 秒,七个场景约 4.18 小时,训练峰值显存 5.7GB——24GB 的 RTX 3090 绰绰有余,4.18 × 0.193 ≈ $0.81。不到一美元,把一整套论文指标重跑一遍。 换成 MCMC 锁 100 万高斯,单场景 15 分 42 秒、显存 1.98GB,同样在 3090 上跑一次约 $0.05。做超参搜索时并发开十个实例,一小时也就 $1.93,按秒计费、无最低消费、无起租时长,跑完就停。落盘的 PLY 按 $0.414/GB·月 median 计存储,转成 SOG 之后这笔钱还能再降一个量级。
04 —
