跳到主要内容

三维生成模型

一张图 10 秒生成可用 3D 网格,InstantMesh 本地部署与显存实测

TencentARC 的前馈式图生 3D 方案:Zero123++ 补视图,LRM 回归 triplane,FlexiCubes 抽三角面。这一页把 4 个官方权重、真实的显存门槛、以及一条今天还能跑通的部署路径说清楚。

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-large16 层 Transformer / dim 1024 / triplane 80 维 / 128 samples-per-rayckpt 1.51GB,重建以 fp32 常驻;渲染阶段峰值单次分配约 15GiB,建议 24GB 起FlexiCubes grid_res 128、grid_scale 2.1、render 512、贴图 1024默认也是效果最好的一档,出网格质量与几何细节的首选,README 示例命令用的就是它。
instant-mesh-base12 层 Transformer / triplane 40 维 / 96 samples-per-rayckpt 1.25GB,同样走 FlexiCubes,24GB 卡上余量比 large 更宽FlexiCubes grid_res 128、render 512、贴图 1024参数砍掉近一半但保留完整的 FlexiCubes 出网格能力,适合批量吞吐优先、单件质量可让步的流水线。
instant-nerf-large16 层 Transformer / triplane 80 维 / 128 samples-per-rayckpt 1.51GB,render 384 比 mesh 分支的 512 更省NeRF 渲染 + Marching Cubes 256,mesh_threshold 10.0几何过渡更平滑、体渲染视频更好看,代价是没有 FlexiCubes 那条直出贴图的路径。
instant-nerf-base12 层 Transformer / triplane 40 维 / 96 samples-per-rayckpt 1.25GB,四个权重里最轻的一档NeRF 渲染 + Marching Cubes 256,render 384验证环境是否装通、做冒烟测试用这个最快;正式产出别用它。
Zero123++ v1.2 定制 UNetsudo-ai/zero123plus-v1.2 + TencentARC 白底微调 UNetdiffusion_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 —

四步跑起来

依赖版本钉得很死,照抄这一串比自己凑更快。

  1. 01

    开实例,拿一个带 CUDA 12.1 工具链的镜像

    选 PyTorch 类的开发镜像,别选纯 runtime 的——后面 nvdiffrast 要 JIT 编译 CUDA 扩展,没有 nvcc 会在第一次推理时直接失败。SSH 进去后克隆仓库即可。

    git clone https://github.com/TencentARC/InstantMesh.git && cd InstantMesh
  2. 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
  3. 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
  4. 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 —

常见问题

InstantMesh 最低需要多大显存?16GB 的卡能跑吗?

instant-mesh-large 跑不动。重建模型是 fp32 常驻的,渲染阶段会出现一次 15GiB 量级的单次分配,社区在 14.58GB 可用的卡上原样报出 “Tried to allocate 15.00 GiB”;也有人反馈这条配置整体要占到 16GB 上下。想稳,24GB 起步。nerf-base 那一档轻不少,但正式产出别指望它。NexGPU 的 RTX 3090 24GB 是 $0.193/卡·时,按秒计费,开一台试一次的成本比你纠结的时间还便宜。

为什么 Gradio 的 app.py 比命令行 run.py 更容易 CUDA out of memory?

两条路径的峰值不一样。app.py 默认 75 步扩散,还要实时渲染转盘视频预览,同一张卡上叠着扩散和重建两份权重;run.py 不加 --save_video 时轻得多,有人在 24GB 的 4090 上 Gradio 报 OOM、换命令行同一张图就过了。真要交互式常驻,直接上双卡让 app.py 自动把扩散放 device0、重建放 device1,或者用一张 NexGPU RTX A6000 48GB($0.817/卡·时)一次性把余量拉满。

都 2026 年了,InstantMesh 还值得用吗?Hunyuan3D、TRELLIS 不是更新?

该说的实话要说:InstantMesh 仓库最后一次提交停在 2025 年初,效果天花板确实被后来的模型抬过去了——Hunyuan3D-2.1 是 3.0B 的形状 DiT 加 1.3B 的贴图模型,官方口径形状 6GB、形状加贴图 16GB;TRELLIS 的 image-large 是 1.2B,官方要求至少 16GB 显存,MIT 协议。但 InstantMesh 还有三个硬优势:Apache-2.0 没有商用附加条款、重建阶段零采样所以批量吞吐极高、单个 ckpt 只有 1.5GB,做数据 bootstrap 和大批量粗模生成仍然顺手。这三个模型在 NexGPU 上可以放同一台机器同一块卷里 A/B,省得为了比一次效果买两台机器。

nvdiffrast 装不上、第一次推理卡住不动怎么办?

nvdiffrast 是从 NVlabs 的 git 源码装的,首次调用时才 JIT 编译 CUDA 扩展,所以需要 ninja 和一个跟 PyTorch 版本对得上的 nvcc(CUDA 12.1)。纯 runtime 镜像没有 nvcc,会在你以为已经装完之后才炸。好消息是 InstantMesh 用的是 dr.RasterizeCudaContext 而不是 GL context,不需要 OpenGL/EGL,无头服务器完全够用。NexGPU 2000 多个预置镜像里的 PyTorch 开发镜像自带完整工具链,选对镜像这一步就不存在。

--export_texmap 为什么特别慢?不加会怎样?

慢在 xatlas 的 UV 展开,官方 README 也直接提示了这一步耗时,texture_resolution 默认 1024。不加 --export_texmap 时输出的是带顶点色的 .obj,几何是对的,但很多 DCC 软件不显示顶点色,导进 Blender 或 UE 会看到一坨灰模。实际做法是评估阶段一律不加,定稿的那几个再补烤贴图。在 NexGPU 上这几分钟按秒计费,几乎不构成成本。

生成结果是什么格式?能直接接进 Blender 或 UE 吗?

默认导出 .obj,顶点色写在顶点数据里;加 --export_texmap 会额外出 mtl 和贴图,那份才是能直接丢进 DCC 的资产;加 --save_video 会另存一段转盘视频方便快速筛选。还可以用 --view 4 把输入视图从 6 张降到 4 张,或用 --scale、--distance 微调相机。NexGPU 的实例支持 SSH、Jupyter、Web 终端、REST API 和 CLI,产出直接从卷拉走或者挂到你自己的流水线上都行,Telegram 上有中英双语支持,不用排工单。

开始使用 NexGPU

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

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