å€§èŠæš¡ã¢ãã«ãæ¯ããåæ£äžŠååŠç¿ã®ããã¿ Part1
ã¯ããã«
Turing æ ªåŒäŒç€Ÿã®ãªãµãŒãããŒã ã§ã€ã³ã¿ãŒã³ãããŠããæ±äº¬å·¥æ¥å€§åŠ B4 暪ç°ç 究宀ã®è€äº(@okoge_kaz)ã§ãã
èªç¶èšèªåŠçåéã«ãããå€§èŠæš¡æ·±å±€åŠç¿ã®éèŠæ§ã¯æ¥ã«æ¥ã«é«ãŸã£ãŠããŸãããGPT-3, GPT-4 ãªã©ã®ã¢ãã«ã®åŠç¿ã«ã¯èšå€§ãªèšç®ã³ã¹ãããããã容æã«åŠç¿ã§ããªããªã£ãŠããŸããå®éãã¢ãã«ãµã€ãºãè¿å¹Žæ¥éã«å€§ãããªã£ãŠããããšã«ãããåŠç¿ã«å¿ èŠãªèšç®é(FLOPs)ã¯ä»¥äžã®ããã«å¹Žã èšå€§ã«ãªã£ãŠããŸããè¿å¹Žã®å€§èŠæš¡ã¢ãã«ã§ã¯ãNVIDIA H100 80GB ã§ãã£ãŠã 1 ã€ã® GPU ã§ã¯ãã¢ãã«ãã®ããããšããã§ããŸããã

Compute Trends Across Three Eras of Machine Learning ãã
ãŸãScaling Laws ã«ãããšãå€§èŠæš¡ãªã¢ãã«ã¯å°ããã¢ãã«ãšæ¯èŒããŠããåªããæ§èœãçºæ®ãããããèªåé転ãªã©ã®é£æåºŠãé«ãã¿ã¹ã¯ãè§£ãããã«ã¯å€§èŠæš¡ãªã¢ãã«ãäžå¯æ¬ ã§ãããããå€§èŠæš¡ã¢ãã«ã®åŠç¿ã«ã¯ãäžè¿°ã®ããã«èšå€§ãªèšç®è³æºãå¿ èŠã§ãããå€§èŠæš¡ãªGPUãªãœãŒã¹ãšæéãããããŸãã
Turingã§ã¯åºç€ã¢ãã«ãçšããå®å šèªåé転ã®å®çŸãç®æããŠãããåºç€ã¢ãã«ã®åŠç¿ãæ¯ããæè¡ã«é¢ããŠç ç©¶éçºãè¡ã£ãŠããŸãã
ãŸãã«ãã®å€§èŠæš¡ã¢ãã«ã®åŠç¿ã®è£ã§æŽ»èºããŠããã®ãåæ£äžŠååŠç¿ã§ããæ¬èšäºã§ã¯ããã®åæ£äžŠååŠç¿ã®æè¡ã«ã€ããŠèª¬æãè¡ããŸãã
åæ£äžŠååŠç¿ã®ã¡ãªãã
ã¢ãã«ã倧ããã㊠1 ã€ã® GPU ã«åãŸããªãããšããããŒã¿ã»ããã倧ããã㊠1 ã€ã® GPU ã§ã¯ 100 æ¥éããããããªå ŽåãåŸè¿°ãã Model Parallel ãã Data Parallel ãçšããããšã§èšç·Žãå¯èœã«ããããèšç·Žããã»ã¹ãé«éåã劥åœãªæéã§çµæãåŸãããšãã§ããŸãã
16 æ¥ããã£ãŠããåŠç¿ã DDP(Distributed Data Parallel)ãçšããããšã§ã2 æ¥éã«ççž®ããããModel Parallel ã䜿ãããšã§ããããµã€ãºã 2 ãã 16 ã«æ¡å€§ãããããããšãã§ããŸãã
åæ£äžŠååŠç¿ã®ã³ã³ã»ãã
次ã«åæ£äžŠååŠç¿ã®ã³ã³ã»ããã«ã€ããŠèª¬æããŸãã
ãŸãåæ£äžŠååŠç¿(Distributed Parallel Training)ã«ã¯è€æ° GPU (ãããã¯è€æ° node) ãå¿
èŠã§ãã
åæ£äžŠååŠç¿ã§ã¯åŠç¿ã®éçšã§ãããã€ã¹ã¯éä¿¡ã«ããæ
å ±ãå
±æããŸãã
(ããã§ã®æ
å ±ãšã¯ã¢ãã«ã®åŸé
ãªã©åŠç¿ã«å¿
èŠãªæ
å ±ãã€ã¡ãŒãžããŠãã ãã)
ãªããæ å ±ã®å ±æããå¿ èŠãªã®ããšãããšãåæ£äžŠååŠç¿ã§ã¯åŠç¿å¯Ÿè±¡ã®ã¿ã¹ã¯ãåå²ãè€æ°ã®ããã€ã¹ã§ãããåŠçããŸãããããäœãéä¿¡ããªããã°ãåããã€ã¹ã¯èªåãåŠçããŠããå 容ã¯åãã£ãŠããä»ã®ããã€ã¹ãåŠçããŠããå 容ã«ã€ããŠã¯ç¥ãåŸãŸãããå ã åŠçãããã£ãåå²ããåã®ã¿ã¹ã¯ãšåãçµæãåŸãããã«ã¯ãåããã€ã¹ã®åŠçå 容ãé©åãªã¿ã€ãã³ã°ã§åæããå¿ èŠããããŸãããã®ãããåæ£äžŠååŠç¿ã§ã¯ããã€ã¹é(nodeé)ã§æ å ±ãå ±æããããšãå¿ èŠãšãªãã®ã§ãã
åæ£äžŠååŠç¿ãããæ·±ãçè§£ããã«ã¯ä»¥äžã®4ã€ã®æŠå¿µãæŒãããå¿ èŠããããŸãã
- Host
éä¿¡ãããã¯ãŒã¯ã®ã¡ã€ã³ããã€ã¹ã®ããšããã¹ã(Host)ãšåŒã³ãŸããäžè¬çã«ã忣ç°å¢ãåæåããéãåŒæ°ã§ã©ã®ããã€ã¹ããã¹ãã«ããã®ãæå®ããŸãã - Port
åæ£äžŠååŠç¿ã®éãéä¿¡ã«çšãããã¹ãã®ãã¹ã¿ãŒããŒãã®ããšãæããŸãã - Rank
åæ£äžŠååŠç¿ã®éããããã¯ãŒã¯äžã®æ©åšã«äžããããåºæã® ID ã§ãã - World Size
åæ£äžŠååŠç¿ã«çšããããã€ã¹ã®æ°ã®ããšã§ãã2 nodes 16 GPUs ã«ãã忣åŠç¿ã®éã¯ãworld_size = 16 ãšãªããŸãã

