AI 快讯minFLUX发布:把FLUX扒到最小,让你真正看懂扩散模型
模型上新

minFLUX发布:把FLUX扒到最小,让你真正看懂扩散模型

2026-06-20T20:04:01.197Z
minFLUX发布:把FLUX扒到最小,让你真正看懂扩散模型

开发者Saurabh Purohit开源了minFLUX项目,用极简PyTorch代码重写了FLUX.1和FLUX.2的核心架构,每一行都对应diffusers源码,让啃不动官方库的研究者有了一条捷径。

diffusers太重,有人忍不下去了

如果你最近在啃 FLUX 的源码,大概率有过这种经历:在 diffusers 仓库里点开一个 FluxTransformer2DModel,然后被七八层的 MixinConfigPipelineCallbackPEFT 包装绕到怀疑人生——明明只想看一眼 transformer block 里 modulation 是怎么算的,却得先翻完三个文件的继承链。

6月19日,一位叫 Saurabh Purohit 的开发者在 r/MachineLearning 上贴出了自己的解决方案:minFLUX,一个去掉所有抽象、只保留核心架构和数学的 FLUX 精简实现。项目已在 GitHub 开源,定位非常明确——不是给你拿去训生产模型的,是给你拿去的。

这事的逻辑跟当年 Karpathy 写 minGPT 一脉相承。HuggingFace 的库做得很全,工程上无可挑剔,但对想理解模型本身的人来说,封装层就是噪音。minFLUX 干的就是把噪音剥掉,把 FLUX.1 和 FLUX.2 的骨架摊在你面前。

minFLUX 项目架构示意图,对比 diffusers 库的多层抽象与 minFLUX 的扁平结构

它到底装了什么

按作者的 README,minFLUX 提供的东西其实非常克制:

  • FLUX.1 + FLUX.2 的最小可运行实现,包含 VAE 和 transformer 主干
  • 每一行代码都标注了 HuggingFace diffusers 的对应位置——这点是 minFLUX 最值钱的地方,你可以一边读简化版,一边对照官方实现的复杂版
  • 训练循环:VAE encode → flow matching → velocity MSE
  • 推理循环:noise → Euler ODE → VAE decode
  • 共享工具模块:RoPE 位置编码、timestep embedding 等

注意这里完全没有 LoRA 适配器、没有 ControlNet 接口、没有各种 scheduler 的可插拔切换,连 attention 的 backend 选择都砍掉了。这种做法在生产环境是灾难,但在学习场景就是奢侈品——你不用在脑子里维护一堆 if/else 分支。

flow matching:FLUX 系列的训练范式

minFLUX 里最值得读的部分,其实是训练和推理这一对循环。FLUX 不走 DDPM 那一套噪声预测,而是用 flow matching——直接学习一个从噪声到数据的速度场(velocity field),损失函数就是预测速度和真实速度的 MSE。

用通俗的话讲,传统扩散模型像是教模型"猜这张图被加了多少噪声",flow matching 则是教它"在这一时刻,像素应该朝哪个方向流动"。两者数学上有等价关系,但 flow matching 的训练更稳定,推理时也可以直接用 ODE 求解器(比如 Euler 法)一步步把噪声推回图像,不需要复杂的 DDIM 调度。

在 minFLUX 里,这套流程被压缩成几十行代码就能跑通。对于做生成模型研究的人,这种"看一遍就懂"的实现价值非常高——比啃 paper 里的公式直观得多。

FLUX.2 不是简单的放大版

作者在帖子里特别强调了一个发现:FLUX.2 并不是 FLUX.1 的等比例放大。在动手把两个版本都重写一遍之后,他列出了 FLUX.2 的几处真正改动:

  • Transformer block 结构调整
  • Modulation 机制重做
  • FFN 层改了
  • VAE 归一化方式不同
  • Position IDs 的处理逻辑也变了

