DeepFloyd IF 是 Stability AI 与 DeepFloyd 团队做的像素空间级联扩散模型,和 Stable Diffusion 那套「在潜空间里去噪」根本不是一条路:它先用冻结的 T5-v1_1-xxl 把 prompt 编码成 hidden states,再由 stage 1 直接在像素上画出 64×64,接着 stage 2 放大到 256×256,最后交给 Stability 的 stable-diffusion-x4-upscaler 顶到 1024×1024。IF-I-XL-v1.0 的 zero-shot FID-30K 是 6.66,它当年最出名的本事,是能把提示词里的英文单词准确地写进画面里。
自建时真正卡住人的不是那个 4.3B 的 UNet,而是文本编码器。IF-I-XL 的 UNet fp16 权重是 8.61GB,而三级共用的 T5-v1_1-xxl 编码器 fp16 分片加起来 11.5GB——编码器比主干还大,这是 SD 用户第一次上手 IF 时最容易踩空的地方。官方给出的显存数字是:diffusers 默认开 model_cpu_offload,最低 14GB 显存能跑完整条链;stage 1 + stage 2 常驻要 16GB;三级全开到 1024×1024 要 24GB;微调大约 28GB。
还有一件必须先说清楚的事:这个项目已经不再更新了。GitHub 上 deep-floyd/IF 的最后一次提交停在 2024 年 4 月,PyPI 上的 deepfloyd_if 停在 1.0.1(2023 年 4 月发布),依赖里钉死了 torch<2.0.0、transformers~=4.25.1、diffusers~=0.16.0、xformers==0.0.16,在今天的 CUDA 环境里基本装不起来。正确的入口是 Hugging Face diffusers 里的 IFPipeline 系列,它一直跟着 diffusers 主线走。权重许可也始终是 deepfloyd-if-license,仅限非商业研究,当年承诺的「后续开源」并没有兑现。所以今天还跑 IF,通常是为了复现级联像素扩散的论文结果、做 FID 基线对比,或者要那套独特的成像质感——如果你要的是能商用的文字渲染,该看 FLUX.1、Qwen-Image、SD 3.5。
01 —
模型家族与权重体积
三级是三个独立仓库,显存账和磁盘账都得分开算
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| DeepFloyd/IF-I-XL-v1.0 | 4.3B(stage 1) | UNet fp16 8.61GB + T5 fp16 11.5GB;整链 24GB 显存,offload 后 14GB | 输出 64×64 · T5 仅取 77 token | 主力 stage 1,zero-shot FID-30K 6.66。想复现论文里的效果就用它,其余变体都是它的降配版。fp32 权重 17.2GB,务必带 variant='fp16'。 |
| DeepFloyd/IF-I-L-v1.0 | 900M(stage 1) | UNet fp16 1.87GB;T5 仍是 11.5GB 的大头 | 输出 64×64 · T5 仅取 77 token | FID 8.06。UNet 小了四倍多,但因为 T5 编码器不变,省下来的显存远没有想象中多。 |
| DeepFloyd/IF-I-M-v1.0 | 400M(stage 1) | UNet fp16 743MB;瓶颈依旧在 T5 | 输出 64×64 · T5 仅取 77 token | FID 8.86,最小的 stage 1。适合先用它把三级管线、许可授权、缓存路径全部跑通,再换 XL。 |
| DeepFloyd/IF-II-L-v1.0 | 1.2B(stage 2) | UNet fp16 2.49GB | 64×64 → 256×256 超分 | 官方示例默认搭配 IF-I-XL 的 stage 2。加载时一定要传 text_encoder=None——这个仓库自己也带着一份 19GB 的 T5 分片。 |
| DeepFloyd/IF-II-M-v1.0 | 450M(stage 2) | UNet fp16 922MB | 64×64 → 256×256 超分 | 轻量 stage 2,配 IF-I-M / IF-I-L 做低成本验证链路时用。 |
| stabilityai/stable-diffusion-x4-upscaler | ≈950M(stage 3) | UNet fp16 947MB + VAE fp16 111MB | 256×256 → 1024×1024 超分 | 严格说这不是 DeepFloyd 的模型,是 Stability 的潜空间 x4 超分,许可是 openrail++,和前两级的非商业许可不是一回事。它也是把显存需求从 16GB 推到 24GB 的那一级。 |
02 —
按场景选卡
24GB 是三级全流程的硬门槛,而我们最便宜的一张卡刚好是 24GB
三级级联跑满 1024×1024,开 model_cpu_offload
RTX 3090 24GB$0.193/卡·时
官方要求的 24GB 正好卡住,而它是全站最便宜的卡——跑 DeepFloyd IF 这种「显存要够但算力不吃紧」的负载,性价比没有对手。
批量扫 prompt、做 FID 评测,需要更快的 stage 2/3
RTX 4090 24GB$0.540/卡·时
stage 1 只画 64×64、算力几乎不构成瓶颈,真正耗时的是 T5 编码和两级超分;4090 的 fp16 吞吐在 1024×1024 那一级上差距最明显。
关掉 offload,T5 与三级 UNet 全部常驻显存
RTX A6000 48GB$0.817/卡·时
11.5GB 的 T5 加上三级 UNet 一共二十多 GB,48GB 能一次性装下,省掉每步在 CPU 和 GPU 之间来回搬权重的开销,也够 ~28GB 的微调。
微调 IF-I-XL,或一张卡上并行多路 prompt 编码
A100 PCIE 80GB$0.824/卡·时
和 A6000 48GB 几乎同价却给到 80GB,微调时不用为优化器状态和梯度反复砍 batch size。
03 —
从空实例到出图
四步,全程走 diffusers,不去碰那个已经冻在 2023 年的 deepfloyd_if 包
- 01
开一台 24GB 显存的实例并补依赖
在 console.nexgpu.net 选 RTX 3090 24GB,用 PyTorch 预置镜像开机,SSH 进去补 diffusers 侧的依赖。sentencepiece 是 T5 分词器必须的,少了它 from_pretrained 会在加载 tokenizer 时直接报错;bitsandbytes 只有走 8bit T5 那条路才用得上。
pip install -U diffusers transformers accelerate safetensors sentencepiece bitsandbytes - 02
接受许可并登录 Hugging Face
IF 的权重是 gated 的:先去 DeepFloyd/IF-I-XL-v1.0 的模型页点同意,接受 stage 1 会自动覆盖其余 IF 仓库;然后在实例里登录写入 token,否则 from_pretrained 会直接 401,而不是给你一句人话的报错。
huggingface-cli login - 03
只拉 fp16 变体,缓存落到数据盘
不加 variant='fp16' 就会去下 17.2GB 的 fp32 UNet,磁盘和下载时间白翻一倍。把 HF_HOME 指到数据盘,实例重建时权重还在。IF-I-XL 这条三级 fp16 全套大约 25GB:T5 11.5GB + stage 1 UNet 8.61GB + safety checker 1.2GB + stage 2 UNet 2.49GB + x4 upscaler 约 1.1GB。
export HF_HOME=/workspace/hf && python -c "import torch; from diffusers import DiffusionPipeline; DiffusionPipeline.from_pretrained('DeepFloyd/IF-I-XL-v1.0', variant='fp16', torch_dtype=torch.float16)" - 04
把三级串起来跑
stage 2 和 stage 3 都要传 text_encoder=None,否则会再加载一份 T5,24GB 立刻爆。每一级都调 enable_model_cpu_offload()。stage 1 默认 num_inference_steps=100、guidance_scale=7.0,先降到 50 步验证链路通不通再调回去。另外注意默认会盖水印并跑 safety checker:做研究评测时可以在构造 pipeline 时传 watermarker=None、safety_checker=None 关掉。
stage_2 = DiffusionPipeline.from_pretrained('DeepFloyd/IF-II-L-v1.0', text_encoder=None, variant='fp16', torch_dtype=torch.float16); stage_2.enable_model_cpu_offload()
一轮 DeepFloyd IF 实验到底花多少钱
按 RTX 3090 24GB 的 $0.193/卡·时 算。拉 25GB 权重加装环境约 0.5 小时:0.193 × 0.5 ≈ $0.10。接着连续调试和出图 6 小时:0.193 × 6 = $1.16。真正容易被忽略的是存储——25GB 权重按 $0.414/GB·月 的中位价,存满一个月是 25 × 0.414 = $10.35,只存 3 天则是 25 × 0.414 × 0.1 ≈ $1.04。这一轮合计约 0.10 + 1.16 + 1.04 ≈ $2.30,卡钱和存储钱几乎一样多,这在 DeepFloyd IF 上尤其明显,因为一个 T5-XXL 编码器就顶得上别的模型整套权重。导出 200 张 1024×1024 PNG 约 2GB,出网 2 × $0.0081 ≈ $0.02,可以忽略不计。计费按秒走:停机后算力立刻停止计费,存储则要等你销毁卷才停,所以跑完请先决定这 25GB 是留还是删。若想彻底关掉 offload、让 T5 和三级 UNet 全部常驻,换 RTX A6000 48GB,同样 6 小时是 0.817 × 6 = $4.90。没有最低消费,没有开通费,也不用提配额申请。
04 —