(Colossal-AI Concepts Distributed Trainingsãã)
å
·äœäŸã瀺ããŸãã
äžèšã®ãããªæ§æã®å Žåã¯ãäžè¬çã« Host 㯠Node 0 ã® GPU 0 ãæ
ããŸãã
ãŸãããŒãã¯ãä»ã®ãŠãŒã¶ãŒãš port çªå·ã被ããªãããã«(JOB_ID + 10000) % CONSTANT_VALUE ãªã©ãèšå®ããããšãå€ãã§ãã
Rank ã¯ä»¥äžã®ãããªåœ¢ã§å²ãæ¯ãããŸãã(å¿ ãäžæã«ãªãããã«å²ãæ¯ãããŸãã)
| Node | GPU index | Rank |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 2 | 2 |
| 0 | 3 | 3 |
| 1 | 0 | 4 |
| 1 | 1 | 5 |
| 1 | 2 | 6 |
| 1 | 3 | 7 |
World Size 㯠8 æ GPU ãããã®ã§ 8 ã§ãã
åæ£äžŠååææ³
åæ£äžŠååŠç¿ã«ã€ããŠããªããšãªããã€ã¡ãŒãžãã€ããŠããã®ã§ã¯ãªãããšæããŸãã
以äžã§ã¯ãããããã®ææ³ã«ã€ããŠè©³çްãªèª¬æãè¡ãããšã§ç®çã«æ²¿ã£ã䞊ååææ³ãéžã¹ãããã«ãªãããã®èª¬æãè¡ããŸãã
Data Parallel
Data Parallel(ããŒã¿äžŠå)ã¯ãã°ããŒãã«ããããµã€ãºã倧ããããããšã§åŠç¿æéãççž®ããããšãç®çãšãã䞊ååææ³ã§ãã
ããŒã¿ã»ããã GPU ã®åæ°ã«åå²ããåå²ããããŒã¿ã»ãããå GPU ã«å²ãåœãŠãŸããå GPU ã¯ã¢ãã«ã®è€è£œãããããæããŠãããããå²ãåœãŠãããããŒã¿ã»ãããããããå¥ã ã«åŠç¿ããŸãããããŠèª€å·®éäŒæ(back-propagation)ã®åŸã«ãã¢ãã«ã®åŸé ã GPU éã§å ±æããããšã§åæããšããŸãã
ããŒã¿äžŠåã®æ§åã衚ããã€ã©ã¹ããäžèšã«ãªããŸãã

