跳到主要内容

三维生成模型

DreamFusion 本地部署:SDS 文生 3D 到底吃多少显存

论文里的 DreamFusion 用的是 Google 没公开的 Imagen,所以既没有官方代码也没有 checkpoint。今天你能真正跑起来的,是 threestudio 和 stable-dreamfusion 两套 Apache-2.0 复现——6GB 起步,24GB 才舒服,一次生成按小时算。

DreamFusion 是 Ben Poole、Ajay Jain、Jonathan T. Barron、Ben Mildenhall 在 2022 年 9 月放出的方法(arXiv 2209.14988),拿下了 ICLR 2023 的 Outstanding Paper。它的核心是 Score Distillation Sampling:不训练任何 3D 网络,而是把一个随机初始化的 NeRF(基于 mip-NeRF 360,5 个 ResNet 块、128 隐藏单元、Swish 激活)当成待优化参数,从随机相机位渲染 64×64 的着色图,丢给冻结的 Imagen 64×64 base 模型算去噪梯度,再把梯度反传回 NeRF。分类器自由引导权重开到 ω=100,时间步在 U(0.02, 0.98) 之间采样以避开数值不稳定的两端。论文里一个物体优化 15,000 步、约 1.5 小时,跑在一台 4 芯片的 TPUv4 上,每个芯片渲染一个视角、单设备 batch 为 1。

所有教程都该先讲清的一件事:DreamFusion 没有开源。Imagen 权重 Google 从来没放出来,所以官方既没有代码也没有可下载的模型,你在 Hugging Face 上搜到的 dreamfusion 全是社区复现。真正能装能跑的是两个 Apache-2.0 仓库。threestudio 把引导模型换成 Stable Diffusion 或 DeepFloyd IF:dreamfusion-sd 训练约 6GB 显存,dreamfusion-if 需要约 15GB 抽文本嵌入再加约 10GB 训练,默认都跑 10,000 步。ashawkey 的 stable-dreamfusion 用 Instant-NGP 做骨干,官方口径约 16GB,加 --IF 要约 24GB,还带一个 DMTet 精修阶段直接出网格。后者 README 开头就自己写着「当前生成质量达不到原论文,很多 prompt 会彻底失败」——这句话你应该信。

把镜头拉远,SDS 这条线已经长成一整棵树:Magic3D 的粗+精两阶段(精修阶段只要约 5GB)、ProlificDreamer 的 VSD(512×512 约 30GB,降到 64×64 约 15GB,同模型复用 LoRA 还能压到 10GB 以下)、Fantasia3D、TextMesh、SJC、Magic123;MVDream 一次出 4 张 256×256 的同步视角,把恼人的 Janus 多面问题按了下去;DreamGaussian 换成 3D Gaussian Splatting,把单个物体压到分钟级。另一条路干脆绕开 SDS:TRELLIS(MIT,text-base 342M / text-large 1.1B / text-xlarge 2B,官方要求至少 16GB 显存)和 Hunyuan3D 2.1(形状 3.3B 约 10GB、PBR 贴图 2B 约 21GB,合计约 29GB)直接前向出资产。所以今天跑 DreamFusion 的理由基本是复现、消融、教学,或者你要在 SDS 损失上动刀——不是为了最快拿到一个 obj。这类活按小时租卡最划算,跑完就停。

01 —

能跑的 DreamFusion 有哪几个

官方没有权重,下面是社区实际在用的复现配置和它们自己公布的显存口径。