这跟去年 11 月 Black Forest Labs 发布 FLUX.2 时官方那句"全新架构,从零预训练"是对得上的——只是当时大家从外部很难判断"全新"到底新在哪。minFLUX 的并排实现等于做了一次代码级 diff,把营销话术翻译成了具体的工程改动。

如果你之前基于 FLUX.1 做过 fine-tune 或者 LoRA 训练,那些经验在 FLUX.2 上不一定能直接迁移。光是 modulation 和 position IDs 的变化,就足以让一些训练超参需要重新调。这是 minFLUX 这种项目能提供的、HuggingFace 模型卡上不会写的信息。

为什么这类"minXXX"项目总有人做

回头看一下这条线索:minGPT、nanoGPT、minLLaMA、minSDXL、minDiT,再到现在的 minFLUX——每出一个明星模型,就会有人做一个精简版。原因很简单:官方实现是为了用,精简版是为了懂

这两件事的目标完全不同。官方代码必须考虑分布式训练、混合精度、推理后端兼容、各种社区贡献的功能拼装,最后必然臃肿。而当你想搞清楚"这个模型为什么 work"的时候,所有这些工程细节都是干扰。

对于做 AI 系统研究的人,精简版还有另一个用途:作为修改的起点。你想改 attention?想试新的位置编码?想换个 VAE?在 minFLUX 上做实验的成本,比在完整 diffusers 里小一个数量级。哪怕你最终要把改动 port 回官方库,先在精简版上验证 idea 也省时间。

适合谁、不适合谁

直说吧:

适合的人

  • 想搞懂现代扩散模型架构的研究者和学生
  • 正在写自己的 diffusion 训练框架,想抄一个干净参考的工程师
  • 想给 FLUX 做架构改动(不是 LoRA 那种轻改)的研究人员
  • 教 AI 课程、需要把扩散模型讲透的老师

不适合的人

  • 想直接拿来推理生成图的用户——直接用 diffusers 官方 pipeline 几行就跑通了,没必要绕路
  • 要做生产部署的团队——精简版没有 attention 优化、没有量化、没有调度器选择,性能远不如官方
  • 想做 LoRA 微调的——生态都在 diffusers 那边,minFLUX 没必要重造

这种定位划清之后,minFLUX 的价值就很清楚了:它不是 diffusers 的替代品,是 diffusers 的注释版

一点延伸:开源扩散生态的健康度

顺便说一句,FLUX.2 自去年发布以来,Black Forest Labs 的开源策略其实挺克制——开了 dev 版本权重,给社区留了足够大的空间去做生态。从 ComfyUI 节点到各种 LoRA、再到现在这种精简实现,FLUX 系列已经形成了相对完整的开发者社区。这和 Stable Diffusion 3 早期那种半开半闭、社区怨声载道的局面对比鲜明。

开源不只是甩个权重出来,还要让社区能读、能改、能教。minFLUX 这种项目,本质上是在替官方做"可读性补全"。如果你在 OpenAI Hub 上调用 FLUX 系列的 API 做应用,理解一下底层架构没坏处——至少在调采样步数、CFG scale 这些参数时,你会知道自己在干什么,而不是在玄学调参。

怎么上手

项目地址在 GitHub purohit10saurabh/minFLUX。建议的阅读顺序:

  1. 先看 flow_matching.py(训练目标)
  2. 再看推理循环里的 Euler ODE 求解
  3. 然后进 transformer block,对照作者标注的 diffusers 行号一起读
  4. 最后看 FLUX.1 和 FLUX.2 的 diff,理解架构演进

如果你之前看 diffusers 看到一半放弃了,这次不妨再试一次——只不过这回别从 from diffusers import FluxPipeline 开始,从 minFLUX 的 README 开始。

参考来源

相关推荐

查看全部

联系我们

我们通常在工作时间快速响应

扫码添加微信

专属客服:Hub 助手

微信号: