在 diffusers 库中学习 FLUX 很难,所以我构建了一个更小的开源版本 [P]

Reddit r/MachineLearning 工具

摘要

一个简化的开源 PyTorch 实现,包含可逐行验证的源代码映射,专为教育目的设计。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/20 18:22

purohit10saurabh/minFLUX

来源:https://github.com/purohit10saurabh/minFLUX

minFLUX

(非官方)FLUX扩散Transformer的极简PyTorch实现

许可证 欢迎提交PR

一个简化的教育性PyTorch实现,对应Black Forest Labs(https://bfl.ai)的FLUX.1(https://bfl.ai/models/flux-kontext)和FLUX.2(https://bfl.ai/models/flux-2)扩散Transformer(DiT)。旨在通过可逐行验证的官方代码库映射,帮助理解修正流匹配、联合注意力以及FLUX背后的关键设计选择。

扩散模型架构和训练算法根据官方diffusers仓库(https://github.com/huggingface/diffusers/tree/cbf4d9a3c384ef97d6b0e40c9846dd9e0e41886a)推断得出。VAE架构来自官方BFL仓库(flux(https://github.com/black-forest-labs/flux/tree/802fb4713906133fcbd0d8dc5351620ca4773036)和flux2(https://github.com/black-forest-labs/flux2/tree/50fe5162777813d869182b139e83b10743caef15))。每个.py文件都配有对应的.md文件,其中包含每个函数到固定提交版本中确切源代码行的详细映射。

内部内容

  • FLUX.1 和 FLUX.2 的 DiT 架构——带有联合注意力的双流和单流Transformer块
  • 修正流匹配——使用速度预测和对数正态时间步采样的训练
  • 欧拉ODE推理——可配置时间步调度的采样循环
  • VAE编码器/解码器——基于残差网络和注意力的架构,含潜在空间归一化
  • 可逐行验证的源代码映射——指向官方代码库

扩散方程

训练(修正流匹配):

\begin{aligned} x_t &= (1 - \sigma(t)) \cdot x_0 + \sigma(t) \cdot \epsilon && \text{(加噪输入)} \\ v &= \epsilon - x_0 && \text{(速度目标)} \\ L &= \left\| model(x_t, t) - v \right\|^2 && \text{(MSE损失)} \end{aligned}

推理(欧拉ODE步):

x_{t_{\text{next}}} = x_t + (\sigma(t_{\text{next}}) - \sigma(t)) \cdot model(x_t, t)

FLUX.2 架构概览

FLUX.2 架构概览

详细架构:FLUX.2 模型架构

FLUX.1 与 FLUX.2 的主要差异

组件FLUX.1FLUX.2
文本编码器CLIP + T5Mistral3
temb(调制信号)时间步 + 引导 + 池化CLIP文本仅时间步 + 引导
VAE z_channels1632
VAE 归一化缩放/平移分块(2×2)+ 批量归一化
FFNGELUSwiGLU
单流模块分离的注意力 + MLP融合的QKV+MLP投影
调制每块自适应层归一化3个共享头(图像、文本、单流)
RoPEtheta=10000,轴向=(16,56,56)theta=2000,轴向=(32,32,32,32)
位置ID3D(ch, H, W)4D(T, H, W, L)
偏置bias=Truebias=False
模块数量19个双流 + 38个单流,24个注意力头8个双流 + 48个单流,48个注意力头

仓库结构

flux1/                     FLUX.1
  model.py                   DiT(双流 + 单流)
  training.py                流匹配 + 打包/解包
  kontext_training.py        参考图像条件化
  inference.py               欧拉ODE采样
  vae.py                     VAE(缩放/平移)

flux2/                     FLUX.2
  model.py                   DiT(共享调制,SwiGLU)
  training.py                流匹配 + 4D位置ID
  inference.py               欧拉ODE(经验性μ偏移)
  vae.py                     VAE(分块 + 批量归一化)

utils/                     共享
  model.py                   嵌入、RoPE、注意力、归一化
  training.py                噪声、损失、欧拉步、训练循环
  vae_utils.py               残差网络、注意力、上/下采样块

tests/
  test_utils.py              单元测试

flux1/、flux2/ 和 utils/ 中的每个 .py 文件都配有对应的 .md 文件,其中包含到真实源码仓库的逐行映射。

设置

pip install -r requirements.txt
python -m pytest tests/ -v

参与贡献

非常欢迎贡献,尤其是针对:

  • 源代码真实性:对照diffusers(https://github.com/huggingface/diffusers)、flux(https://github.com/black-forest-labs/flux)和flux2(https://github.com/black-forest-labs/flux2)交叉验证代码,修正实现上的任何差异。
  • 文档:改进附带的 .md 文件,并在 diffusers 变更时更新行映射。
  • 组件:添加缺失的FLUX组件或改进现有组件。

请随时打开 issue(https://github.com/purohit10saurabh/minFLUX/issues)或创建拉取请求(https://github.com/purohit10saurabh/minFLUX/pulls)。

免责声明

由于 minFLUX 是根据官方 diffusers 和 BFL 仓库推断得出,代码中可能存在的错误来源包括:

  • AI辅助:本仓库为“氛围编程”(vibe-coded),借助AI编写,参考了 diffusers 和 BFL 仓库。部分训练细节依据其他工作(如dreambooth)推断。
  • 简化:去除了ControlNet、IP-Adapter、梯度检查点、KV缓存、FSDP/DeepSpeed支持以及注意力处理器分发模式,因此无法与预训练权重兼容。
  • 上游代码变更:源代码真值行号引用了特定提交(diffusers(https://github.com/huggingface/diffusers/tree/cbf4d9a3c384ef97d6b0e40c9846dd9e0e41886a)、flux(https://github.com/black-forest-labs/flux/tree/802fb4713906133fcbd0d8dc5351620ca4773036)、flux2(https://github.com/black-forest-labs/flux2/tree/50fe5162777813d869182b139e83b10743caef15))。这些代码库会频繁更新,因此函数可能移动、重命名或改变签名。

引用

如果您使用了本仓库,请按下述方式引用:

@misc{minflux2026,
  author = {Purohit, Saurabh},
  title  = {minFLUX: Minimal Pytorch Implementation of FLUX Diffusion Transformers},
  year   = {2026},
  publisher = {GitHub},
  url    = {https://github.com/purohit10saurabh/minFLUX}
}

相似文章

prunaai/flux-fast

Replicate Explore

PrunaAI 推出 Flux Fast,这是针对 Black Forest Labs 的 FLUX.1-dev 模型优化的端点,号称通过压缩、缓存和编译实现最快的 Flux 推理。

black-forest-labs/FLUX.1-dev

Hugging Face Models Trending

Black Forest Labs releases FLUX.1-dev, a 12-billion parameter open-weights text-to-image transformer model, available on Hugging Face with API endpoints and local inference support.

FLUX3D: 基于扩散对齐稀疏表示的高保真3D高斯生成

Hugging Face Daily Papers

FLUX3D引入了一个框架,通过利用扩散对齐的结构化潜变量和稀疏结构感知的扩散变压器来增强表示学习和跨模态对齐,实现高保真图像到3D高斯泼溅生成,取得了最先进的结果。

FluxLite:离散扩散模型的推理时提议控制

arXiv cs.LG

FluxLite 提出了一种无需训练、在推理阶段实现的提议控制框架,用于离散扩散模型。该框架通过在 Feynman-Kac 势中引入图散度项来补偿跳跃率扰动,由此得到 HEU 和 D-VCG 两种采样器,在标准 SMC 基线方法的基础上大幅降低了重加权方差与采样误差。

@RisingSayak:Diffusers 的张量并行加载迎来重大升级。在 Flux.2-Dev DiT 上,张量并行度(TP)为 4(A10G):• 30.4s → 1…

X AI KOLs Following

Hugging Face Diffusers 上张量并行(tensor parallel)加载迎来重大优化:在 Flux.2-Dev DiT、TP=4(A10G)配置下,加载时间从 30.4s 降至 12.5s(约 2.4 倍提速),每 rank 峰值 CPU 内存从 64.1 GB 降至 6.8 GB(减少约 89%)。相关分布式推理(Accelerate 与 PyTorch Distributed)用法已更新到官方文档。