跳到主要内容

三维重建 · 辐射场

Gaussian Splatting 本地部署:显存到底要多少,卡该怎么挑

从 INRIA 原版到 gsplat、3DGRUT、分层 3DGS,把每条实现路线的真实显存占用、真实训练时长和真实授权条款摊开讲清楚,然后告诉你在 NexGPU 上哪张卡最划算。

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 镜像已经预装

  1. 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
  2. 02

    COLMAP 求解相机位姿,这一步才是真正的瓶颈

    convert.py 会调 COLMAP 做特征提取、匹配和稀疏重建,产出位姿和初始点云。位姿糊了后面全白搭——高斯会长成一团棉花。官方分层 3DGS 的示例里,1500 张图这一步花了 47 分钟,所以别把它当作可以忽略的预处理。图像宽度超过 1.6K 会被自动降到 1.6K,想保留细节请自己控制输入分辨率。

    python convert.py -s data/my_scene
  3. 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
  4. 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 —

常见问题

Gaussian Splatting 训练到底需要多大显存?24GB 够不够?

看你走哪条路。原版仓库把「24 GB VRAM(训练到论文评测质量)」写进了硬件要求,同时也说按他们的估算约 8GB 应该能跑——差别在于是否放任致密化。换成 gsplat,同样 30K 迭代的 Mip-NeRF360 峰值只要 5.7GB;用 MCMC 把高斯数锁在 100 万,1.98GB 就够。所以 24GB 对绝大多数单场景是够的,NexGPU 的 RTX 3090 24GB $0.193/卡·时 和 RTX 4090 24GB $0.540/卡·时 正好覆盖这两端。

3D 高斯泼溅可以商用吗?会不会有授权风险?

INRIA 原版不行。它的 LICENSE.md 全大写写明未经许可方事先明确同意不得为商业目的使用、利用或分发,商用需联系 Inria 技术转移部门。要做产品请换 Apache-2.0 的实现:nerfstudio 的 gsplat、NVIDIA 的 3DGRUT、或者 Brush。这三条路线在 NexGPU 的预置 PyTorch 镜像上都能直接装,不需要额外配额申请。

为什么 3DGS 训练一开始好好的,跑到一半才 OOM?

因为致密化。高斯数量在训练中持续增长,显存峰值出现在中后段而不是启动时,这也是原版仓库给出 --densify_grad_threshold、--densify_until_iter、--data_device cpu 和 --test_iterations -1 这几个逃生口的原因。想彻底摆脱这种不确定性,就用 gsplat 的 MCMC 策略把 cap-max 写死,显存变成可预算的常数。在 NexGPU 上你也可以先用 $0.193/卡·时 的 3090 试跑,撞墙了再换 48GB 的 A6000,按秒结算不浪费。

Tesla P40、V100 这些老卡能不能跑 Gaussian Splatting?

V100 能,P40 不能。原版明确要求 CUDA 计算能力 7.0 以上:Tesla V100 是 7.0、Tesla T4 是 7.5,都在门槛之上;而 Tesla P40 是 Pascal 架构的 6.1,编译 diff-gaussian-rasterization 时就过不去。NexGPU 的 Tesla V100 32GB 只要 $0.188/卡·时,是整个价目表里最便宜的 32GB 显存,适合跑 gsplat 这类不依赖 RT Core 的训练;要 3DGRT 光线追踪则必须上 RTX 5090 32GB $0.723/卡·时。

COLMAP 这一步要占用 GPU 吗?要跑多久?

要。特征提取和匹配会用到 GPU,稀疏重建则吃 CPU 单核性能,是整条流水线里最难并行的一段。参考官方分层 3DGS 的示例,1500 张图在 RTX A6000 机器上花了 47 分钟。因为它和训练共用同一台机器,NexGPU 按秒计费这一点在这里格外值钱——预处理和训练是连续的同一个实例计时,实例一停计算立刻停止计费,不会因为「跑了 47 分钟不满一小时」被按整小时收。

训练出来的 PLY 文件太大,前端加载不动怎么办?

转格式。PlayCanvas 的 SOG 是基于 WebP 的超压缩格式,官方称体积约为 PLY 的十五分之一到二十分之一,用 splat-transform 一条命令就能在 PLY、.sog、.spz、.ksplat、compressed.ply 之间互转。转换本身是 CPU 活,在 NexGPU 上你可以在训练完成的同一个实例里顺手做完再停机;产物留在盘上按 $0.414/GB·月 median 计存储费,出站流量 median $0.0081/GB,交付成本基本可以忽略。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。