
مقدمة | التثبيت | ابدأ | الوثائق | ؟ القضايا الإبلاغ
الإنجليزية | 简体中文











تم إصدار V0.10.5 في 2024-9-11.
أبرز:
artifact_location في mlflowvisbackend #1505exclude_frozen_parameters لـ DeepSpeedEngine._zero3_consolidated_16bit_state_dict #1517اقرأ changelog لمزيد من التفاصيل.
MMENGINE هي مكتبة أساسية لتدريب نماذج التعلم العميق على أساس Pytorch. إنه بمثابة محرك تدريب لجميع أشكال الكود OpenMMLAB ، والتي تدعم مئات الخوارزميات في مجالات البحث المختلفة. علاوة على ذلك ، فإن MMENGINE عامة يتم تطبيقها على المشاريع غير المفتوحة. أبرز ما يلي:
دمج أطراف التدريب النطاق على نطاق واسع
يدعم مجموعة متنوعة من استراتيجيات التدريب
يوفر نظام تكوين سهل الاستخدام
يغطي منصات مراقبة التدريب السائدة
| Mmengine | Pytorch | بيثون |
|---|---|---|
| رئيسي | > = 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()) ' أخذ تدريب نموذج RESNET-50 على مجموعة بيانات CIFAR-10 كمثال ، سنستخدم MMENGINE لإنشاء عملية تدريبات كاملة وقابلة للتكوين في أقل من 80 سطرًا من التعليمات البرمجية.
أولاً ، نحتاج إلى تحديد نموذج يرث 1) يرث من BaseModel و 2) mode وسيطة إضافية في الطريقة forward ، بالإضافة إلى تلك الوسائط المتعلقة بمجموعة البيانات.
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 و Dataloader S للتدريب والتحقق من الصحة. في هذه الحالة ، نستخدم ببساطة مجموعات البيانات المدمجة المدعومة في 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 ويقوم بتنفيذ أساليب 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. يرجى الرجوع إلى المساهمة. md للحصول على المبدأ التوجيهي المساهمة.
إذا وجدت هذا المشروع مفيدًا في بحثك ، فيرجى النظر في Cite:
@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.