From 95172781f20d408dc3c5c9f0b87118698d7164c0 Mon Sep 17 00:00:00 2001 From: Wenwei Zhang <40779233+ZwwWayne@users.noreply.github.com> Date: Fri, 25 Feb 2022 15:38:43 +0800 Subject: [PATCH] Add user doc of distributed primitives (#45) * add user doc of distributed primitives * resolve comments * update --- docs/zh_cn/tutorials/distributed.md | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/zh_cn/tutorials/distributed.md diff --git a/docs/zh_cn/tutorials/distributed.md b/docs/zh_cn/tutorials/distributed.md new file mode 100644 index 00000000..967aa5f5 --- /dev/null +++ b/docs/zh_cn/tutorials/distributed.md @@ -0,0 +1,47 @@ +# 分布å¼é€šä¿¡åŽŸè¯ + +在分布å¼è®ç»ƒæˆ–测试的过程ä¸ï¼Œä¸åŒè¿›ç¨‹æœ‰æ—¶éœ€è¦æ ¹æ®åˆ†å¸ƒå¼çš„环境信æ¯æ‰§è¡Œä¸åŒçš„代ç 逻辑,åŒæ—¶ä¸åŒè¿›ç¨‹ä¹‹é—´ä¹Ÿç»å¸¸ä¼šæœ‰ç›¸äº’通信的需求,对一些数æ®è¿›è¡ŒåŒæ¥ç‰æ“作。 +PyTorch æ供了一套基础的通信原è¯ç”¨äºŽå¤šè¿›ç¨‹ä¹‹é—´å¼ é‡çš„通信,基于这套原è¯ï¼ŒMMEngine 实现了更高层次的通信原è¯å°è£…ä»¥æ»¡è¶³æ›´åŠ ä¸°å¯Œçš„éœ€æ±‚ã€‚åŸºäºŽ MMEngine 的通信原è¯ï¼Œç®—法库ä¸çš„模å—å¯ä»¥ + +1. 在使用通信原è¯å°è£…æ—¶ä¸æ˜¾å¼åŒºåˆ†åˆ†å¸ƒå¼/éžåˆ†å¸ƒå¼çŽ¯å¢ƒ +2. 进行除 Tensor 以外类型数æ®çš„多进程通信 +3. æ— éœ€äº†è§£åº•å±‚é€šä¿¡åŽç«¯æˆ–框架 + +这些通信原è¯å°è£…的接å£å’ŒåŠŸèƒ½å¯ä»¥å¤§è‡´å½’类为如下三ç§ï¼Œæˆ‘们在åŽç»ç« 节ä¸é€ä¸ªä»‹ç» + +1. 分布å¼åˆå§‹åŒ–:`init_dist` è´Ÿè´£åˆå§‹åŒ–执行器的分布å¼çŽ¯å¢ƒ +2. 分布å¼ä¿¡æ¯èŽ·å–与控制:包括 `get_world_size` ç‰å‡½æ•°èŽ·å–当å‰çš„ `rank` å’Œ `world_size` ç‰ä¿¡æ¯ +3. 分布å¼é€šä¿¡æŽ¥å£ï¼šåŒ…括如 `all_reduce` ç‰é€šä¿¡å‡½æ•°ï¼ˆcollective functions) + +## 分布å¼åˆå§‹åŒ– + +- init_dist: 是分布å¼è®ç»ƒçš„å¯åŠ¨å‡½æ•°ï¼Œç›®å‰æ”¯æŒ pytorch,slurm,MPI 3 ç§åˆ†å¸ƒå¼å¯åŠ¨æ–¹å¼ï¼ŒåŒæ—¶å…许设置通信的åŽç«¯ï¼Œé»˜è®¤ä½¿ç”¨ NCCL。 + +## 分布å¼ä¿¡æ¯èŽ·å–与控制 + +分布å¼ä¿¡æ¯çš„获å–与控制函数没有å‚数,这些函数兼容éžåˆ†å¸ƒå¼è®ç»ƒçš„情况,功能如下 + +- [get_world_size](todo: add API link):获å–当å‰è¿›ç¨‹ç»„的进程总数,éžåˆ†å¸ƒå¼æƒ…况下返回 1 +- [get_rank](todo: add API link):获å–当å‰è¿›ç¨‹å¯¹åº”的全局 rank 数,éžåˆ†å¸ƒå¼æƒ…况下返回 0 +- [get_backend](todo: add API link):获å–当å‰é€šä¿¡ä½¿ç”¨çš„åŽç«¯ï¼Œéžåˆ†å¸ƒå¼æƒ…况下返回 None +- [get_local_rank](todo: add API link):获å–当å‰è¿›ç¨‹å¯¹åº”到当å‰æœºå™¨çš„ rank 数,éžåˆ†å¸ƒå¼æƒ…况下返回 0 +- [get_local_size](todo: add API link):获å–当å‰è¿›ç¨‹æ‰€åœ¨æœºå™¨çš„总进程数,éžåˆ†å¸ƒå¼æƒ…况下返回 0 +- [get_dist_info](todo: add API link):获å–当å‰ä»»åŠ¡çš„进程总数和当å‰è¿›ç¨‹å¯¹åº”到全局的 rank 数,éžåˆ†å¸ƒå¼æƒ…况下 word_size = 1,rank = 0 +- [is_main_process](todo: add API link):判æ–是å¦ä¸º 0 å·ä¸»è¿›ç¨‹ï¼Œéžåˆ†å¸ƒå¼æƒ…况下返回 True +- [master_only](todo: add API link):函数装饰器,用于修饰åªéœ€è¦å…¨å±€ 0 å·è¿›ç¨‹ï¼ˆrank 0 而ä¸æ˜¯ local rank 0)执行的函数 +- [barrier](todo: add API link):åŒæ¥æ‰€æœ‰è¿›ç¨‹åˆ°è¾¾ç›¸åŒä½ç½® + +## 分布å¼é€šä¿¡å‡½æ•° + +通信函数 (Collective functions),主è¦ç”¨äºŽè¿›ç¨‹é—´æ•°æ®çš„通信,基于 PyTorch 原生的 all_reduce,all_gather,gather,broadcast 接å£ï¼ŒMMEngine æ供了如下接å£ï¼Œå…¼å®¹éžåˆ†å¸ƒå¼è®ç»ƒçš„情况,并支æŒæ›´ä¸°å¯Œæ•°æ®ç±»åž‹çš„通信。 + +- [all_reduce](todo: add API link): 对进程间 tensor 进行 AllReduce æ“作 +- [all_gather](todo: add API link):对进程间 tensor 进行 AllGather æ“作 +- [gather](todo: add API link):将进程的 tensor æ”¶é›†åˆ°ä¸€ä¸ªç›®æ ‡ rank +- [broadcast](todo: add API link):对æŸä¸ªè¿›ç¨‹çš„ tensor è¿›è¡Œå¹¿æ’ +- [sync_random_seed](todo: add API link):åŒæ¥è¿›ç¨‹ä¹‹é—´çš„éšæœºç§å +- [broadcast_object_list](todo: add API link)ï¼šæ”¯æŒ object list 的广æ’,å¯ä»¥åŸºäºŽ broadcast 接å£å®žçŽ° +- [all_reduce_dict](todo: add API link):对 dict ä¸çš„内容进行 all_reduce æ“作,基于 broadcast å’Œ all_reduce 接å£å®žçŽ° +- [all_gather_object](todo: add API link):基于 all_gather 实现对任æ„å¯ä»¥ Python åºåˆ—化对象的 all_tather æ“作 +- [gather_object](todo: add API link):将 group 里æ¯ä¸ª rank çš„ data gather åˆ°ä¸€ä¸ªç›®æ ‡ rank,且支æŒå¤šç§æ–¹å¼ +- [collect_results](todo: add API link):支æŒåŸºäºŽ CPU 或者 GPU 对ä¸åŒè¿›ç¨‹é—´çš„列表数æ®è¿›è¡Œæ”¶é›†Â· -- GitLab