(Colossal-AI Concepts Paradigms of Parallelismãã)
å GPU ã¯ããŒã¿ã»ããå šäœã® 1/4 ã®ããŒã¿ãåŠç¿ããŠããã ãã«èŠããŸãããã¢ãã«ã®åŸé ãããã€ã¹é(GPU é)ã§åæããããšã§ããŒã¿ã»ããããã¹ãŠåŠç¿ããã®ãšåãçµæãåŸãããšãã§ããŸãã
ã§ã¯ Data Parallel ã§äœãå€ãã£ãã®ã§ããããïŒå€§ããªå€åã¯ãã°ããŒãã«ããããµã€ãºã®å€åãšãåŠç¿æéã®ççž®ã§ãã
ãŸããã°ããŒãã«ããããµã€ãºã®å€åã§ããã1 ã€ã® GPU ã ãã§åŠç¿ãããŠããéã®ããããµã€ãºã
次ã«åŠç¿ã®ççž®ã§ãããããã¯çŽæçã«ãåããããã«ã1 ã€ã® GPU ãæ
åœããã¹ãããŒã¿ã»ãããµã€ãºãäžŠåæ°
ZeRO
ããŒã¿äžŠå(Data Parallel)ã§ã¯ãå GPU ãããããã¢ãã«å šäœã®éã¿ãæããŠããŸãããããããããã¯åé·æ§ã®èгç¹ã§èŠããšç¡é§ããããšãèšããŸããããããã® GPU ãã¢ãã«ã®ç¶æ (Optimizer ã®ç¶æ ãåŸé ãã¢ãã«ãã©ã¡ãŒã¿ãŒ)ãè€è£œããã®ã§ã¯ãªããGPU éã§åå²ããããšã§ Data Parallel ã®ã¡ã¢ãªã®åé·æ§ãæé€ããããšãã§ããã°ãããã«è¯ãããã§ãã
å®ã¯ãããå®çŸããŠããã®ã Zero Redundancy Optimizer éç§° ZeRO ã§ãããã®èšäºã§ã¯ ZeRO ã«é¢ãã説æã¯çç¥ããŸãããç¶ç·šã®ãå€§èŠæš¡ã¢ãã«ãæ¯ããåæ£äžŠååŠç¿ã®ããã¿ Part2ãã«ãŠè©³ãã解説ããäºå®ã§ãã
Model Parallel
Data Parallel ã¯ã¢ãã«ã®è€è£œãããããã® GPU ããã€ããšã§ãåŠç¿ãé«éåããããšããã¢ãããŒãã§ããããããã玹ä»ãã Model Parallel ã¯ãã¢ãã«ãåå²ããŠè€æ° GPU ã«åæ£ãããããšã§ 1 ã€ã® GPU ã«ã¯åãŸããããªããããªã¢ãã«ãåŠç¿å¯èœã«ããããšããã¢ãããŒãã§ãã
ã¢ãã«äžŠåã«ã¯ Tensor Parallel(ãã³ãœã«äžŠå)ãš Pipeline Parallel(ãã€ãã©ã€ã³äžŠå)ã® 2 çš®ããããŸãã
以äžã§ã¯ãããããã®äžŠååææ³ã«ã€ããŠèª¬æãè¡ããŸãã
Tensor Parallel
Tensor Parallel ã®åºæ¬
Tensor Parallel(ãã³ãœã«äžŠå) ãšã¯ããã³ãœã«ãç¹å®ã®æ¬¡å
ã«æ²¿ã£ãŠ
å ·äœäŸãèŠãã»ããåããããããšæãã®ã§ä»¥äžã®å³ã䜿ã£ãŠèª¬æããŸãã

