ml-mdm
苹果开源的多尺度扩散模型框架,用「俄罗斯套娃」式渐进学习让小数据集也能训练出1024x1024高质量
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
苹果开源的多尺度扩散模型框架,用「俄罗斯套娃」式渐进学习让小数据集也能训练出1024x1024高质量
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你是一位摄影师,手中只有一台入门级相机,却要拍出专业级作品。传统扩散模型就像那位要求极高的摄影师——想生成1024×1024的高清图片?先交够"学费"(海量算力和数据)。而苹果开源的 Matryoshka Diffusion Models(ml-mdm) 带来了一种截然不同的思路:用"俄罗斯套娃"的方式,让模型从低分辨率层层向上学习,大幅降低高分辨率图像合成的门槛。
这个项目来自苹果机器学习研究院(Apple ML Research),代码于2024年8月正式开源,配套论文发表在NeurIPS。它不仅是学术成果,更是一套可直接训练、可用预训练模型生成图像的完整框架——GitHub已积累515颗星、38个Fork,引发了大量开发者和研究者的关注。

图1:Matryoshka Diffusion Models 生成的文生图效果(来源:苹果ML官网)
自2020年DDPM(Denoising Diffusion Probabilistic Models)论文以来,扩散模型已成为图像生成的主流范式,Stable Diffusion、DALL-E、Midjourney背后都是这项技术。然而,高分辨率图像合成始终是一个难题:
问题一:计算成本爆炸。 1024×1024分辨率的单张图像,其像素量是64×64的256倍。若用传统方法从零训练1024模型,需要消耗巨大的GPU内存和训练时长,中小实验室和独立开发者根本无法承担。
问题二:数据效率低下。 高质量图文配对数据(如LAION-5B)规模庞大,但即便如此,训练一个能从零达到SOTA效果的1024模型,仍需要数十亿级别的图文数据,普通人根本没有这样的资源。
苹果的研究者提出的Matryoshka Diffusion(MDM)核心洞察是:与其训练一个从高分辨率开始的模型,不如让它先学会画小图,再逐步学会画大图——就像先学会画火柴人,再学会画油画。
Matryoshka Diffusion Models 的核心创新在于"嵌套表示学习"(Nested Representation Learning)与标准扩散过程的结合。
传统扩散模型在单一分辨率上运行:加噪→去噪→重建。MDM则在多个分辨率上同时进行这一过程。模型接收一个"粗略版"(低分辨率)的加噪图像和一个"精细版"(高分辨率)的加噪图像,然后同时预测两者对应的噪声。去噪时,模型会利用低分辨率分支的"大局观"来引导高分辨率分支的细节生成。
苹果团队在论文中证明,这种设计让模型在 仅使用1200万张图片(CC12M数据集)的情况下,就能生成质量可比的1024×1024图像——这一数据量仅为LAION的1/400,但最终效果却接近使用数十亿数据训练的模型。
MDM的视觉骨干(vision backbone)采用改良版 U-Net架构,这是一种在扩散模型中广泛使用的对称编码器-解码器结构。U-Net的核心特点是"跳跃连接"(skip connections):编码器逐层提取特征的同时,解码器在对应层接收同分辨率的细粒度信息,从而在恢复图像时兼顾全局结构和局部细节。
md-mdm代码库中实现了标准U-Net和嵌套U-Net(Nested U-Net)两种变体,后者专门针对多尺度训练优化。