版本参数量显存上下文说明
DreamFusion(原论文,Google Research)Imagen 64×64 base + mip-NeRF 360无权重可下载;原文跑在 4 芯片 TPUv4渲染 64×64,优化 15,000 步 ≈ 1.5 小时只有方法和论文,Imagen 从未公开。官网 gallery 的 397 条 prompt 倒是被 threestudio 收进了 load/prompt_library.json,可以用 lib: 语法直接调。
threestudio · dreamfusion-sdStable Diffusion 引导 + HashGrid NeRF训练约 6GB默认 10,000 步,batch_size 默认 1入门首选,6GB 卡就能启动。但 6GB 只是「跑得起来」,论文用的是 batch 4,显存越大几何越稳。
threestudio · dreamfusion-ifDeepFloyd IF-I-XL + T5-XXL 文本编码器抽文本嵌入约 15GB,训练约 10GB默认 10,000 步,引导尺度 20官方明说「IF 的效果远好于 Stable Diffusion」。T5-XXL 即使 8-bit 量化也要吃约 15GB,是整条链路的显存瓶颈;用前得先在 HF 上接受 IF-I-XL-v1.0 的协议。
stable-dreamfusion · -O(Instant-NGP)SD 2.1 默认 + Instant-NGP 骨干约 16GB;加 --vram_O 走 fp16 与注意力切片可再压默认 10,000 步,另有 --backbone vanilla 纯 PyTorch 路线需要现场编译 raymarching / gridencoder 两个 CUDA 扩展(bash scripts/install_ext.sh),CUDA toolkit 与 torch 版本对不上就编不过。
stable-dreamfusion · --IF / --dmtetDeepFloyd IF 引导,DMTet 32/64/128 四面体网格--IF 约 24GBDMTet 精修 5,000 步,从 df.pth 初始化唯一在同一个仓库里把「NeRF 粗模 → DMTet 精修 → --test --save_mesh 导网格」串完的路线,想直接拿 obj 走这条。
threestudio · prolificdreamer(SDS 的继任者)VSD(变分得分蒸馏),SD + LoRA 双模型512×512 约 30GB;64×64 约 15GB;共用同一底模的 LoRA 可压到 10GB 以下三阶段,前 5,000 步只渲 64×64不再是 ω=100 那种过饱和外观,细节和色彩明显更真。代价是显存:这是本页唯一真的需要 48GB 以上单卡的配置。

02 —

按配置选卡,别猜

显存对齐各仓库自己公布的口径,30GB 的任务不往 24GB 卡上塞。

  • threestudio dreamfusion-sd 跑通第一个 prompt,顺手把 batch 提上去

    RTX 3090 24GB$0.193/卡·时

    官方口径 6GB 只是能启动的下限,真正决定几何一致性的是 data.batch_size;24GB 让你直接开到 4~8(论文用 4),而每小时不到两毛钱。

  • stable-dreamfusion -O(约 16GB)加 DMTet 5,000 步精修出网格

    Tesla V100 32GB$0.188/卡·时

    这套仓库的作者自己就是在 V100 上测的,兼容性最有把握;32GB 装下 16GB 训练还留足 DMTet 余量,是全站最便宜的落点。

  • dreamfusion-if 全流程:T5-XXL 抽嵌入约 15GB,训练约 10GB

    RTX 4090 24GB$0.540/卡·时

    抽文本嵌入那一步是显存峰值,24GB 刚好扛得住不用 CPU offload(一 offload 训练会慢到没法用);Ada 的 fp16 吞吐让 10,000 步明显比上一代省时间。

  • ProlificDreamer 512×512 VSD(约 30GB),或并行扫 prompt 库挑种子

    A100 PCIE 80GB$0.824/卡·时

    和 48GB 的 RTX A6000($0.817/卡·时)几乎同价但显存翻倍:30GB 的 512×512 塞进去还能再并一个 trial 换 seed,单节点最多 14 卡,整机显存上限 2,152GB。

03 —

在 NexGPU 上从零跑通

