mirror of
https://github.com/open-mmlab/mmengine.git
synced 2025-06-03 21:54:44 +08:00
[Docs] Update README (#835)
* Update link * update zh version of readme * fix typo * Update README_zh-CN.md * Update README_zh-CN.md * Update README_zh-CN.md * fix minor typo * Update README_zh-CN.md * Update README_zh-CN.md * update docs * Update infer.md * Update README.md * minor refinement --------- Co-authored-by: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com>
This commit is contained in:
parent
4dad16fde2
commit
2cb71d93b3
22
README.md
22
README.md
@ -1,5 +1,5 @@
|
||||
<div align="center">
|
||||
<img src="https://user-images.githubusercontent.com/58739961/187154444-fce76639-ac8d-429b-9354-c6fac64b7ef8.jpg" height="100"/>
|
||||
<img src="https://user-images.githubusercontent.com/58739961/187154444-fce76639-ac8d-429b-9354-c6fac64b7ef8.jpg" width="600"/>
|
||||
<div> </div>
|
||||
<div align="center">
|
||||
<b><font size="5">OpenMMLab website</font></b>
|
||||
@ -24,6 +24,8 @@
|
||||
[](https://github.com/open-mmlab/mmengine/issues)
|
||||
[](https://github.com/open-mmlab/mmengine/issues)
|
||||
|
||||
[📘Documentation](https://mmengine.readthedocs.io/en/latest/) |
|
||||
[🛠️Installation](https://mmengine.readthedocs.io/en/latest/get_started/installation.html) |
|
||||
[🤔Reporting Issues](https://github.com/open-mmlab/mmengine/issues/new/choose)
|
||||
|
||||
</div>
|
||||
@ -42,8 +44,8 @@ Major features:
|
||||
|
||||
1. **A universal and powerful runner**:
|
||||
|
||||
- Supports training different tasks with a small amount of code, e.g., ImageNet can be trained with only 80 lines of code (400 lines of the original PyTorch example)
|
||||
- Easily compatible with models from popular algorithm libraries such as TIMM, TorchVision, and Detectron2
|
||||
- Supports training different tasks with a small amount of code, e.g., ImageNet can be trained with only 80 lines of code (400 lines of the original PyTorch example).
|
||||
- Easily compatible with models from popular algorithm libraries such as TIMM, TorchVision, and Detectron2.
|
||||
|
||||
2. **Open architecture with unified interfaces**:
|
||||
|
||||
@ -94,7 +96,7 @@ Taking the training of a ResNet-50 model on the CIFAR-10 dataset as an example,
|
||||
|
||||
First, we need to define a **model** which 1) inherits from `BaseModel` and 2) accepts an additional argument `mode` in the `forward` method, in addition to those arguments related to the dataset.
|
||||
|
||||
- During training, the value of `mode` is "loss," and the `forward` method should return a `dict` containing the key "loss".
|
||||
- During training, the value of `mode` is "loss", and the `forward` method should return a `dict` containing the key "loss".
|
||||
- During validation, the value of `mode` is "predict", and the forward method should return results containing both predictions and labels.
|
||||
|
||||
```python
|
||||
@ -193,7 +195,7 @@ runner = Runner(
|
||||
model=MMResNet50(),
|
||||
work_dir='./work_dir',
|
||||
train_dataloader=train_dataloader,
|
||||
# a wapper to execute back propagation and gradient update, etc.
|
||||
# a wrapper to execute back propagation and gradient update, etc.
|
||||
optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
|
||||
# set some training configs like epochs
|
||||
train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
|
||||
@ -232,10 +234,10 @@ runner.train()
|
||||
<details>
|
||||
<summary>Advanced tutorials</summary>
|
||||
|
||||
- [Registry](https://mmengine.readthedocs.io/en/latest/tutorials/registry.html)
|
||||
- [Config](https://mmengine.readthedocs.io/en/latest/tutorials/config.html)
|
||||
- [Registry](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/registry.html)
|
||||
- [Config](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/config.html)
|
||||
- [BaseDataset](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/basedataset.html)
|
||||
- [Data Transform](https://mmengine.readthedocs.io/en/latest/tutorials/data_transform.html)
|
||||
- [Data Transform](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_transform.html)
|
||||
- [Weight Initialization](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/initialize.html)
|
||||
- [Visualization](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/visualization.html)
|
||||
- [Abstract Data Element](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/data_element.html)
|
||||
@ -244,11 +246,12 @@ runner.train()
|
||||
- [File IO](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/fileio.html)
|
||||
- [Global manager (ManagerMixin)](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/manager_mixin.html)
|
||||
- [Use modules from other libraries](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/cross_library.html)
|
||||
- [Test Time Agumentation](https://mmengine.readthedocs.io/en/latest/advanced_tutorials/test_time_augmentation.html)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Examples</summary>
|
||||
<summary>Common Usage</summary>
|
||||
|
||||
- [Resume Training](https://mmengine.readthedocs.io/en/latest/examples/resume_training.html)
|
||||
- [Speed up Training](https://mmengine.readthedocs.io/en/latest/examples/speed_up_training.html)
|
||||
@ -265,6 +268,7 @@ runner.train()
|
||||
- [Evaluation](https://mmengine.readthedocs.io/en/latest/design/evaluation.html)
|
||||
- [Visualization](https://mmengine.readthedocs.io/en/latest/design/visualization.html)
|
||||
- [Logging](https://mmengine.readthedocs.io/en/latest/design/logging.html)
|
||||
- [Infer](https://mmengine.readthedocs.io/en/latest/design/infer.html)
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -38,25 +38,25 @@
|
||||
|
||||
## 简介
|
||||
|
||||
MMEngine 是一个基于 PyTorch 用于深度学习模型训练的基础库,支持在 Linux、Windows、macOS 上运行。它具有如下三个亮点:
|
||||
MMEngine 是一个基于 PyTorch 实现的,用于训练深度学习模型的基础库。它为开发人员提供了坚实的工程基础,以此避免在工作流上编写冗余代码。作为 OpenMMLab 所有代码库的训练引擎,其在不同研究领域支持了上百个算法。此外,MMEngine 也可以用于非 OpenMMLab 项目中。
|
||||
|
||||
1. 通用:MMEngine 实现了一个高级的通用训练器,它能够:
|
||||
主要特性:
|
||||
|
||||
- 支持用少量代码训练不同的任务,例如仅使用 80 行代码就可以训练 imagenet(原始pytorch example 400 行)
|
||||
- 轻松兼容流行的算法库 (如 TIMM、TorchVision 和 Detectron2 ) 中的模型
|
||||
1. **通用且强大的执行器**:
|
||||
|
||||
2. 统一:MMEngine 设计了一个接口统一的开放架构,使得:
|
||||
- 支持用少量代码训练不同的任务,例如仅使用 80 行代码就可以训练 ImageNet(原始 PyTorch 示例需要 400 行)。
|
||||
- 轻松兼容流行的算法库(如 TIMM、TorchVision 和 Detectron2)中的模型。
|
||||
|
||||
- 用户可以仅依赖一份代码实现所有任务的轻量化,例如 MMRazor 1.x 相比 MMRazor 0.x 优化了 40% 的代码量
|
||||
2. **接口统一的开放架构**:
|
||||
|
||||
- 使用统一的接口处理不同的算法任务,例如,实现一个方法并应用于所有的兼容性模型。
|
||||
- 上下游的对接更加统一便捷,在为上层算法库提供统一抽象的同时,支持多种后端设备。目前 MMEngine 支持 Nvidia CUDA、Mac MPS、AMD、MLU 等设备进行模型训练。
|
||||
|
||||
3. 灵活:MMEngine 实现了“乐高”式的训练流程,支持了:
|
||||
3. **可定制的训练流程**:
|
||||
|
||||
- 根据迭代数、 loss 和评测结果等动态调整的训练流程、优化策略和数据增强策略,例如早停(early stopping)机制等
|
||||
- 任意形式的模型权重平均,如 Exponential Momentum Average (EMA) 和 Stochastic Weight Averaging (SWA)
|
||||
- 训练过程中针对任意数据和任意节点的灵活可视化和日志控制
|
||||
- 对神经网络模型中各个层的优化配置进行细粒度调整
|
||||
- 混合精度训练的灵活控制
|
||||
- 定义了“乐高”式的训练流程。
|
||||
- 提供了丰富的组件和策略。
|
||||
- 使用不同等级的 API 控制训练过程。
|
||||
|
||||
## 最近进展
|
||||
|
||||
@ -72,7 +72,7 @@ MMEngine 是一个基于 PyTorch 用于深度学习模型训练的基础库,
|
||||
|
||||
## 安装
|
||||
|
||||
在安装 MMengine 之前,请确保 PyTorch 已成功安装在环境中,可以参考 [PyTorch 官方安装文档](https://pytorch.org/get-started/locally/)。
|
||||
在安装 MMEngine 之前,请确保 PyTorch 已成功安装在环境中,可以参考 [PyTorch 官方安装文档](https://pytorch.org/get-started/locally/)。
|
||||
|
||||
安装 MMEngine
|
||||
|
||||
@ -87,7 +87,7 @@ mim install mmengine
|
||||
python -c 'from mmengine.utils.dl_utils import collect_env;print(collect_env())'
|
||||
```
|
||||
|
||||
更多安装方式请阅读[安装文档](https://mmengine.readthedocs.io/zh_CN/latest/get_started/installation.html)
|
||||
更多安装方式请阅读[安装文档](https://mmengine.readthedocs.io/zh_CN/latest/get_started/installation.html)。
|
||||
|
||||
## 快速上手
|
||||
|
||||
@ -96,7 +96,10 @@ python -c 'from mmengine.utils.dl_utils import collect_env;print(collect_env())'
|
||||
<details>
|
||||
<summary>构建模型</summary>
|
||||
|
||||
首先,我们需要构建一个**模型**,在 MMEngine 中,我们约定这个模型应当继承 `BaseModel`,并且其 `forward` 方法除了接受来自数据集的若干参数外,还需要接受额外的参数 `mode`:对于训练,我们需要 `mode` 接受字符串 "loss",并返回一个包含 "loss" 字段的字典;对于验证,我们需要 `mode` 接受字符串 "predict",并返回同时包含预测信息和真实信息的结果。
|
||||
首先,我们需要构建一个**模型**,在 MMEngine 中,我们约定这个模型应当继承 `BaseModel`,并且其 `forward` 方法除了接受来自数据集的若干参数外,还需要接受额外的参数 `mode`。
|
||||
|
||||
- 对于训练,我们需要 `mode` 接受字符串 "loss",并返回一个包含 "loss" 字段的字典。
|
||||
- 对于验证,我们需要 `mode` 接受字符串 "predict",并返回同时包含预测信息和真实信息的结果。
|
||||
|
||||
```python
|
||||
import torch.nn.functional as F
|
||||
@ -121,8 +124,7 @@ class MMResNet50(BaseModel):
|
||||
<details>
|
||||
<summary>构建数据集</summary>
|
||||
|
||||
其次,我们需要构建训练和验证所需要的**数据集 (Dataset)**和**数据加载器 (DataLoader)**。
|
||||
对于基础的训练和验证功能,我们可以直接使用符合 PyTorch 标准的数据加载器和数据集。
|
||||
其次,我们需要构建训练和验证所需要的**数据集(Dataset)**和**数据加载器(DataLoader)**。在该示例中,我们使用 TorchVision 支持的方式构建数据集。
|
||||
|
||||
```python
|
||||
import torchvision.transforms as transforms
|
||||
@ -183,29 +185,22 @@ class Accuracy(BaseMetric):
|
||||
<details>
|
||||
<summary>构建执行器</summary>
|
||||
|
||||
最后,我们利用构建好的**模型**,**数据加载器**,**评测指标**构建一个**执行器 (Runner)**,同时在其中配置
|
||||
**优化器**、**工作路径**、**训练与验证配置**等选项
|
||||
最后,我们利用构建好的`模型`,`数据加载器`,`评测指标`构建一个**执行器(Runner)**,并伴随其他的配置信息,如下所示。
|
||||
|
||||
```python
|
||||
from torch.optim import SGD
|
||||
from mmengine.runner import Runner
|
||||
|
||||
runner = Runner(
|
||||
# 用以训练和验证的模型,需要满足特定的接口需求
|
||||
model=MMResNet50(),
|
||||
# 工作路径,用以保存训练日志、权重文件信息
|
||||
work_dir='./work_dir',
|
||||
# 训练数据加载器,需要满足 PyTorch 数据加载器协议
|
||||
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),
|
||||
# 验证数据加载器,需要满足 PyTorch 数据加载器协议
|
||||
val_dataloader=val_dataloader,
|
||||
# 验证配置,用于指定验证所需要的额外参数
|
||||
val_cfg=dict(),
|
||||
# 用于验证的评测器,这里使用默认评测器,并评测指标
|
||||
val_evaluator=dict(type=Accuracy),
|
||||
)
|
||||
```
|
||||
@ -226,16 +221,12 @@ runner.train()
|
||||
<details>
|
||||
<summary>入门教程</summary>
|
||||
|
||||
- [注册器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/registry.html)
|
||||
- [配置](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/config.html)
|
||||
- [执行器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/runner.html)
|
||||
- [钩子](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/hook.html)
|
||||
- [数据集与数据加载器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/dataset.html)
|
||||
- [模型](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/model.html)
|
||||
- [评测指标和评测器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/evaluation.html)
|
||||
- [优化器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optim_wrapper.html)
|
||||
- [模型精度评测](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/evaluation.html)
|
||||
- [优化器封装](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/optim_wrapper.html)
|
||||
- [优化器参数调整策略](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/param_scheduler.html)
|
||||
- [数据变换](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/data_transform.html)
|
||||
- [钩子](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/hook.html)
|
||||
|
||||
</details>
|
||||
@ -243,47 +234,53 @@ runner.train()
|
||||
<details>
|
||||
<summary>进阶教程</summary>
|
||||
|
||||
- [注册器](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/registry.html)
|
||||
- [配置](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/config.html)
|
||||
- [注册器](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/registry.html)
|
||||
- [配置](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/config.html)
|
||||
- [数据集基类](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/basedataset.html)
|
||||
- [抽象数据接口](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)
|
||||
- [数据变换](https://mmengine.readthedocs.io/zh_CN/latest/tutorials/data_transform.html)
|
||||
- [数据变换](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_transform.html)
|
||||
- [权重初始化](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/initialize.html)
|
||||
- [可视化](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/visualization.html)
|
||||
- [抽象数据接口](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/data_element.html)
|
||||
- [分布式通信原语](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/distributed.html)
|
||||
- [记录日志](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/logging.html)
|
||||
- [文件读写](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/fileio.html)
|
||||
- [辅助类](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/utils.html)
|
||||
- [全局管理器](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/manager_mixin.html)
|
||||
- [全局管理器 (ManagerMixin)](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/manager_mixin.html)
|
||||
- [跨库调用模块](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/cross_library.html)
|
||||
- [测试时增强](https://mmengine.readthedocs.io/zh_CN/latest/advanced_tutorials/test_time_augmentation.html)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>示例</summary>
|
||||
<summary>常用功能</summary>
|
||||
|
||||
- [恢复训练](https://mmengine.readthedocs.io/zh_CN/latest/examples/resume_training.html)
|
||||
- [加速训练](https://mmengine.readthedocs.io/zh_CN/latest/examples/speed_up_training.html)
|
||||
- [节省显存](https://mmengine.readthedocs.io/zh_CN/latest/examples/save_gpu_memory.html)
|
||||
- [跨库调用模块](https://mmengine.readthedocs.io/zh_CN/latest/examples/cross_library.html)
|
||||
- [训练生成对抗网络](https://mmengine.readthedocs.io/zh_CN/latest/examples/train_a_gan.html)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>架构设计</summary>
|
||||
- [钩子的设计](https://mmengine.readthedocs.io/zh_CN/latest/design/hook.html)
|
||||
- [执行器的设计](https://mmengine.readthedocs.io/zh_CN/latest/design/runner.html)
|
||||
- [模型精度评测的设计](https://mmengine.readthedocs.io/zh_CN/latest/design/evaluation.html)
|
||||
- [可视化的设计](https://mmengine.readthedocs.io/zh_CN/latest/design/visualization.html)
|
||||
- [日志系统的设计](https://mmengine.readthedocs.io/zh_CN/latest/design/logging.html)
|
||||
|
||||
- [钩子](https://mmengine.readthedocs.io/zh_CN/latest/design/hook.html)
|
||||
- [执行器](https://mmengine.readthedocs.io/zh_CN/latest/design/runner.html)
|
||||
- [模型精度评测](https://mmengine.readthedocs.io/zh_CN/latest/design/evaluation.html)
|
||||
- [可视化](https://mmengine.readthedocs.io/zh_CN/latest/design/visualization.html)
|
||||
- [日志系统](https://mmengine.readthedocs.io/zh_CN/latest/design/logging.html)
|
||||
- [推理接口](https://mmengine.readthedocs.io/zh_CN/latest/design/infer.html)
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>迁移指南</summary>
|
||||
|
||||
- [迁移 MMCV 执行器到 MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/migration/runner.html)
|
||||
- [迁移 MMCV 钩子到 MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/migration/hook.html)
|
||||
- [迁移 MMCV 模型到 MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/migration/model.html)
|
||||
- [迁移 MMCV 参数调度器到 MMEngine](https://mmengine.readthedocs.io/zh_CN/latest/migration/param_scheduler.html)
|
||||
- [数据变换类的迁移](https://mmengine.readthedocs.io/zh_CN/latest/migration/transform.html)
|
||||
|
||||
</details>
|
||||
|
||||
## 贡献指南
|
||||
|
3
docs/en/design/infer.md
Normal file
3
docs/en/design/infer.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Infer
|
||||
|
||||
Coming soon. Please refer to [chinese documentation](https://mmengine.readthedocs.io/zh_CN/latest/design/infer.html).
|
@ -58,6 +58,7 @@ You can switch between Chinese and English documents in the lower-left corner of
|
||||
design/evaluation.md
|
||||
design/visualization.md
|
||||
design/logging.md
|
||||
design/infer.md
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
@ -1,24 +1,22 @@
|
||||
## 介绍
|
||||
|
||||
MMEngine 是一个用于深度学习模型训练的基础库,基于 PyTorch,支持在 Linux、Windows、macOS 上运行。它具有如下三个亮点:
|
||||
MMEngine 是一个基于 PyTorch 实现的,用于训练深度学习模型的基础库,支持在 Linux、Windows、macOS 上运行。它具有如下三个特性:
|
||||
|
||||
1. 通用:MMEngine 实现了一个高级的通用训练器,它能够:
|
||||
1. **通用且强大的执行器**:
|
||||
|
||||
- 支持用少量代码训练不同的任务,例如仅使用 80 行代码就可以训练 imagenet(pytorch example 400 行)
|
||||
- 轻松兼容流行的算法库如 TIMM、TorchVision 和 Detectron2 中的模型
|
||||
- 支持用少量代码训练不同的任务,例如仅使用 80 行代码就可以训练 ImageNet(原始 PyTorch 示例需要 400 行)。
|
||||
- 轻松兼容流行的算法库(如 TIMM、TorchVision 和 Detectron2)中的模型。
|
||||
|
||||
2. 统一:MMEngine 设计了一个接口统一的开放架构,使得
|
||||
2. **接口统一的开放架构**:
|
||||
|
||||
- 用户可以仅依赖一份代码实现所有任务的轻量化,例如 MMRazor 1.x 相比 MMRazor 0.x 优化了 40% 的代码量
|
||||
- 使用统一的接口处理不同的算法任务,例如,实现一个方法并应用于所有的兼容性模型。
|
||||
- 上下游的对接更加统一便捷,在为上层算法库提供统一抽象的同时,支持多种后端设备。目前 MMEngine 支持 Nvidia CUDA、Mac MPS、AMD、MLU 等设备进行模型训练。
|
||||
|
||||
3. 灵活:MMEngine 实现了“乐高”式的训练流程,支持了
|
||||
3. **可定制的训练流程**:
|
||||
|
||||
- 根据迭代数、 loss 和评测结果等动态调整的训练流程、优化策略和数据增强策略,例如早停(early stopping)机制等
|
||||
- 任意形式的模型权重平均,如 Exponential Momentum Average (EMA) 和 Stochastic Weight Averaging (SWA)
|
||||
- 训练过程中针对任意数据和任意节点的灵活可视化和日志控制
|
||||
- 对神经网络模型中各个层的优化配置进行细粒度调整
|
||||
- 混合精度训练的灵活控制
|
||||
- 定义了“乐高”式的训练流程。
|
||||
- 提供了丰富的组件和策略。
|
||||
- 使用不同等级的 API 控制训练过程。
|
||||
|
||||
### 架构
|
||||
|
||||
@ -34,18 +32,18 @@ MMEngine 将训练过程中涉及的组件和它们的关系进行了抽象,
|
||||
|
||||
#### 核心模块与相关组件
|
||||
|
||||
训练引擎的核心模块是[执行器(Runner)](../tutorials/runner.md)。 执行器负责执行训练、测试和推理任务并管理这些过程中所需要的各个组件。在训练、测试、推理任务执行过程中的特定位置,执行器设置了[钩子(Hook)](../tutorials/hook.md) 来允许用户拓展、插入和执行自定义逻辑。执行器主要调用如下组件来完成训练和推理过程中的循环:
|
||||
训练引擎的核心模块是[执行器(Runner)](../tutorials/runner.md)。执行器负责执行训练、测试和推理任务并管理这些过程中所需要的各个组件。在训练、测试、推理任务执行过程中的特定位置,执行器设置了[钩子(Hook)](../tutorials/hook.md)来允许用户拓展、插入和执行自定义逻辑。执行器主要调用如下组件来完成训练和推理过程中的循环:
|
||||
|
||||
- [数据集(Dataset)](../tutorials/basedataset.md):负责在训练、测试、推理任务中构建数据集,并将数据送给模型。实际使用过程中会被数据加载器(DataLoader)封装一层,数据加载器会启动多个子进程来加载数据。
|
||||
- [模型(Model)](../tutorials/model.md):在训练过程中接受数据并输出 loss;在测试、推理任务中接受数据,并进行预测。分布式训练等情况下会被模型的封装器(Model Wrapper,如`MMDistributedDataParallel`)封装一层。
|
||||
- [数据集(Dataset)](../tutorials/dataset.md):负责在训练、测试、推理任务中构建数据集,并将数据送给模型。实际使用过程中会被数据加载器(DataLoader)封装一层,数据加载器会启动多个子进程来加载数据。
|
||||
- [模型(Model)](../tutorials/model.md):在训练过程中接受数据并输出 loss;在测试、推理任务中接受数据,并进行预测。分布式训练等情况下会被模型的封装器(Model Wrapper,如 `MMDistributedDataParallel`)封装一层。
|
||||
- [优化器封装(Optimizer)](../tutorials/optim_wrapper.md):优化器封装负责在训练过程中执行反向传播优化模型,并且以统一的接口支持了混合精度训练和梯度累加。
|
||||
- [参数调度器(Parameter Scheduler)](../tutorials/param_scheduler.md):训练过程中,对学习率、动量等优化器超参数进行动态调整。
|
||||
|
||||
在训练间隙或者测试阶段,[评测指标与评测器(Metrics & Evaluator)](../tutorials/metric_and_evaluator.md)会负责对模型性能进行评测。其中评测器负责基于数据集对模型的预测进行评估。评测器内还有一层抽象是评测指标,负责计算具体的一个或多个评测指标(如召回率、正确率等)。
|
||||
在训练间隙或者测试阶段,[评测指标与评测器(Metrics & Evaluator)](../tutorials/evaluation.md)会负责对模型性能进行评测。其中评测器负责基于数据集对模型的预测进行评估。评测器内还有一层抽象是评测指标,负责计算具体的一个或多个评测指标(如召回率、正确率等)。
|
||||
|
||||
为了统一接口,OpenMMLab 2.0 中各个算法库的评测器,模型和数据之间交流的接口都使用了[数据元素(Data Element)](../tutorials/data_element.md)来进行封装。
|
||||
为了统一接口,OpenMMLab 2.0 中各个算法库的评测器,模型和数据之间交流的接口都使用了[数据元素(Data Element)](../advanced_tutorials/data_element.md)来进行封装。
|
||||
|
||||
在训练、推理执行过程中,上述各个组件都可以调用日志管理模块和可视化器进行结构化和非结构化日志的存储与展示。[日志管理(Logging Modules)](../tutorials/logging.md):负责管理执行器运行过程中产生的各种日志信息。其中消息枢纽 (MessageHub)负责实现组件与组件、执行器与执行器之间的数据共享,日志处理器(Log Processor)负责对日志信息进行处理,处理后的日志会分别发送给执行器的日志器(Logger)和可视化器(Visualizer)进行日志的管理与展示。[可视化器(Visualizer)](../tutorials/visualization.md):可视化器负责对模型的特征图、预测结果和训练过程中产生的结构化日志进行可视化,支持 Tensorboard 和 WanDB 等多种可视化后端。
|
||||
在训练、推理执行过程中,上述各个组件都可以调用日志管理模块和可视化器进行结构化和非结构化日志的存储与展示。[日志管理(Logging Modules)](../advanced_tutorials/logging.md):负责管理执行器运行过程中产生的各种日志信息。其中消息枢纽(MessageHub)负责实现组件与组件、执行器与执行器之间的数据共享,日志处理器(Log Processor)负责对日志信息进行处理,处理后的日志会分别发送给执行器的日志器(Logger)和可视化器(Visualizer)进行日志的管理与展示。[可视化器(Visualizer)](../advanced_tutorials/visualization.md):可视化器负责对模型的特征图、预测结果和训练过程中产生的结构化日志进行可视化,支持 Tensorboard 和 WanDB 等多种可视化后端。
|
||||
|
||||
#### 公共基础模块
|
||||
|
||||
@ -53,8 +51,8 @@ MMEngine 中还实现了各种算法模型执行过程中需要用到的公共
|
||||
|
||||
- [配置类(Config)](../advanced_tutorials/config.md):在 OpenMMLab 算法库中,用户可以通过编写 config 来配置训练、测试过程以及相关的组件。
|
||||
- [注册器(Registry)](../advanced_tutorials/registry.md):负责管理算法库中具有相同功能的模块。MMEngine 根据对算法库模块的抽象,定义了一套根注册器,算法库中的注册器可以继承自这套根注册器,实现模块的跨算法库调用。
|
||||
- [文件读写(File I/O)](../tutorials/fileio.md):为各个模块的文件读写提供了统一的接口,以统一的形式支持了多种文件读写后端和多种文件格式,并具备扩展性。
|
||||
- [分布式通信原语(Distributed Communication Primitives)](../tutorials/distributed.md):负责在程序分布式运行过程中不同进程间的通信。这套接口屏蔽了分布式和非分布式环境的区别,同时也自动处理了数据的设备和通信后端。
|
||||
- [其他工具(Utils)](../tutorials/utils.md):还有一些工具性的模块,如 ManagerMixin,它实现了一种全局变量的创建和获取方式,执行器内很多全局可见对象的基类就是 ManagerMixin。
|
||||
- [文件读写(File I/O)](../advanced_tutorials/fileio.md):为各个模块的文件读写提供了统一的接口,以统一的形式支持了多种文件读写后端和多种文件格式,并具备扩展性。
|
||||
- [分布式通信原语(Distributed Communication Primitives)](../advanced_tutorials/distributed.md):负责在程序分布式运行过程中不同进程间的通信。这套接口屏蔽了分布式和非分布式环境的区别,同时也自动处理了数据的设备和通信后端。
|
||||
- [其他工具(Utils)](../advanced_tutorials/manager_mixin.md):还有一些工具性的模块,如 ManagerMixin,它实现了一种全局变量的创建和获取方式,执行器内很多全局可见对象的基类就是 ManagerMixin。
|
||||
|
||||
用户可以进一步阅读[教程](<>)来了解这些模块的高级用法,也可以参考[设计文档](<>) 了解它们的设计思路与细节。
|
||||
|
Loading…
x
Reference in New Issue
Block a user