
บทนำ การติดตั้ง เริ่มต้น | เอกสาร ปัญหาการรายงาน
ภาษาอังกฤษ | 简体中文











V0.10.5 เปิดตัวเมื่อปี 2567-2564
ไฮไลท์:
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 สำหรับแนวทางที่มีส่วนร่วม
หากคุณพบว่าโครงการนี้มีประโยชน์ในการวิจัยของคุณโปรดพิจารณาอ้างอิง:
@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