LGM 的全称是 Large Multi-View Gaussian Model,来自北大与南洋理工 S-Lab 的 Jiaxiang Tang(ashawkey)等人,论文 arXiv:2402.05054,代码在 3DTopia/LGM,权重在 ashawkey/LGM,代码与权重都是 MIT。它的思路很干脆:不做 SDS 优化,也不直接回归网格,而是先用多视角扩散模型把一张图(或一句提示词)变成 0°/90°/180°/270° 四个视角,再喂给一个非对称 U-Net,逐像素吐出 14 个通道 —— 3 维位置、1 维不透明度、3 维尺度、4 维旋转四元数、3 维颜色,也就是一个 3D 高斯的全部参数。四张 128×128 的特征图拼起来就是 65,536 个高斯,论文宣称 5 秒出一个 3D 物体,训练渲染分辨率拉到了 512。
所以搞清楚显存花在哪很重要。LGM 自己的 fp16 权重只有 830MB,官方 readme 写的「约 10GB」是整条链路的总账:ImageDream(图生 3D,guidance 5.0)或 MVDream SD2.1(文生 3D,guidance 7.5)跑 30 步扩散,加上 rembg 抠图的 U2-Net、LPIPS 的 VGG(训练时才载入)、以及最后 360° 环绕视频渲染的开销。换句话说,把 LGM 单独抠出来做推理服务,显存占用会低得多;但你照着官方脚本一把梭,就得按 10GB 起步准备。24GB 的卡是这条链路最舒服的落点 —— 不是因为跑不动,而是因为你还要留出空间给 convert.py 那段网格拟合。
还有一件必须讲清楚的事:LGM 是 2024 年 2 月的工作,readme 的 News 栏停在 2024.4.3 那次旋转归一化 bug 修复。今天开源 3D 生成的第一梯队已经换成了 TRELLIS(image-large 1.2B、text-xlarge 2.0B,官方要求至少 16GB 显存,MIT)和腾讯混元 Hunyuan3D 2.1(DiT 3.0B + Paint 1.3B,形状生成 6GB、形状加纹理 16GB)。但 LGM 没有被淘汰,它占的是另一个生态位:0.4B 参数、830MB 权重、MIT 无附加条款、单卡秒级出高斯、代码短到能整个读完。做批量预览、做资产初筛、做高斯泼溅管线的前端、做教学与二次开发的起点,它到今天仍然是性价比最高的那一个。
01 —
权重与配置:别拿错文件
官方只公开了 big 配置的权重,四个 safetensors 文件里只有一个是你该用的。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| big + model_fp16_fixrot.safetensors | 0.415B(415,042,848) | 权重 830MB/整条链路 ~10GB | splat 128 → 4×128×128 = 65,536 高斯,渲染 512 | 唯一该用的版本。2024.4.3 修掉旋转归一化的严重 bug 后又微调了 30 个 epoch,命令行必须显式 --resume 到这个文件名。 |
| big + model_fp16.safetensors(已废弃) | 0.415B | 权重 830MB | 同上,splat 128 / 渲染 512 | 旋转归一化有 bug 的旧权重。坑在于 readme 的示例命令行至今还写着这个文件名,照抄就会拿到画质劣化的结果,而且不报错。 |
| model_fixrot.safetensors(fp32 全精度) | 0.415B | 权重 1.66GB,按 F32 常驻 | splat 128 / 渲染 512 | 要在 LGM 上继续训练、蒸馏或改架构,从这个全精度文件起步;纯推理没必要,infer.py 会直接 model.half()。 |
| lrm / small 配置(无公开权重) | 同架构,少一层解码器 | 训练 bf16、batch 8/卡 | splat 64 → 16,384 高斯,渲染 256,12 视角监督 | 论文里的默认设置,up_channels 是 (1024,1024,512,256)。官方没放权重,想要只能自己训。 |
| tiny 配置(无公开权重) | 下采样通道砍到 (32,64,128,256,512),官方未公布参数量 | 训练 batch 16/卡 | splat 64 → 16,384 高斯,渲染 256,8 视角 | 论文消融用的小架构。适合拿来验证训练管线是否跑通,或者在便宜卡上做数据实验。 |
02 —
该租哪张卡
推理 10GB 起步,但网格转换和训练复现是两个完全不同的量级。
跑通图生 3D/文生 3D,出 .ply 和 360° 视频
RTX 3090 24GB$0.193/卡·时
10GB 的链路放进 24GB 绰绰有余,而且 Tesla T4 16GB 要 $0.298 —— 比它又贵又小,没有理由选。
批量出资产 + convert.py 高斯转带贴图网格
RTX 4090 24GB$0.540/卡·时
网格化是 fit_nerf 512 步加 fit_mesh 2048 步的优化循环,纯算力活,Ada 的吞吐把每个资产的分钟数直接砍下来。
常驻 Gradio 服务,同时挂 TRELLIS 或 Hunyuan3D 2.1 做效果对比
RTX A6000 48GB$0.817/卡·时
48GB 能把 LGM 全链路和一个 16GB 级别的新模型同时常驻,省掉反复换权重的冷启动。
按官方 acc_configs/gpu8.yaml 复现训练
A100 SXM4 80GB$1.088/卡·时
big 配置是 bf16、batch 8/卡、8 视角监督加 LPIPS VGG,显存和 NVLink 都要够;NexGPU 单节点最多 14 卡,8 卡一次开完。
03 —
四步跑起来
torch 2.1.0 + cu118 是官方验证过的组合,两个 CUDA 扩展必须现场编译。
- 01
开一张 24GB 卡,先把 torch 和 xformers 钉死
官方明确写了 xformers is required。版本必须和 torch、CUDA 对齐,先装 torch 2.1.0 + cu118 再装 xformers,顺序反了 pip 会把 torch 拖回默认版本。NexGPU 的 PyTorch 预置镜像开机即用,按秒计费,编译这一段的钱是真的花不了几分。
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118 && pip install -U xformers --index-url https://download.pytorch.org/whl/cu118 - 02
编译 diff-gaussian-rasterization 和 nvdiffrast
LGM 用的不是原版高斯光栅化器,而是 ashawkey 加了深度和 alpha 输出的分支,必须带 --recursive 克隆,否则子模块缺失直接编译失败。nvdiffrast 只有导出网格才用得上,但一起装完省事。两个都要 nvcc,镜像里带 CUDA toolkit 会顺很多。
git clone --recursive https://github.com/ashawkey/diff-gaussian-rasterization && pip install ./diff-gaussian-rasterization && pip install git+https://github.com/NVlabs/nvdiffrast && pip install -r requirements.txt - 03
只拉修好旋转的那个权重
830MB,一分钟的事。ImageDream(ashawkey/imagedream-ipmv-diffusers)和 MVDream SD2.1(ashawkey/mvdream-sd2.1-diffusers)会在首次运行时自动下载,注意它们是 trust_remote_code=True 加载的,离线环境要提前 warm 一遍缓存。
mkdir -p pretrained && wget -P pretrained https://huggingface.co/ashawkey/LGM/resolve/main/model_fp16_fixrot.safetensors - 04
推理出高斯,再转成带 1024 贴图的网格
infer.py 走 rembg 抠图、recenter(border_ratio 0.2)、ImageDream 30 步扩散、LGM 一次前向,输出 .ply 和 .mp4。convert.py 才是耗时的那一段:高斯先拟合成 NeRF(512 步),marching cubes 出面片,再 fit_mesh 2048 步、decimate 到 5 万面,最后烘 1024×1024 贴图。云上无显示器时 --force_cuda_rast 不是可选项,是必需项。
python infer.py big --resume pretrained/model_fp16_fixrot.safetensors --workspace workspace_test --test_path data_test && python convert.py big --test_path workspace_test/saved.ply --force_cuda_rast
一次完整跑通要花多少钱
按 RTX 3090 24GB 的 $0.193/卡·时算一笔实账。第一次开机要编译 diff-gaussian-rasterization 和 nvdiffrast、拉 ImageDream 与 MVDream 权重,算 0.5 小时:0.5 × $0.193 = $0.0965。接着连续跑批量图生 3D 三小时:3 × $0.193 = $0.579。再用 convert.py 把挑中的高斯转成带贴图的 glb,一小时:1 × $0.193 = $0.193。合计 4.5 小时 × $0.193 = $0.8685 —— 不到一美元,整套 3D 生成管线从零跑通并产出可用资产。换成 RTX 4090 24GB($0.540/卡·时)同样 4.5 小时是 $2.43,多付的两美元买的是扩散采样和网格拟合这两段的时间。存储要分开算:LGM 的 fp16 权重 830MB,加上 ImageDream、MVDream 和输出的 .ply/.mp4/.glb,按 20GB 计是 20 × $0.414 = $8.28/月;实例一停计算就停止计费,但存储会一直算到你销毁它为止,所以跑完把 workspace 导出再删是最省的做法。真要从头复现训练,官方给的是 acc_configs/gpu8.yaml:A100 SXM4 80GB 按 $1.088/卡·时,8 卡就是 8 × $1.088 = $8.704/小时,NexGPU 单节点最多能开到 14 卡,不用申请配额、没有最低消费。
04 —
