From 4be57e5ebbfb166f6f49ce92120aeaa3d2cbbc65 Mon Sep 17 00:00:00 2001 From: Wenwei Zhang <40779233+ZwwWayne@users.noreply.github.com> Date: Mon, 29 Aug 2022 16:17:59 +0800 Subject: [PATCH] [Doc]: Add introduction of mmengine in get_started.md (#481) * add introduction of mmengine in get_started.md * resolve comments * resolve comments * resolve comments * resolve comments * resolve comments * resolve comments * update figs --- docs/zh_cn/get_started/introduction.md | 56 ++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 docs/zh_cn/get_started/introduction.md diff --git a/docs/zh_cn/get_started/introduction.md b/docs/zh_cn/get_started/introduction.md new file mode 100644 index 00000000..0838f67b --- /dev/null +++ b/docs/zh_cn/get_started/introduction.md @@ -0,0 +1,56 @@ +## ä»‹ç» + +MMEngine 是一个用于深度å¦ä¹ 模型è®ç»ƒçš„基础库,基于 PyTorch,支æŒåœ¨ Linuxã€Windowsã€MacOS 上è¿è¡Œã€‚它具有如下三个亮点: + +1. 通用:MMEngine 实现了一个高级的通用è®ç»ƒå™¨ï¼Œå®ƒèƒ½å¤Ÿï¼š + - 支æŒç”¨å°‘é‡ä»£ç è®ç»ƒä¸åŒçš„任务,例如仅使用 80 行代ç å°±å¯ä»¥è®ç»ƒ imagenet(pytorch example 400 行) + - è½»æ¾å…¼å®¹æµè¡Œçš„算法库如 TIMMã€TorchVision å’Œ Detectron2 ä¸çš„模型 + +2. 统一:MMEngine 设计了一个接å£ç»Ÿä¸€çš„开放架构,使得 + - 用户å¯ä»¥ä»…ä¾èµ–一份代ç 实现所有任务的轻é‡åŒ–,例如 MMRazor 1.x 相比 MMRazor 0.x 优化了 40% 的代ç é‡ + - ä¸Šä¸‹æ¸¸çš„å¯¹æŽ¥æ›´åŠ ç»Ÿä¸€ä¾¿æ·ï¼Œåœ¨ä¸ºä¸Šå±‚算法库æ供统一抽象的åŒæ—¶ï¼Œæ”¯æŒå¤šç§åŽç«¯è®¾å¤‡ã€‚ç›®å‰ MMEngine æ”¯æŒ Nvidia CUDAã€Mac MPSã€AMDã€MLU ç‰è®¾å¤‡è¿›è¡Œæ¨¡åž‹è®ç»ƒã€‚ +3. çµæ´»ï¼šMMEngine 实现了“ä¹é«˜â€å¼çš„è®ç»ƒæµç¨‹ï¼Œæ”¯æŒäº† + - æ ¹æ®è¿ä»£æ•°ã€ loss 和评测结果ç‰åŠ¨æ€è°ƒæ•´çš„è®ç»ƒæµç¨‹ã€ä¼˜åŒ–ç–略和数æ®å¢žå¼ºç–略,例如早åœï¼ˆearly stoppingï¼‰æœºåˆ¶ç‰ + - ä»»æ„å½¢å¼çš„模型æƒé‡å¹³å‡ï¼Œå¦‚ Exponential Momentum Average (EMA) å’Œ Stochastic Weight Averaging (SWA) + - è®ç»ƒè¿‡ç¨‹ä¸é’ˆå¯¹ä»»æ„æ•°æ®å’Œä»»æ„节点的çµæ´»å¯è§†åŒ–和日志控制 + - 对神ç»ç½‘络模型ä¸å„个层的优化é…置进行细粒度调整 + - æ··åˆç²¾åº¦è®ç»ƒçš„çµæ´»æŽ§åˆ¶ + +### 架构 + + + +上图展示了 MMEngine 在 OpenMMLab 2.0 ä¸çš„层次。MMEngine 实现了 OpenMMLab 算法库的新一代è®ç»ƒæž¶æž„,为 OpenMMLab ä¸çš„ 30 多个算法库æä¾›äº†ç»Ÿä¸€çš„æ‰§è¡ŒåŸºåº§ã€‚å…¶æ ¸å¿ƒç»„ä»¶åŒ…å«è®ç»ƒå¼•æ“Žã€è¯„测引擎和模å—管ç†ç‰ã€‚ + +### 模å—ä»‹ç» + +<img src="https://user-images.githubusercontent.com/40779233/187156277-7c5d020b-7ba6-421b-989d-2990034ff8cc.png" width = "300" alt="模å—关系" align=center /> + +MMEngine å°†è®ç»ƒè¿‡ç¨‹ä¸æ¶‰åŠçš„组件和它们的关系进行了抽象,如上图所示。ä¸åŒç®—法库ä¸çš„åŒç±»åž‹ç»„件具有相åŒçš„接å£å®šä¹‰ã€‚ + +#### æ ¸å¿ƒæ¨¡å—与相关组件 + +è®ç»ƒå¼•æ“Žçš„æ ¸å¿ƒæ¨¡å—是[执行器(Runner)](../tutorials/runner.md)。 执行器负责执行è®ç»ƒã€æµ‹è¯•å’ŒæŽ¨ç†ä»»åŠ¡å¹¶ç®¡ç†è¿™äº›è¿‡ç¨‹ä¸æ‰€éœ€è¦çš„å„个组件。在è®ç»ƒã€æµ‹è¯•ã€æŽ¨ç†ä»»åŠ¡æ‰§è¡Œè¿‡ç¨‹ä¸çš„特定ä½ç½®ï¼Œæ‰§è¡Œå™¨è®¾ç½®äº†[é’©å(Hook)](../tutorials/hook.md) æ¥å…许用户拓展ã€æ’入和执行自定义逻辑。执行器主è¦è°ƒç”¨å¦‚下组件æ¥å®Œæˆè®ç»ƒå’ŒæŽ¨ç†è¿‡ç¨‹ä¸çš„循环: + +- [æ•°æ®é›†ï¼ˆDataset)](../tutorials/basedataset.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)会负责对模型性能进行评测。其ä¸è¯„测器负责基于数æ®é›†å¯¹æ¨¡åž‹çš„é¢„æµ‹è¿›è¡Œè¯„ä¼°ã€‚è¯„æµ‹å™¨å†…è¿˜æœ‰ä¸€å±‚æŠ½è±¡æ˜¯è¯„æµ‹æŒ‡æ ‡ï¼Œè´Ÿè´£è®¡ç®—å…·ä½“çš„ä¸€ä¸ªæˆ–å¤šä¸ªè¯„æµ‹æŒ‡æ ‡ï¼ˆå¦‚å¬å›žçŽ‡ã€æ£ç¡®çŽ‡ç‰ï¼‰ã€‚ + +为了统一接å£ï¼ŒOpenMMLab 2.0 ä¸å„个算法库的评测器,模型和数æ®ä¹‹é—´äº¤æµçš„接å£éƒ½ä½¿ç”¨äº†[æ•°æ®å…ƒç´ (Data Element)](../tutorials/data_element.md)æ¥è¿›è¡Œå°è£…。 + +在è®ç»ƒã€æŽ¨ç†æ‰§è¡Œè¿‡ç¨‹ä¸ï¼Œä¸Šè¿°å„个组件都å¯ä»¥è°ƒç”¨æ—¥å¿—管ç†æ¨¡å—å’Œå¯è§†åŒ–器进行结构化和éžç»“构化日志的å˜å‚¨ä¸Žå±•ç¤ºã€‚[日志管ç†ï¼ˆLogging Modules)](../tutorials/logging.md):负责管ç†æ‰§è¡Œå™¨è¿è¡Œè¿‡ç¨‹ä¸äº§ç”Ÿçš„å„ç§æ—¥å¿—ä¿¡æ¯ã€‚å…¶ä¸æ¶ˆæ¯æž¢çº½ (MessageHub)负责实现组件与组件ã€æ‰§è¡Œå™¨ä¸Žæ‰§è¡Œå™¨ä¹‹é—´çš„æ•°æ®å…±äº«ï¼Œæ—¥å¿—处ç†å™¨ï¼ˆLog Processor)负责对日志信æ¯è¿›è¡Œå¤„ç†ï¼Œå¤„ç†åŽçš„日志会分别å‘é€ç»™æ‰§è¡Œå™¨çš„日志器(Logger)和å¯è§†åŒ–器(Visualizer)进行日志的管ç†ä¸Žå±•ç¤ºã€‚[å¯è§†åŒ–器(Visualizer)](../tutorials/visualization.md):å¯è§†åŒ–器负责对模型的特å¾å›¾ã€é¢„测结果和è®ç»ƒè¿‡ç¨‹ä¸äº§ç”Ÿçš„结构化日志进行å¯è§†åŒ–ï¼Œæ”¯æŒ Tensorboard å’Œ WanDB ç‰å¤šç§å¯è§†åŒ–åŽç«¯ã€‚ + +#### å…¬å…±åŸºç¡€æ¨¡å— + +MMEngine ä¸è¿˜å®žçŽ°äº†å„ç§ç®—法模型执行过程ä¸éœ€è¦ç”¨åˆ°çš„公共基础模å—,包括 + +- [é…置类(Config)](../tutorials/config.md):在 OpenMMLab 算法库ä¸ï¼Œç”¨æˆ·å¯ä»¥é€šè¿‡ç¼–写 config æ¥é…ç½®è®ç»ƒã€æµ‹è¯•è¿‡ç¨‹ä»¥åŠç›¸å…³çš„组件。 +- [注册器(Registry)](../tutorials/registry.md):负责管ç†ç®—法库ä¸å…·æœ‰ç›¸åŒåŠŸèƒ½çš„模å—。MMEngine æ ¹æ®å¯¹ç®—法库模å—çš„æŠ½è±¡ï¼Œå®šä¹‰äº†ä¸€å¥—æ ¹æ³¨å†Œå™¨ï¼Œç®—æ³•åº“ä¸çš„注册器å¯ä»¥ç»§æ‰¿è‡ªè¿™å¥—æ ¹æ³¨å†Œå™¨ï¼Œå®žçŽ°æ¨¡å—的跨算法库调用。 +- [文件读写(File I/O)](../tutorials/fileio.md):为å„个模å—的文件读写æ供了统一的接å£ï¼Œä»¥ç»Ÿä¸€çš„å½¢å¼æ”¯æŒäº†å¤šç§æ–‡ä»¶è¯»å†™åŽç«¯å’Œå¤šç§æ–‡ä»¶æ ¼å¼ï¼Œå¹¶å…·å¤‡æ‰©å±•æ€§ã€‚ +- [分布å¼é€šä¿¡åŽŸè¯ï¼ˆDistributed Communication Primitives)](../tutorials/distributed.md):负责在程åºåˆ†å¸ƒå¼è¿è¡Œè¿‡ç¨‹ä¸ä¸åŒè¿›ç¨‹é—´çš„通信。这套接å£å±è”½äº†åˆ†å¸ƒå¼å’Œéžåˆ†å¸ƒå¼çŽ¯å¢ƒçš„区别,åŒæ—¶ä¹Ÿè‡ªåŠ¨å¤„ç†äº†æ•°æ®çš„设备和通信åŽç«¯ã€‚ +- [其他工具(Utils)](../tutorials/utils.md):还有一些工具性的模å—,如 ManagerMixin,它实现了一ç§å…¨å±€å˜é‡çš„创建和获å–æ–¹å¼ï¼Œæ‰§è¡Œå™¨å†…很多全局å¯è§å¯¹è±¡çš„基类就是 ManagerMixin。 + +用户å¯ä»¥è¿›ä¸€æ¥é˜…读[教程]()æ¥äº†è§£è¿™äº›æ¨¡å—的高级用法,也å¯ä»¥å‚考[设计文档]() 了解它们的设计æ€è·¯ä¸Žç»†èŠ‚。 -- GitLab