lmms-engine
lmms-engine 是一个专为大规模训练统一多模态模型而设计的轻量级引擎。它致力于解决当前多模态模型训练中框架分散、配置复杂以及难以高效扩展的痛点,为开发者提供了一个简洁、灵活且统一的代码底座。
这款工具非常适合从事大模型算法研究的研究人员、需要快速验证新想法的 AI 工程师,以及希望深入理解多模态训练架构的开发者。无论是进行视觉理解、内容生成,还是构建融合图像、音频与文本的全能模型,lmms-engine 都能提供强有力的支持。
其技术亮点在于极致的效率与现代化设计:原生支持 PyTorch FSDP2 分布式策略,集成了 Muon 优化器、Liger Kernel 加速库以及 NSA(嵌套序列注意力)等前沿技术,显著提升了显存利用率和训练速度(MFU)。此外,它还支持数据打包(Packing)和专家并行(EP),并提供了详细的性能基准参考。配合 uv 包管理器和预构建的 Docker 镜像,lmms-engine 让从环境搭建到启动大规模训练的过程变得异常顺畅,是进行多模态模型“黑客式”创新与规模化实验的理想选择。
使用场景
某 AI 实验室团队正致力于研发一款能同时处理图像、音频和文本的统一多模态大模型,需要在大规模集群上进行高效训练与快速迭代。
没有 lmms-engine 时
- 框架割裂严重:团队需为视觉编码器和语言解码器分别维护不同的训练脚本,代码耦合度低,修改架构如同“拼凑积木”,极易出错。
- 资源利用率低下:缺乏原生的高级并行策略(如 FSDP2、USP)支持,多卡训练时显存碎片化严重,模型浮点运算利用率(MFU)长期徘徊在低位。
- 环境配置繁琐:依赖库版本冲突频发,每次在新节点部署环境需耗时数小时手动调试 PyTorch、CUDA 及各类算子库。
- 实验迭代缓慢:尝试新的优化技术(如 Liger Kernel 或 Muon 优化器)需要重写大量底层逻辑,导致新想法验证周期长达数周。
使用 lmms-engine 后
- 统一训练引擎:通过单一的 YAML 配置文件即可启动 Qwen2.5-Omni 等复杂架构的训练,视觉与语言模块无缝集成,代码结构清晰简洁。
- 极致性能释放:内置 FSDP2、USP 及 Flash Attention 等优化,开箱即用,将集群的 MFU 提升至行业领先水平,大幅缩短训练时间。
- 一键环境部署:借助 uv 包管理器和预构建的 Docker 镜像,团队成员可在几分钟内完成从本地到千卡集群的环境同步,彻底消除依赖地狱。
- 灵活黑客式开发:原生支持 Liger Kernel 和多种并行策略,研究人员仅需调整配置参数即可验证最新优化算法,实验迭代效率提升十倍。
lmms-engine 通过提供一个精简且统一的训练底座,让研发团队从繁琐的工程泥潭中解脱,真正专注于多模态模型本身的创新与突破。
运行环境要求
- Linux
需要 NVIDIA GPU (支持 CUDA),推荐使用多卡进行分布式训练 (FSDP2, EP),具体显存取决于模型大小和配置 (如开启 Liger Kernel 可减少 30% 显存)
未说明