图2:MDM多尺度训练Pipeline架构示意(来源:苹果ML官网)
训练过程中,MDM使用DDPM标准损失函数,并可选启用VDM(Variational Diffusion Model)加权策略来优化不同时间步的梯度贡献。代码中可通过 use_vdm_loss_weights 配置项开关控制。
文本条件(text conditioning)由 Hugging Face Transformers 库提供的预训练语言模型实现,支持多种Tokenizer(T5、BERT、SentencePiece),赋予模型强大的文本理解能力。
该项目包含两个独立的Python包,结构清晰:
ml-mdm(轻量包):极简设计,仅包含 core.py(配置构建器)和 __about__.py(版本信息)。设计理念是"CPU友好"——基础依赖为空,甚至可以在没有GPU的机器上安装。这是苹果给入门者留的"体验窗口"。
ml-mdm-matryoshka(完整包):真正的训练和推理引擎,包含以下核心模块:
| 模块 | 功能 |
|---|---|
diffusion.py | DDPM扩散管线,U-Net模型封装 |
samplers.py | 去噪采样器(DDPM/DDIM等) |
trainer.py | 分布式训练循环 |
distributed.py | 多GPU/DDP分布式训练支持 |
models/ | U-Net及嵌套U-Net实现 |
language_models/ | 文本编码器(T5/BERT等) |
clis/generate_sample.py | Gradio Web Demo入口 |
configs/ | YAML配置文件(数据集、模型分辨率) |
data/ | Tokenizer词汇表和Prompt文件 |
配置管理使用 simple-parsing 库,实现了CLI参数和YAML配置的自动映射,所有模型、Pipeline通过注册表模式(MODEL_REGISTRY、PIPELINE_REGISTRY)动态关联,扩展性良好。
pip install -e .
支持可选依赖分组:cpu(CPU推理)、gpu(GPU训练)、training(完整训练工具链)、web_demo(Web界面)、dev(测试/Lint)。
export ASSET_PATH=https://docs-assets.developer.apple.com/ml-research/models/mdm
curl $ASSET_PATH/flickr64/vis_model.pth --output vis_model_64x64.pth
curl $ASSET_PATH/flickr256/vis_model.pth --output vis_model_256x256.pth
curl $ASSET_PATH/flickr1024/vis_model.pth --output vis_model_1024x1024.pth
torchrun --standalone --nproc_per_node=1 \
ml_lm/clis/generate_sample.py --port $YOUR_PORT
Web界面基于Gradio构建,支持实时调整分辨率(64/256/1024)、采样步数、CFG Guidance Scale等参数,并可预览模型内部激活图。
项目提供了在CC12M数据集上训练完整流程的教程,包含数据下载、分片、训练配置等。训练推荐使用多卡分布式(torchrun),单卡体验极为有限。
尽管技术创新性强,ml-mdm并非开箱即用的生产工具:
硬件门槛高。 生成1024×1024图像推荐16GB+显存,训练更是需要多卡环境。对于个人开发者而言,门槛远高于消费级显卡(如8GB显存限制)。
非生产级Demo。 Web Demo通过 torchrun 直接启动,没有容器化封装,无法一键部署,也不适合作为长期服务运行。
缺乏API服务化。 缺少FastAPI/Stable Diffusion API等标准化推理服务接口,想要集成到现有应用需要自行二次开发。
文档面向研究者。 虽有一定的教程和配置注释,但缺乏从零到生产环境的端到端指南,新手容易在分布式训练配置上卡壳。
Matryoshka Diffusion Models 的意义不仅在于技术本身,更在于它代表的**"小数据也能出好效果"的思路转变**。苹果用1200万张图片做到接近大数据的效果,证明了多尺度学习+高效表示的力量。这一理念与后续的渐进式生成(如SDXL Turbo)、级联扩散(如Cascaded Diffusion Models)等方向高度一致,推动了整个领域向"用更少资源做更多事"的方向发展。
从开源生态角度看,苹果此举填补了"大厂正式开源高质量扩散训练框架"的空白。此前PyTorch生态中,训练自定义扩散模型主要依赖社区实现或Hugging Face的Diffusers库,苹果的代码在架构规范性和工程质量上均属上乘,对研究社区有直接参考价值。
一句话总结: 苹果开源的Matryoshka Diffusion Models是一套学术级PyTorch扩散模型训练框架,核心创新是多尺度嵌套学习,代码质量高但部署门槛也高,适合有ML背景的研究者和开发者深入研究和复现论文成果。