(huggingface ãã)
仿ã ãèšç®ãããã®ã¯
ãšããŸããããã§
ãããšèšç®åŒã¯ä»¥äžã®ããã«è¡šããŸãã
ãã£ãŠå GPU ã§ã¯
ããã«ãã
åæ§ã«ãè¡æ¹åã®åå²ã«ã€ããŠãå¯èœã§ãã以äžã§ã¯åæ¹åã®åå²ãšãè¡æ¹åã®åå²ãçµã¿åããããã®ã瀺ããŸãã
ãšè¡šããŸããããã«ããè¡åç©
掻æ§å颿°ãš Tensor Parallel
äžè¿°ã®åæ¹ååå²ã«ããã
äŸãã°èšç®åŸã«æŽ»æ§å颿°ãéãå Žå
ãšè¡šããã®ã§ã
è¡åãåå² â è¡åç©èšç® â éçŽ â åŸãããè¡åãåå² â æŽ»æ§å颿° ãšããããã
è¡åãåå² â è¡åç©èšç® â æŽ»æ§å颿°
ãšããã»ãããéçŽããããã®éä¿¡ã³ã¹ãããåå²ããéã®ãªãŒããŒãããããªããããšãã§ããŸãã
以äžã®å³ã®ããã«åºåãã¯ãã«ãéçŽããå¿ èŠããããŸã§åå²ãããŸãŸåŠçããããšã§ãä»»æã®æ·±ãã® MLP ã«ãã㊠GPU éã®åæãå¿ èŠãšããåŠç¿ãé²ããããšãã§ããŸãã

(Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism)
äžèšã®ãã㪠GPU éã®åæãå°ãªããªããŠããæ§é ãå€ãå Žåã¯ã
Multi-Head Attention å±€ã«ãããŠã¯ä»¥äžã®ããã«ã䞊ååå¯èœãªæ§é ãæããŠããŸãã(= ããããã® Head ãç¬ç«ã«ãªã£ãŠãã) ãã®ããã

(Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism)
Pipeline Parallel
About
ãã€ãã©ã€ã³äžŠåã®ã³ã³ã»ããã¯ãã¢ãã«ãåå²ããåå²ãã Layers ãå¥ã ã® GPU ãæã€ãšãããã®ã§ããããã«ããã1 ã€ã® GPU ã«ä¹ããããªããµã€ãºã®ã¢ãã«ãåŠç¿ããããšãã§ããŸãã

(Colossal-AI: Concepts/Paradigms of Parallelism Pipeline Parallel)
Naive Model Parallel
ãã€ãã©ã€ã³äžŠåã®èãæ¹ãæçŽã«è¡ãã®ã Naive Model Parallell(Vertical)ã§ãããã®æ¹æ³ã§ã¯ GPU ã®å€§éšåãæŽ»çšããããšãã§ããªãããå®éã«çšããããããšã¯ãããŸãããããã Pipeline Parallel ãçè§£ããå©ãã«ãªããã玹ä»ããŸãã
Naive Model Parallel ã§ã¯ä»¥äžã®ããã«ã¢ãã«ãè€æ°ã® GPU ã«åå²ããŸãã
================= =================
| 0 | 1 | 2 | 3 | | 4 | 5 | 6 | 7 |
================= =================
GPU:0 GPU:1
åäž GPU å
ã§ layer:0 â layer:1 â layer:2 â layer: 3 ãšäŒæ¬ãããŠããéã¯éåžžã®å Žåãšå€ãããããŸãããããããlayer: 3 â layer: 4 ãžäŒæ¬ãããé㯠GPU ãç°ãªããã GPU éã§éä¿¡ãå¿
èŠãšãªããŸããå
·äœçã«ã¯ãäžé掻æ§(intermediate activation)ã GPU:0 â GPU:1 ãžéãããšã§å®çŸããŸãã
(éäŒæ¬ã®éã¯ãGPU:1 â GPU:0 ãžå
¥åãã³ãœã«(input tensor)ãäŒéããŸãã)
ç¹ã«åé¡ããªãããã«èŠãã Naive Model Parallel ã§ãããGPU:0 ã§äŒæ¬ãè¡ãããŠããé㯠GPU:1 㯠idle ç¶æ
ã«ãªã£ãŠããŸã£ãŠããŸããããã¯å¹çæ§ã®èгç¹ããã¯èŽåœçã§ããäŸãã°ããã®æ¹æ³ã§ã¯GPU æ°ã 8 æããé㯠7 æãåžžã« idle ç¶æ
ã«ãªã£ãŠããŸããŸããGPU éã§ããŒã¿ãéãããšã«ãããªãŒããŒããããååšããããããã®ãŸãŸã§ã¯éåžžã«å¹çãæªã䞊ååŠçã«ãªã£ãŠããŸããŸãã
ãã®åé¡ã解決ããããã®ææ³ãããããããããã€ã¯ããããã«åããŠãã€ãã©ã€ã³åããæ¹æ³ã§ãã
ãã®æ¹æ³ã«ããåå²äžŠåããã€ãã©ã€ã³äžŠåãšåŒã³ãŸãã
Pipeline Parallel

