MCPcopy Index your code
hub / github.com/open-mmlab/mmengine

github.com/open-mmlab/mmengine @v0.10.7

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.10.7 ↗ · + Follow
3,465 symbols 14,366 edges 319 files 1,281 documented · 37% 7 cross-repo links updated 6mo agov0.11.0rc2 · 2025-12-23★ 1,481175 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

 

<b><font size="5">OpenMMLab 官网</font></b>
<sup>
  <a href="https://openmmlab.com">
    <i><font size="4">HOT</font></i>
  </a>
</sup>
&nbsp;&nbsp;&nbsp;&nbsp;
<b><font size="5">OpenMMLab 开放平台</font></b>
<sup>
  <a href="https://platform.openmmlab.com">
    <i><font size="4">TRY IT OUT</font></i>
  </a>
</sup>

 

PyPI - Python Version pytorch PyPI license

简介 | 安装 | 快速上手 | 📘用户文档 | 🤔报告问题

English | 简体中文

最近进展

最新版本 v0.10.5 在 2024.9.11 发布。

版本亮点:

  • 支持在 MLFlowVisBackend 中自定义 artifact_location #1505
  • 支持在 DeepSpeedEngine._zero3_consolidated_16bit_state_dict 使用 exclude_frozen_parameters #1517

如果想了解更多版本更新细节和历史信息,请阅读更新日志

简介

MMEngine 是一个基于 PyTorch 实现的,用于训练深度学习模型的基础库。它作为 OpenMMLab 所有代码库的训练引擎,其在不同研究领域支持了上百个算法。此外,MMEngine 也可以用于非 OpenMMLab 项目中。它的亮点如下:

集成主流的大模型训练框架

支持丰富的训练策略

提供易用的配置系统

覆盖主流的训练监测平台

兼容主流的训练芯片

  • 英伟达 CUDA | 苹果 MPS
  • 华为 Ascend | 寒武纪 MLU | 摩尔线程 MUSA

安装

支持的 PyTorch 版本

MMEngine PyTorch Python
main >=1.6 \<=2.1 >=3.8, \<=3.11
>=0.9.0, \<=0.10.4 >=1.6 \<=2.1 >=3.8, \<=3.11

在安装 MMEngine 之前,请确保 PyTorch 已成功安装在环境中,可以参考 PyTorch 官方安装文档

安装 MMEngine

pip install -U openmim
mim install mmengine

验证是否安装成功

python -c 'from mmengine.utils.dl_utils import collect_env;print(collect_env())'

更多安装方式请阅读安装文档

快速上手

以在 CIFAR-10 数据集上训练一个 ResNet-50 模型为例,我们将使用 80 行以内的代码,利用 MMEngine 构建一个完整的、可配置的训练和验证流程。

构建模型

首先,我们需要构建一个模型,在 MMEngine 中,我们约定这个模型应当继承 BaseModel,并且其 forward 方法除了接受来自数据集的若干参数外,还需要接受额外的参数 mode

  • 对于训练,我们需要 mode 接受字符串 "loss",并返回一个包含 "loss" 字段的字典。
  • 对于验证,我们需要 mode 接受字符串 "predict",并返回同时包含预测信息和真实信息的结果。
import torch.nn.functional as F
import torchvision
from mmengine.model import BaseModel

class MMResNet50(BaseModel):
    def __init__(self):
        super().__init__()
        self.resnet = torchvision.models.resnet50()

    def forward(self, imgs, labels, mode):
        x = self.resnet(imgs)
        if mode == 'loss':
            return {'loss': F.cross_entropy(x, labels)}
        elif mode == 'predict':
            return x, labels

构建数据集

其次,我们需要构建训练和验证所需要的数据集(Dataset)数据加载器(DataLoader)。在该示例中,我们使用 TorchVision 支持的方式构建数据集。

import torchvision.transforms as transforms
from torch.utils.data import DataLoader

norm_cfg = dict(mean=[0.491, 0.482, 0.447], std=[0.202, 0.199, 0.201])
train_dataloader = DataLoader(batch_size=32,
                              shuffle=True,
                              dataset=torchvision.datasets.CIFAR10(
                                  'data/cifar10',
                                  train=True,
                                  download=True,
                                  transform=transforms.Compose([
                                      transforms.RandomCrop(32, padding=4),
                                      transforms.RandomHorizontalFlip(),
                                      transforms.ToTensor(),
                                      transforms.Normalize(**norm_cfg)
                                  ])))
val_dataloader = DataLoader(batch_size=32,
                            shuffle=False,
                            dataset=torchvision.datasets.CIFAR10(
                                'data/cifar10',
                                train=False,
                                download=True,
                                transform=transforms.Compose([
                                    transforms.ToTensor(),
                                    transforms.Normalize(**norm_cfg)
                                ])))

构建评测指标

为了进行验证和测试,我们需要定义模型推理结果的评测指标。我们约定这一评测指标需要继承 BaseMetric,并实现 processcompute_metrics 方法。

from mmengine.evaluator import BaseMetric

class Accuracy(BaseMetric):
    def process(self, data_batch, data_samples):
        score, gt = data_samples
        # 将一个批次的中间结果保存至 `self.results`
        self.results.append({
            'batch_size': len(gt),
            'correct': (score.argmax(dim=1) == gt).sum().cpu(),
        })
    def compute_metrics(self, results):
        total_correct = sum(item['correct'] for item in results)
        total_size = sum(item['batch_size'] for item in results)
        # 返回保存有评测指标结果的字典,其中键为指标名称
        return dict(accuracy=100 * total_correct / total_size)

构建执行器

最后,我们利用构建好的模型数据加载器评测指标构建一个执行器(Runner),并伴随其他的配置信息,如下所示。

from torch.optim import SGD
from mmengine.runner import Runner

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    # 优化器包装,用于模型优化,并提供 AMP、梯度累积等附加功能
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    # 训练配置,例如 epoch 等
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
)

开始训练

runner.train()

了解更多

入门教程

进阶教程

示例

常用功能

架构设计

迁移指南

贡献指南

我们感谢所有的贡献者为改进和提升 MMEngine 所作出的努力。请参考贡献指南来了解参与项目贡献的相关指引。

引用

如果您觉得 MMEngine 对您的研究有所帮助,请考虑引用它:

@article{mmengine2022,
  title   = {{MMEngine}: OpenMMLab Foundational Library for Training Deep Learning Models},
  author  = {MMEngine Contributors},
  howpublished = {\url{https://github.com/open-mmlab/mmengine}},
  year={2022}
}

开源许可证

该项目采用 Apache 2.0 license 开源许可证。

生态项目

OpenMMLab 的其他项目

  • MIM: MIM 是 OpenMMLab 项目、算法、模型的统一入口

Core symbols most depended-on inside this repo

Shape

Method 2,482
Class 482
Function 480
Route 21

Languages

Python100%

Modules by API surface

tests/test_runner/test_runner.py130 symbols
mmengine/visualization/vis_backend.py87 symbols
mmengine/config/config.py79 symbols
mmengine/runner/runner.py70 symbols
tests/test_visualizer/test_vis_backend.py65 symbols
tests/test_fileio/test_fileclient.py62 symbols
mmengine/optim/scheduler/param_scheduler.py60 symbols
mmengine/model/weight_init.py56 symbols
mmengine/runner/_flexible_runner.py54 symbols
tests/test_analysis/test_jit_analysis.py53 symbols
tests/test_analysis/test_flop_count.py52 symbols
tests/test_optim/test_scheduler/test_param_scheduler.py51 symbols

For agents

$ claude mcp add mmengine \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page