mmengine
v0.10.5

简介|安装|入门|文档|报告问题
英语| 简体中文











V0.10.5于2024-9-11发行。
亮点:
artifact_location #1505exclude_frozen_parameters DeepSpeedEngine._zero3_consolidated_16bit_state_dict #1517阅读ChangElog以获取更多详细信息。
Mmengine是一个基础图书馆,用于培训基于Pytorch的深度学习模型。它是所有OpenMMLAB代码库的培训引擎,该引擎支持各个研究领域的数百种算法。此外,MMENGINE也适用于非openmmlab项目。它的亮点如下:
整合主流大型模型培训框架
支持各种培训策略
提供用户友好的配置系统
涵盖主流培训监控平台
| mmengine | Pytorch | Python |
|---|---|---|
| 主要的 | > = 1.6 <= 2.1 | > = 3.8,<= 3.11 |
| > = 0.9.0,<= 0.10.4 | > = 1.6 <= 2.1 | > = 3.8,<= 3.11 |
在安装mmengine之前,请确保按照官方指南成功安装了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模型为例,我们将使用Mmengine在少于80行的代码中构建完整,可配置的培训和验证过程。
首先,我们需要定义一个模型,该BaseModel 1)除了与数据集相关的那些参数外,还接受了forward方法中的其他参数mode 。
mode的价值是“损失”, forward方法应返回包含密钥“损失”的dict 。mode的值为“预测”,正向方法应返回包含预测和标签的结果。 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接下来,我们需要创建数据集S和数据加载器进行培训和验证。在这种情况下,我们只需使用火炬手支持的内置数据集即可。
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中继承并实现该process和compute_metrics方法。
from mmengine . evaluator import BaseMetric
class Accuracy ( BaseMetric ):
def process ( self , data_batch , data_samples ):
score , gt = data_samples
# Save the results of a batch to `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 )
# Returns a dictionary with the results of the evaluated metrics,
# where the key is the name of the metric
return dict ( accuracy = 100 * total_correct / total_size )最后,我们可以使用先前定义的Model , DataLoader和Metrics构建跑步者,以及其他一些配置,如下所示。
from torch . optim import SGD
from mmengine . runner import Runner
runner = Runner (
model = MMResNet50 (),
work_dir = './work_dir' ,
train_dataloader = train_dataloader ,
# 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 ),
val_dataloader = val_dataloader ,
val_cfg = dict (),
val_evaluator = dict ( type = Accuracy ),
) runner . train ()我们感谢为改善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许可发布。