四步,从开机到一个能拖进 Blender 的 obj。

  1. 01

    开一台带 CUDA 的实例

    在 console.nexgpu.net 选 PyTorch 预置镜像(2,000+ 镜像里 PyTorch、vLLM、ComfyUI、Stable Diffusion 都是现成的)。threestudio 的硬性要求是「至少 6GB 显存的 NVIDIA 卡且装好 CUDA」,Python ≥ 3.8、PyTorch ≥ 1.12,官方在 torch1.12.1+cu113 和 torch2.0.0+cu118 上验过。开机后 SSH、Jupyter、网页终端任选。

    ssh root@<node> -p <port>   # 或直接开 Jupyter / 网页终端
  2. 02

    装 threestudio,先把 ninja 装上

    ninja 能把 CUDA 扩展的编译时间压下来,值得先装。tiny-cuda-nn 如果装不上,官方给的解法是把 pip 降到 23.0.1。想走效果更好的 DeepFloyd IF 路线,得先在 Hugging Face 的 IF-I-XL-v1.0 模型页接受协议,再 huggingface-cli login。首轮拉完权重后可以设 HF_HUB_OFFLINE=1 避免每次都去连 Hugging Face。

    git clone https://github.com/threestudio-project/threestudio && cd threestudio && pip install ninja && pip install -r requirements.txt
  3. 03

    跑第一个 prompt

    dreamfusion-sd 默认训练 10,000 步,训练目录里会实时落验证图。random_aug=true 让背景以 0.5 概率换成随机色,防止模型把背景当成物体的一部分。中途 Ctrl+C 按一次会直接跳到测试阶段生成 360° 环绕视频,按第二次才真正退出。想复现论文那 397 条 prompt,把提示词换成 lib:keyword1_keyword2 形式即可。

    python launch.py --config configs/dreamfusion-sd.yaml --train --gpu 0 system.prompt_processor.prompt="a delicious hamburger" data.batch_size=4 system.background.random_aug=true
  4. 04

    导出网格,然后停机

    --export 配 mesh-exporter 出 obj+mtl;模型里飘着一堆 floaters 就调高 isosurface_threshold,想要更细的表面就换 mc-cpu 并把分辨率提到 256。导完把文件拉走、把实例停掉:算力按秒计费、一停就不再产生费用,存储要等你 destroy 才停计费,所以顺手清掉中间 ckpt。

    python launch.py --config outputs/dreamfusion-sd/<trial>/configs/parsed.yaml --export --gpu 0 resume=outputs/dreamfusion-sd/<trial>/ckpts/last.ckpt system.exporter_type=mesh-exporter system.geometry.isosurface_method=mc-cpu system.geometry.isosurface_resolution=256

一个模型到底要花多少钱

用 threestudio 的 dreamfusion-sd 配置、RTX 3090 24GB($0.193/卡·时)跑默认 10,000 步:按论文 15,000 步约 1.5 小时的量级保守估到 1.5 小时,单个物体是 0.193 × 1.5 ≈ $0.29。stable-dreamfusion 的 README 自己说很多 prompt 会失败,所以实操通常是一次扫二十条挑能用的:20 × 0.29 ≈ $5.79,还不到一顿饭钱。要论文级质量就换 dreamfusion-if 上 RTX 4090 24GB($0.540/卡·时),按 2 小时算是 0.540 × 2 = $1.08 一个物体。ProlificDreamer 的 512×512 VSD 约 30GB,得上 A100 PCIE 80GB($0.824/卡·时),跑 3 小时是 0.824 × 3 ≈ $2.47。中间产物(ckpt、360° 视频、obj)按 20GB 存一个月是 20 × $0.414 = $8.28,折合每天约 $0.28;算力按秒计费、实例一停就停算,存储得 destroy 才停——所以导完网格顺手清盘。没有起租时长、没有开通费、不用提配额申请。对照一下:这条 SDS 路线要的是「反复换 seed、反复调 lambda_sparsity」,租卡按小时来,比为一次消融实验买张卡合理得多。

04 —

常见问题

DreamFusion 官方代码开源了吗?为什么找不到权重下载?

没有开源,也不会有。DreamFusion 依赖 Google 的 Imagen 作为二维先验,而 Imagen 权重从未公开,所以官方既没放代码也没放 checkpoint,论文本身也只在项目页放了结果视频。你能装的是两个 Apache-2.0 的社区复现:threestudio 和 ashawkey 的 stable-dreamfusion,它们把 Imagen 换成了 Stable Diffusion 或 DeepFloyd IF。两者在 NexGPU 的 PyTorch 预置镜像上都能直接开跑,不用申请配额。