快速开始
公告
- [2025-10] 🎉🎉 效率报告:我们提供了针对多种模型架构和训练配置的全面模型浮点运算利用率(MFU)指标。详细基准测试请参阅MFU参考。
- [2025-10] 🚀🚀 LMMs-Engine v0.1 正式发布!这是一个轻量级、高效的框架,专为大规模训练统一多模态模型而设计。
🚀 快速入门
安装
# 克隆仓库
git clone https://github.com/LMMs-Lab/lmms-engine.git
cd lmms-engine
# 安装可编辑包
uv pip install -e ".[all]"
# 或者作为普通包安装
uv pip install -e .
# 安装稳定版本
uv pip install lmms-engine
# 使用 uv sync 安装依赖
# 对于 Linux 系统(推荐——自动检测平台):
bash uv_sync_linux.sh
# 对于其他系统或遇到问题时:
uv sync
# 如果 uv sync 失败,可以尝试:
uv pip install -r requirements.txt
# 可选:性能优化
uv pip install flash-attn --no-build-isolation
uv pip install liger-kernel
Docker
我们提供了包含 PyTorch、CUDA 及所有必要依赖的预构建环境的Docker 镜像。
docker run --gpus all -it --rm \
-v $(pwd):/workspace \
-w /workspace \
fatbao55/lmms-engine:v1.0 \
bash
启动训练
推荐:torchrun(原生 PyTorch)
torchrun --nproc_per_node=8 --nnodes=1 --node_rank=0 \
--master_addr=127.0.0.1 --master_port=12355 \
-m lmms_engine.launch.cli config_yaml=examples/qwen3_vl/example_config.yaml
替代方案:Accelerate
accelerate launch --use_fsdp \
-m lmms_engine.launch.cli config_yaml=examples/qwen3_vl/example_config.yaml
单 GPU
python -m lmms_engine.launch.cli config_yaml=examples/qwen3_vl/example_config.yaml
🔥 精选示例
| 模型 | 快速入门 | FSDP2 | USP | Muon | Liger | Packing | NSA | EP | 亮点 |
|---|---|---|---|---|---|---|---|---|---|
| BAGEL | run.sh | ✅ | TBD | ✅ | ❌ | ✅ | ✅ | ❌ | 统一视觉理解与生成 |
| Qwen2.5 | run.sh | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 大型语言模型 |
| Qwen2.5-VL | run.sh | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 多模态模型 |
| Qwen2.5-Omni | run.sh | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 统一多模态(图像、音频、文本) |
| Qwen3-VL | run.sh | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | 原始分辨率,长上下文(10K+ tokens) |
| Qwen3-VL MoE | run.sh | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | 视觉-语言 MoE,支持 EP(图像、视频、文本) |
| Qwen3-MoE | run.sh | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | 混合专家模型,专家并行 |
| Qwen3-Omni MoE | 配置 | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | 多模态 MoE,支持 EP(图像、音频、文本) |
| WanVideo | run.sh | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | T2V/I2V/V2V 生成(1.3B/14B) |
| FLA 模型 | run.sh | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | 高效架构,FineWeb-Edu 预训练 |
| dLLM (Qwen3) | run.sh | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 掩码扩散语言模型 |
| RAE-SigLip | run.sh | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 表征自编码器,LPIPS、EMA |
| SiT | run.sh | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | 插值 Transformer,CFG,ImageNet-1K |
优化术语说明:
- FSDP2:完全分片数据并行 v2,用于分布式训练
- USP:尤利西斯序列并行,适用于长上下文
- Muon:基于 Newton-Schulz 正交化的高级优化器
- Liger:Triton 融合核函数(交叉熵、RMSNorm、RoPE、SwiGLU),可减少 30% 的内存占用
- Packing:首次适应式装箱算法,使 MFU 提升至 35-40%,而未使用时仅为 20-25%(例如在 Qwen2.5-VL 微调中)
- NSA:原生稀疏注意力机制,高效处理长上下文
- EP:专家并行技术,用于混合专家模型,在不同 GPU 上划分专家
💡 提示:每个
run.sh文件都包含详细的设置步骤、先决条件和配置选项。
🤖 模型支持
涵盖视觉-语言、扩散及语言模型的 20 多种架构。
多模态模型
- Qwen2.5-VL:SOTA 级别性能的视觉-语言模型
- Qwen3-VL:SOTA 级别性能的视觉-语言模型
- Qwen3-VL MoE:视觉-语言混合专家模型,支持专家并行和序列并行
- Qwen2.5-Omni:统一视觉 + 音频 + 文本模态
- Qwen3-Omni MoE:多模态混合专家模型,支持视觉 + 音频 + 文本以及专家并行
- LLaVA-OneVision:完全开源的视觉-语言模型
- Bagel:用于视觉理解和生成的统一多模态模型
- Aero:轻量级音频-语言模型
扩散与生成模型
- dLLM (Qwen3) - 带掩码预测的扩散语言模型
- WanVideo (1.3B/14B) - 文本/图像到视频生成(T2V/I2V/V2V)
- SiT (XL/2) - 用于类别条件图像生成的可扩展插值Transformer
- RAE-SigLip - 带对抗判别器的表示自编码器
语言模型
- Qwen2/2.5/3系列 - 完全支持Liger内核,具备融合操作
- 线性注意力模型 - 针对Muon优化的循环架构;请先安装FLA。
- 自定义架构 - 可通过
@register_model()装饰器进行扩展
⚡️ 优化措施
从分布式训练到内核融合,实现生产级效率。
核心分布式训练
FSDP2 - 基于PyTorch 2.0+ DTensor的参数、梯度和优化器状态划分。相比原始FSDP,其组合性更强,可灵活配置并行策略。
Ulysses序列并行 - 将序列维度拆分到多个GPU上,以处理超长上下文。这对像Qwen3-VL这样拥有1万+视觉token的视觉-语言模型至关重要。
多维并行 - 组合TP x PP × DP网格,实现集群规模的训练。
内存与计算优化
Flash Attention + 无填充 - 使用
use_rmpad的分块注意力机制,完全消除填充计算。原生稀疏注意力(NSA) - 结合压缩注意力、TopK稀疏注意力和滑动窗口注意力的混合机制。
Liger内核 - Triton融合内核(CrossEntropy、RMSNorm、RoPE、SwiGLU)通过避免中间结果的显式存储,显著降低内存占用。
猴子补丁系统 - 通过
lmms_engine/configs/monkey_patch/在运行时注入内核,实现无需修改代码的模型特定优化。序列打包 - 更快的首次适应装箱算法。
高级优化器
- Muon优化器 - 基于Triton内核的Newton-Schulz正交化,通过DTensor分布式执行。选择性地对二维参数应用,其收敛性能优于AdamW。
数据流水线
- 流式数据集 - 使用
IterableDataset进行万亿token预训练,无需完整加载数据。
配置示例
序列打包 - 全部无填充
dataset_config:
packing: true
packing_strategy: first_fit
packing_length: 32000
trainer_args:
use_rmpad: true # 需要flash-attn
use_liger_kernel: true
Liger内核 - 启用LinkedIn的Triton内核,内存占用减少30%
trainer_args:
use_liger_kernel: true
融合操作:
- CrossEntropy(大幅节省内存)
- RMSNorm、RoPE、SwiGLU
- 自动通过猴子补丁应用
Muon优化器 - LLM领域的最先进优化器
trainer_args:
use_muon: true # 启用muonwithadam优化器
adam_beta1: 0.9 # muonwithadam优化器中的adam部分
adam_beta2: 0.999 # muonwithadam优化器中的adam部分
adam_epsilon: 1.0e-8 # muonwithadam优化器中的adam部分
learning_rate: 0.001
weight_decay: 0.01
# ns_steps: 5 # Newton-Schulz迭代次数(默认)
# 对于用户希望指定的模块
特性:
- 基于Triton内核的Newton-Schulz正交化
- 通过DTensor(FSDP2)分布式执行
- 选择性地对二维参数应用
注意:
若用户希望指定某个模块使用Muon还是Adam优化,可在lmms_engine.train.hf.trainer.create_optimizer中进行设置。默认情况下,以下名称包含的子字符串的模块将不参与Muon优化:["emb", "norm", "lm_head", "bias", "wte", "wpe", "output", "a_proj", "b_proj", "conv1d", "rotary"],以及所有维度不等于2的参数。
FSDP2配置
trainer_args:
fsdp2: true
fsdp_config:
transformer_layer_cls_to_wrap: ["Qwen2VLDecoderLayer"]
reshard_after_forward: false
activation_checkpointing: true
Ulysses序列并行 - 适用于长序列VLM
trainer_args:
sp_ulysses_degree: 2 # 序列并行度
优势:
- 将序列长度拆分到多个GPU上
- 降低长上下文的内存占用
- 可与Flash Attention配合使用
原生稀疏注意力(NSA) - 为BAGEL提供高效的长上下文注意力
model_config:
load_from_pretrained_path: "lmms-lab/BAGEL-7B-MoT-ver.LE"
monkey_patch:
- type: nsa
model_type: bagel
kwargs:
block_size: 64
compress_type: "weightedpool" # weightedpool, linear, avgpool
kernel_size: 32
kernel_stride: 16
topk: 16
init_blocks: 1
local_blocks: 2
window_size: 512
特性:
- 带有键值压缩的注意力机制
- 通过TopK稀疏注意力提升效率
- 滑动窗口注意力用于局部上下文
- 混合机制结合了三种注意力类型
- 需要:
pip install git+https://github.com/XunhaoLai/native-sparse-attention-triton.git
注意: 目前仅支持BAGEL模型。
📖 文档
分步工作流程
处理数据集为OpenAI聊天格式(JSONL/JSON/Arrow/CSV)
hf download kcz358/open-thoughts-debug --local-dir data/open_thoughts_debug --repo-type dataset准备数据集YAML(单个数据源可选)
datasets: - path: data/open_thoughts_debug data_folder: "" data_type: arrow配置训练 - 参见examples/qwen3_vl/example_config.yaml或examples/中的任何模型特定配置。
综合指南
入门:
进阶主题:
🏗️ 代码库架构
组件注册表
工厂模式便于轻松扩展:
# 注册自定义数据集
from lmms_engine.datasets import register_dataset, BaseDataset
@register_dataset("my_custom_dataset")
class MyCustomDataset(BaseDataset):
def __init__(self, config):
super().__init__(config)
# 自定义初始化
def __getitem__(self, idx):
# 自定义数据加载
return item
# 注册自定义处理器
from lmms_engine.datasets.processor import register_processor
@register_processor("my_custom_processor")
class MyCustomProcessor:
def __call__(self, raw_data):
# 自定义处理逻辑
return processed_data
训练流水线
构建者模式用于灵活组合:
from lmms_engine.train import TrainRunner
# 配置定义了整个流水线
runner = TrainRunner(config)
runner.build() # 惰性初始化各个组件
runner.run() # 执行训练
流水线阶段:
- 模型初始化 - 从预训练模型或配置中加载
- 数据集创建 - 包括处理器和数据整理器
- Monkey Patching - 应用内核优化
- 训练器设置 - FSDP2、DeepSpeed 或自定义训练器
- 训练执行 - 包括检查点保存和日志记录
支持的训练器
| 训练器类型 | 使用场景 | 主要特性 |
|---|---|---|
hf_trainer |
通用视觉-语言模型/语言模型训练 | FSDP2、Muon、Liger、Flash Attn |
dllm_trainer |
扩散语言模型 | 掩码语言模型、自定义损失函数、DLLM 数据整理器 |
wan_trainer |
视频生成 | 流匹配、多模态输入 |
rae_trainer |
视觉自编码器 | 对抗损失、EMA、LPIPS |
sit_trainer |
扩散 Transformer | 插值框架、CFG、EMA |
🎯 使用场景
- 视觉-语言预训练 - Qwen-VL、LLaVA 在大规模多模态数据集上的应用
- 视频理解 - AERO 在 3D 视频数据上的应用
- 扩散模型 - DLLM、SiT、WanVideo 用于生成任务
- 表征学习 - RAE 用于视觉表征学习
- 语言模型预训练 - DGN、Qwen 结合 Muon 优化器
- 多模态微调 - 基于序列打包的高效 SFT
🤝 贡献
我们欢迎各位贡献!请参阅我们的设计原则以了解编码规范:
- 简单性:编写简洁明了的代码
- 可读性:优先考虑清晰度而非技巧性
- 可测试性:确保组件易于测试
- 最小改动:仅修改与当前任务相关的代码
- 代码越少,债务越小:尽量减少代码量
😊 致谢
感谢以下项目提供的优秀工作:
📝 引用
如果您在研究中使用 LMMs Engine,请引用以下内容:
@software{lmms_engine2025,
title={LMMs Engine: 一个简单、统一的多模态框架,用于预训练和微调。},
author={LMMs-Lab},
year={2025},
url={https://github.com/LMMs-Lab/lmms-engine}
}
📄 许可证
本项目采用 Apache 2.0 许可证授权,详情请参阅LICENSE文件。
🔗 链接
- GitHub: https://github.com/EvolvingLMMs-Lab/lmms-engine
- LMMs-Lab: https://lmms-lab.com
- 文档: docs/
- 问题追踪: https://github.com/EvolvingLMMs-Lab/lmms-engine/issues
🎉 使用 LMMs-Engine 的优秀项目
LongVT: 通过原生工具调用激励“用长视频思考”
OpenMMReasoner: 以开放且通用的方法推动多模态推理的边界
由 LMMs-Lab 用心打造
⭐ 请在 GitHub 上为该项目点赞,以支持我们的工作! ⭐
版本历史
v0.1.32026/01/16v0.1.22025/10/25v0.1.12025/09/18v0.1.0.post12025/08/21v0.1.02025/08/07常见问题
相似工具推荐
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。
spec-kit
Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。