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-sd | Stable Diffusion 引导 + HashGrid NeRF | 训练约 6GB | 默认 10,000 步,batch_size 默认 1 | 入门首选,6GB 卡就能启动。但 6GB 只是「跑得起来」,论文用的是 batch 4,显存越大几何越稳。 |
| threestudio · dreamfusion-if | DeepFloyd 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 / --dmtet | DeepFloyd IF 引导,DMTet 32/64/128 四面体网格 | --IF 约 24GB | DMTet 精修 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。
- 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 / 网页终端 - 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 - 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 - 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 —