DreamFusion 本地部署最低要多大显存?6GB 显卡真的能跑吗?

threestudio 官方写明 dreamfusion-sd 训练约 6GB VRAM,安装要求也只写「至少 6GB 显存」,所以理论上能跑。但 6GB 意味着 batch_size 只能是 1,而论文用的是 4,batch 越小几何越容易崩。DeepFloyd IF 路线更实际:约 15GB 抽文本嵌入加约 10GB 训练;stable-dreamfusion 的 -O 模式约 16GB,--IF 约 24GB。真要出结果,24GB 是舒服的起点——NexGPU 的 RTX 3090 24GB 是 $0.193/卡·时,比在 6GB 卡上熬更省时间也更省钱。

生成的物体长了好几张脸(Janus 多面问题)怎么解决?

先换 seed,这是官方排第一的建议,很多时候整体几何对了只是多了张脸。然后开 Perp-Neg:system.prompt_processor.use_perp_neg=true,SD 和 IF 两条引导都支持。再不行上 D-SDS,设 system.guidance.grad_clip=[0,0.5,2.0,10000] 做 score debiasing,配合 use_prompt_debiasing=true 做 prompt 去偏。彻底一点就换 MVDream,它一次生成 4 张 256×256 的同步视角,从源头上就不给模型长第二张脸的机会。换 seed 意味着要重跑很多次,在 NexGPU 上并行开几台按秒计费的实例扫 seed,比串行等一晚上划算。

一次生成为什么要一两个小时?能不能像文生图那样几秒出图?

因为 SDS 不是推理,是训练。DreamFusion 对每一个 prompt 都要从零优化一个 NeRF——论文是 15,000 步、约 1.5 小时(4 芯片 TPUv4),threestudio 默认 10,000 步。想提速,官方给的手段是 token_merging=true(对 Stable Diffusion 引导能大幅加速并省显存,但可能掉质量),注意力切片会慢约 20%,sequential CPU offload 则会「极慢」,能不开就不开。要秒级出资产就别用 SDS,直接上 TRELLIS 或 Hunyuan3D 这类前馈模型。NexGPU 按秒计费,训练类任务不会因为跑了 1 小时 3 分钟就按 2 小时收。

2026 年了,还有必要跑 DreamFusion 吗?还是直接上 TRELLIS、Hunyuan3D?

要拿资产就别绕远路:TRELLIS 是 MIT 许可,text-base 342M / text-large 1.1B / text-xlarge 2B 加 image-large 1.2B,官方要求至少 16GB 显存,一次前向出 Radiance Field、3D Gaussian 和网格三种表示;Hunyuan3D 2.1 形状 3.3B 约 10GB、PBR 贴图 2B 约 21GB,合计约 29GB。DreamFusion 今天的价值在方法本身——SDS 是后面 Magic3D、ProlificDreamer、DreamGaussian 全部工作的地基,做复现、消融、教学或者要改损失函数,你绕不开它。这两类活在 NexGPU 上都开得起来:16GB 需求上 RTX 3090 24GB $0.193/卡·时,29GB 需求上 RTX 5090 32GB $0.723/卡·时。

训练出来的东西怎么变成能拖进 Blender 的 obj?

threestudio 用 --export 加 system.exporter_type=mesh-exporter,默认出 obj+mtl,加 system.exporter.fmt=obj 则出带顶点色的 obj;急着看效果可以 system.exporter.save_uv=false 跳过 UV 展开。飘浮物多就调高 system.geometry.isosurface_threshold,要细节就 isosurface_method=mc-cpu 配 isosurface_resolution=256。stable-dreamfusion 走 --test --save_mesh,或者先跑 --dmtet 精修 5,000 步再导,网格质量会好不少。导出这一步吃 CPU 和内存多过显存,NexGPU 上导完直接 scp 走,实例一停算力就不再计费。

开始使用 NexGPU

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

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