InstantMesh 由 TencentARC 在 2024 年放出,论文是 arXiv 2404.07191,代码与权重都是 Apache-2.0。它和早期那批靠 SDS 优化、每个物体要迭代几十分钟的图生 3D 方案完全不是一路:整条链路是前馈的,先用一个微调过的 Zero123++ v1.2 从单张图补出 6 张 320×320 的多视图,再由一个 sparse-view LRM 把这 6 张图一次性回归成 triplane,最后 FlexiCubes 在 128 分辨率的网格上可微地抽出三角面。重建这一段没有任何采样循环,论文给的端到端时间是 10 秒以内。
官方在 Hugging Face 上放的 ckpts 一共 7.27GB:4 个重建权重加 1 个多视图扩散 UNet。重建权重分两条支路——mesh 分支(instant_mesh_large.ckpt 1.51GB、instant_mesh_base.ckpt 1.25GB)走 FlexiCubes,直接出网格并支持烤 1024 贴图;nerf 分支(instant_nerf_large.ckpt、instant_nerf_base.ckpt)走 NeRF 加 Marching Cubes 256,渲染分辨率 384,几何更连续但要贴图得多绕一步。large 与 base 的差别在 configs 里写得很直白:16 层 Transformer、triplane 80 维、每条光线 128 个采样点,对 12 层、40 维、96 个采样点。
要自己跑,有两件事必须先知道。第一,run.py 里只有扩散 pipeline 指定了 torch_dtype=torch.float16,重建模型是直接 model.to(device) 以 fp32 常驻的,渲染阶段会出现一次 15GiB 量级的单次分配——社区在 14.58GB 可用的卡上原样报出 “Tried to allocate 15.00 GiB”,所以 16GB 的 T4、4060 Ti 这一档是跑不动 instant-mesh-large 的,24GB 才是可用起点。第二,这个仓库最后一次提交停在 2025 年初,依赖被钉死在 diffusers 0.20.2、transformers 4.34.1、gradio 3.41.2、PyTorch 2.1.0 加 CUDA 12.1 这套组合上,装到你日常那台机器里跟现有环境打架几乎是必然——反而是开一台按秒计费的干净 GPU 实例,装完跑完就停,最省事。
01 —
官方权重与配置对照
4 个重建 ckpt 加 1 个多视图 UNet,configs 目录里的参数就是选型依据。
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| instant-mesh-large | 16 层 Transformer / dim 1024 / triplane 80 维 / 128 samples-per-ray | ckpt 1.51GB,重建以 fp32 常驻;渲染阶段峰值单次分配约 15GiB,建议 24GB 起 | FlexiCubes grid_res 128、grid_scale 2.1、render 512、贴图 1024 | 默认也是效果最好的一档,出网格质量与几何细节的首选,README 示例命令用的就是它。 |
| instant-mesh-base | 12 层 Transformer / triplane 40 维 / 96 samples-per-ray | ckpt 1.25GB,同样走 FlexiCubes,24GB 卡上余量比 large 更宽 | FlexiCubes grid_res 128、render 512、贴图 1024 | 参数砍掉近一半但保留完整的 FlexiCubes 出网格能力,适合批量吞吐优先、单件质量可让步的流水线。 |
| instant-nerf-large | 16 层 Transformer / triplane 80 维 / 128 samples-per-ray | ckpt 1.51GB,render 384 比 mesh 分支的 512 更省 | NeRF 渲染 + Marching Cubes 256,mesh_threshold 10.0 | 几何过渡更平滑、体渲染视频更好看,代价是没有 FlexiCubes 那条直出贴图的路径。 |
| instant-nerf-base | 12 层 Transformer / triplane 40 维 / 96 samples-per-ray | ckpt 1.25GB,四个权重里最轻的一档 | NeRF 渲染 + Marching Cubes 256,render 384 | 验证环境是否装通、做冒烟测试用这个最快;正式产出别用它。 |
| Zero123++ v1.2 定制 UNet | sudo-ai/zero123plus-v1.2 + TencentARC 白底微调 UNet | diffusion_pytorch_model.bin 1.73GB,pipeline 以 fp16 载入,这一段不是显存瓶颈 | 输出 6 视图 @ 320×320,默认 75 步 EulerAncestral,seed 42 | 官方替换掉原版 UNet 就是为了稳定生成白底多视图;它是墙钟时间的大头,不是显存的大头。 |
02 —
按用途选卡
InstantMesh 的显存曲线是被 fp32 重建和 512 渲染撑起来的,选卡先看 24GB 这条线。
跑通全流程、单图出网格、做效果评估
RTX 3090 24GB$0.193/卡·时
24GB 是 instant-mesh-large 那次 15GiB 分配的最低安全线,3090 是能清这条线里最便宜的一张卡。
批量出图、常驻 Gradio、带 --export_texmap 烤 1024 贴图
RTX 4090 24GB$0.540/卡·时
墙钟时间几乎全花在 Zero123++ 那 75 步扩散上,Ada 的 fp16 吞吐比 Ampere 高一档,批量生产省下的是整块小时数。
app.py 双卡拆分,或单卡并起多个 worker
RTX A6000 48GB$0.817/卡·时
app.py 检测到两张卡会自动把扩散放 device0、重建放 device1;48GB 单卡则够让几个进程各自常驻一份 fp32 重建模型互不挤占。
复现两阶段训练,或按 zero123plus-finetune.yaml 微调多视图 UNet
H100 SXM 80GB$3.582/卡·时
论文两个阶段都用 8×H800,stage 1 的 batch size 是 48;8 卡 H100 是最接近的可租配置,NexGPU 单节点最多 14 卡。
03 —
四步跑起来
依赖版本钉得很死,照抄这一串比自己凑更快。
- 01
开实例,拿一个带 CUDA 12.1 工具链的镜像
选 PyTorch 类的开发镜像,别选纯 runtime 的——后面 nvdiffrast 要 JIT 编译 CUDA 扩展,没有 nvcc 会在第一次推理时直接失败。SSH 进去后克隆仓库即可。
git clone https://github.com/TencentARC/InstantMesh.git && cd InstantMesh - 02
按官方钉死的版本装环境,这一步最容易翻车
requirements.txt 里 diffusers 锁 0.20.2、transformers 锁 4.34.1、gradio 锁 3.41.2,任何一个往上升都会炸自定义 pipeline。nvdiffrast 是从 NVlabs 的 git 直接装的,需要 ninja;好消息是代码里用的是 dr.RasterizeCudaContext,不依赖 OpenGL/EGL,无头服务器可以直接跑。
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121 && pip install xformers==0.0.22.post7 ninja && pip install -r requirements.txt - 03
命令行出第一个网格
首次运行会从 Hugging Face 拉 7.27GB 权重,rembg 还会另外下 u2net 抠图模型。把 HF_HOME 指到挂载卷上,实例重开就不用重下。--export_texmap 会走 xatlas 做 UV 展开,官方 README 明确提示这一步耗时,评估阶段可以先不加。
export HF_HOME=/workspace/hf && python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video --export_texmap - 04
要交互就起 Gradio,显存吃紧就调参数
app.py 会自动占用两张卡做流水线拆分,只有一张卡就用 CUDA_VISIBLE_DEVICES 限定。Gradio 端比命令行更容易 OOM,因为它默认 75 步且实时渲转盘预览;把 diffusion_steps 降到 30、去掉 --save_video,峰值会明显下来。
CUDA_VISIBLE_DEVICES=0 python app.py
一次真实的花费
拿 RTX 3090 24GB 算,$0.193/卡·时。装环境加 nvdiffrast 首次编译加拉 7.27GB 权重,按半小时算;之后连续跑 3 小时批量出网格,合计 3.5 小时 × $0.193 = $0.68。同样 3.5 小时放 RTX 4090 24GB 上是 3.5 × $0.540 = $1.89,多出来的钱买的是 75 步扩散那一段实打实缩短的墙钟。想再压时间就把 --diffusion_steps 从默认 75 降到 30。--export_texmap 那段 UV 展开慢是真的,但慢在按秒计费面前不值钱:3090 上多跑 5 分钟是 0.193 ÷ 60 × 5 ≈ $0.016。权重和产出想留着,20GB 的卷按 $0.414/GB·月 折算是每月 $8.28,实例一停算力就不再计费,卷销毁前存储继续计。真要照论文复现训练,8 卡 H100 SXM 80GB 是 8 × $3.582 = $28.66/小时,同样按秒计,跑完就停。
04 —