äžå³ã¯ 1 ã€ã® GPU 以å€ã idle ã«ãªã£ãŠããéå¹çãªæ¹æ³ãããããããããã«åå²ããã€ã¯ãããããšããããšã§ãã€ãã©ã€ã³ãäœã GPU ã®çšŒåçãäžããŠããç¶æ ã瀺ããŠããŸãã
ããæå»

Naive Model Parallel ã§ã¯ 1 ã€ã® GPU(Device2)ããæŽ»çšã§ããŠããªãã®ããPipleline Parallel ã§ã¯ 3 ã€ã® GPU(Device3, Deveice2, Device 1)ãå©çšã§ããŠããããšãããããŸãã
(Pipeline Parallel ã®å³ã«âBubbleâãšæžãããéšåããããŸããããã㯠GPU ããã€ã¹ã idle ç¶æ ã«ããæå¹æŽ»çšã§ããŠããªãããšã衚ããŠããŸãã)
Pipeline Parallel ã«ãããŠå¹çãäžããã«ã¯ Bubble ã®éšåãå°ããããããšãéèŠã§ããBubble ãå°ããããã«ã¯ããŒã¿ã®ãã£ã³ã¯æ°(
ã€ã¥ã
ãã®èšäºã§ã¯åæ£äžŠååŠç¿ã«é¢ããåºæ¬çãªã³ã³ã»ãããåçš®åæ£äžŠååŠç¿ã«ã€ããŠæŠèª¬ããŸããã
ç¶ç·šã® ãå€§èŠæš¡ã¢ãã«ãæ¯ããåæ£äžŠååŠç¿ã®ããã¿ Part 2ã ã§ã¯ããã« ZeRO ãå§ããšããææ°ã®åæ£åŠç¿ã®æè¡ã«ã€ããŠè§£èª¬ããŸãããŸãããå€§èŠæš¡ã¢ãã«ãæ¯ããåæ£äžŠååŠç¿ã®ããã¿ å®è·µç·š Part 1ã ã§ã¯ä»åã®èšäºã«ãŠèª¬æããæŠå¿µãçšããŠå®éã«åŠç¿ãè¡ãããã®å®è£ äŸã瀺ããŸãã(PyTorch, DeepSpeedã§ã®å®è£ äŸã瀺ãäºå®ã§ãã)
Turing ã§ã¯èªåé転ã¢ãã«ã®åŠç¿ããèªåéè»¢ãæ¯ããããã®å€§èŠæš¡èšèªã¢ãã«ã®äœæã®ããã«åæ£äžŠååŠç¿ã®ç¥èŠãåãå ¥ããç ç©¶éçºãè¡ã£ãŠããŸããèå³ãããæ¹ã¯ãTuring ã®å ¬åŒ Web ãµã€ããæ¡çšæ å ±ãªã©ãã芧ãã ããã話ãèããããšããæ¹ã¯ç§ã AI ããŒã ã®ãã£ã¬ã¯ã¿ãŒã®å±±å£ããã® Twitter DM ããã§ããæ°è»œã«ãé£çµ¡ãã ããã
åèæç®
- Colossal-AI
- huggingface
- arXiv
- Google Research
Discussion