Teamããã¬ããéçºæ¯ãè¿ãã¡ã¢3: 10bã¯ã©ã¹ã®å€§èŠæš¡èšèªã¢ãã«ãå®éã«éçºããŠæ³å®å€ã ã£ãããš5éž
(æ¬èšäºã¯ïœ€æè¡ã¡ã¢ãããšã«ïœ€Claude 3ã§äžè¬åãã«èªåäœæãããã®ã§ã)
- é¢é£èšäº
ã¯ããã«
æã ã¯æè¿ãå€§èŠæš¡ãªèšèªã¢ãã«ã®éçºãããžã§ã¯ãã«åãçµã¿ãŸãããèšèªã¢ãã«ãšã¯ã倧éã®ããã¹ãããŒã¿ãåŠç¿ããããšã§ã人éã®ãããªèªç¶ãªæç« ãçæã§ããAIã·ã¹ãã ã®ããšã§ãããããžã§ã¯ãã§ã¯ã250å以äžã®è©Šè¡é¯èª€ãç¹°ãè¿ããªãããã¢ãã«ã®æ§èœãå°ããã€åäžãããŠãããŸãããããã§ã¯ããã®éçšã§çŽé¢ããåé¡ãšè§£æ±ºçã«ã€ããŠå ±åããããšæããŸãã
1. GPUã®æ§èœãå šãåŒãåºããªããŠçŠã
ãããžã§ã¯ãã§ã¯ãNVIDIAç€Ÿã®ææ°éGPUãH100ãã24æã䜿çšããããšã«ãªããŸãããH100ã®äŸ¡æ Œã¯1æãããçŽ500äžåãšéåžžã«é«äŸ¡ã§ãããåäžä»£ã®A100ãšæ¯ã¹ãŠçŽ3åã®æ§èœãçºæ®ãããšã®åã§ãããããã§ãH100ã®é«ãæ§èœãåæã«èšç®éãèšå®ããã¢ãã«ã®åŠç¿ãéå§ããŸããã
ãŸãã8æã®H100ã1ã€ã®ãµãŒããŒïŒããŒãïŒã«æèŒããç·Žç¿ãšããŠåŠç¿ãè¡ã£ãŠã¿ãŸããããããšã280TFLOPSçšåºŠã®èšç®é床ãåŸãããŸãããTFLOPSãšã¯ã1ç§éã«äœå
åã®æµ®åå°æ°ç¹æŒç®ãã§ããããè¡šãææšã§ããå¥ã«è©ŠããA100ã8ææèŒããæ¡ä»¶ã§ã¯ã100-150TFLOPSçšåºŠã§ããã®ã§ã3åãšã¯è¡ããŸããã§ããããããã§ãå第ç¹ãšèšããããã©ãŒãã³ã¹ã§ããã
æ¬çªã®åŠç¿ã§ã¯ãH100ã24ææèŒãã3å°ã®ãµãŒããŒã䜿çšããããšã«ãªããŸãããããã§åé¡ãçºçããŸããããªããšã100TFLOPSãåããšããçµ¶æçãªçµæãåºãŠããŸã£ãã®ã§ããããã¯ãåäžä»£ã®A100ãããäœãèšç®é床ã§ãã
æã
ã¯ãèšç®é床ãåäžããããããpipeline parallelãmodel parallelãdata parallelããã€ã¯ãããããµã€ãºãZEROãªã©ãæ§ã
ãªãã€ããŒãã©ã¡ãŒã¿ïŒã¢ãã«ã®åŠç¿ãå¶åŸ¡ããããã®èšå®å€ïŒã«ã€ããŠå匷ãçŽããæé©åã詊ã¿ãŸãããããããããã§ã120TFLOPSçšåºŠã®é床ããåºãŸããã§ããã
ãã®ãšããæã
ã¯ããªãã®ãã¬ãã·ã£ãŒãæããŸãããæé«å³°ã®èšç®è³æºã䜿ãããŠããã£ãŠããã®ã«ããããå
šç¶æŽ»çšã§ããŠããªãèªåãã¡ãæ
ããªãæããŸãããåé¡ã解決ã§ããªããŸãŸæéã ããéããŠããäžã§ãåšãããéé£ã®å£°ãèãããŠãããããªé¯èŠããããŸããã
åé¡è§£æ±ºã®ããã®è©Šè¡é¯èª€
æã
ã¯ãèšç®é床ãäžãããªãåå ãå¿
æ»ã«èããŸããã3å°ã®ãµãŒããŒã䜿ã£ã忣åŠç¿ã§ã¯ããµãŒããŒéã®ããŒã¿ã®ããåããããã«ããã¯ã«ãªã£ãŠããå¯èœæ§ãé«ããšæšæž¬ããŸããã
ããã§ããµãŒããŒééä¿¡ãé«éåããæè¡ã§ãããDirectGPU TCPXããæ£ããåäœããŠããã確èªããŠã¿ãŸããããç¹ã«åé¡ã¯èŠåœãããŸããã§ããã
窮äœã®çãšããŠïœ€ã¢ãã«ã3ã€ã«åå²ãããããããå¥ã
ã®ãµãŒããŒã§åŠç¿ããããBranch Train Mergeããšããææ³ã®æ¡çšãæ€èšããŸãããããã¯ã忣åŠç¿ã«ãããéä¿¡ã®ãªãŒããŒããããæžããããã®ãå°ãå€ãã£ãã¢ãããŒãã§ãããããããã®ããã«ã¯æ°ããªããŒã¿ã»ãããçšæããå¿
èŠããããããªãã®æéãããããŸãã广ãäžéæã ã£ãã®ã§ãããã¯èŠéãããšã«ããŸããã
çªç Žå£ã¯gradient accumulationã«ãã
è¡ãè©°ãŸã£ãŠããæã
ã«ãæŸå°Ÿç 究宀ã®ã¡ã³ããŒããã¢ããã€ã¹ãããã ããŸãããããã¯ããGlobal batchã1536ãmicroã1ã«èšå®ããŠã¿ãŠã¯ã©ããããšãããã®ã§ããã
ããããµã€ãºãšã¯ãäžåºŠã«åŠçããããŒã¿ã®æ°ã®ããšã§ããGlobal batchã¯ãè€æ°ã®ãµãŒããŒãåãããå
šäœã§ã®ããããµã€ãºãæããŸããäžæ¹ãmicroã¯ãåãµãŒããŒãäžåã§åŠçããããŒã¿ã®æ°ã§ãã
ãããŸã§æã
ã¯ãGPUã®ã¡ã¢ãªå®¹éã®å¶éãããGlobal batchã100以äžã«èšå®ããŠããŸããã1536ãªã©ãšãã倧ããªå€ã¯ãã¡ã¢ãªãªãŒããŒãåŒãèµ·ãããŠèšç®ã§ããªãã ãããšèããŠããã®ã§ãã
ããã§ç»å Žããã®ããgradient accumulationããšããæè¡ã§ãããããã¯ãåŸé
ïŒã¢ãã«ã®éã¿ãæŽæ°ããããã®å€ïŒããããå
šäœã§äžæ°ã«èšç®ããã®ã§ã¯ãªããå°ããªåäœã«åããŠå°ããã€èšç®ããæåŸã«å¹³åãåãææ³ã§ãã
éåžžãgradient accumulationã¯ãããããµã€ãºã倧ãããããå Žåã«ãã¡ã¢ãªäœ¿çšéãæããããã«çšããããŸããäžæ¹ã§ãè€æ°åã«åããŠåŸé
ãèšç®ãããããããŒã¿ã«ã®èšç®æéã¯é·ããªã£ãŠããŸããŸãã
ã§ãã®ã§ãèšç®é床ã®åäžãç®æããŠããæã
ã«ã¯ãããã䜿ããšããçºæ³ã¯ãããŸããã§ããããšãããããã詊ããŠã¿ããšãé©ãã¹ãçµæãåŸãããã®ã§ãã
FLOPSãäžæ°ã«300ãè¶
ããæé©åãé²ããçµæãæçµçã«ã¯450以äžã«ãŸã§å°éããŸãã
æãããgradient accumulationã«ãã£ãŠãµãŒããŒééä¿¡ã®é »åºŠãæžããããã«ããã¯ãè§£æ¶ãããã®ã ãšæããŸãã
(èè¶³ãªããGPT-2ç³»ã®ã¢ãŒããã¯ãã£ããããLLaMaç³»ã®æ¹ãFLOPSãé«ããªãåŸåãèŠãããŸããã)
ããããŠãæã
ã«ã¯å°åºæãã€ããªãã£ããã©ã¡ãŒã¿èšå®ã«ãããèšç®é床ã®åé¡ã解決ããããšãã§ããŸãããã¢ããã€ã¹ããã ãã£ãæŸå°Ÿç ç©¶å®€ã®æ¹ã
ã«ã¯å¿ããæè¬ããŠããŸããåæã«ã忣åŠç¿ã®ãããã§ãã·ã§ãã«ã®æè¡åã®é«ããæãç¥ããããåºæ¥äºã§ããããŸããã
2. nanãšã©ãŒã«ããåŠç¿ã®åŒ·å¶çµäº
å€§èŠæš¡èšèªã¢ãã«ã®åŠç¿ã§ã¯ããloss spikeããšãnan errorãã倧ããªåé¡ãšããŠç¥ãããŠããŸãã
loss spikeãšã¯ãåŠç¿ãé 調ã«é²ãã§ãããšæãããç¢å
ã«ãçªç¶lossã®å€ãæ¥äžæããäžãããªããªãçŸè±¡ã§ããlossã¯ãã¢ãã«ã®äºæž¬ãšæ£è§£ã®éã®èª€å·®ãè¡šãææšã§ãéåžžã¯åŠç¿ãé²ãã«ã€ããŠåŸã
ã«æžå°ããŠãããŸãã
äžæ¹ãnan errorã¯ãåŸé
ã®å€ãçºæ£ããŠãnanãïŒnot a numberãæ°å€ã§ã¯ãªãïŒã«ãªããåŠç¿ã®ç¶ç¶ãäžå¯èœã«ãªãçŸè±¡ã§ãã
æã
ã¯ãããã®çŸè±¡ã«ãå®ã«10åã»ã©ééããŸãããå€äžãæãæ¹ã«èµ·ããããšããã°ãã°ã§ãæŸçœ®ãããšGPUãªãœãŒã¹ãç¡é§é£ãããŠããŸããŸãã
ãã®ããåŠç¿äžã¯ãããã©ãã«ãèµ·ããŸããããã«ããšç¥ãã€ã€ã24æéäœå¶ã§ã¢ãã«ãç£èŠããç°åžžãããã°ããã«å¯ŸåŠããå¿
èŠããããŸããã
粟床ãšé床ã®ãã¬ãŒããªã
loss spikeãnan errorã®åå ã¯è€åçã§ãããèšç®é床ã®åäžã®ããã«çšãããããfp16ããšããããŒã¿åœ¢åŒãåé¡èŠãããããšãå€ãã§ãã
ã³ã³ãã¥ãŒã¿ã¯ãæ°å€ã2鲿°ã§æ±ããŸãããã䜿ãããããŒã¿åœ¢åŒãšããŠã¯ã32ãããã®ãfp32ããšã16ãããã®ãfp16ãããããŸãããããæ°ãå°ãªãæ¹ããã¡ã¢ãªäœ¿çšéãèšç®æéãç¯çŽã§ããŸãã
ãã ããfp16ã¯ç²ŸåºŠãäœããææ°éšã®ã¬ã³ãžãçããããå€ãç¡é倧ã«çºæ£ããŠnan errorãèµ·ããããã®ã§ãã
察çãšããŠã¯ãfp16ãããã¬ã³ãžã®åºãbf16ãfp32ã䜿ãããšãæå¹ãšãããŠããŸããããããæã
ã®å Žåã¯fp16ã䜿ããããåŸãªãäºæ
ãããã€ããããŸããã
äŸãã°ãåŠç¿ã«äœ¿ã£ããã¬ãŒã ã¯ãŒã¯(Megatron-DeepSpeed)ãšã®çžæ§ãæªãã£ãããããŒãžã§ã³ã«ãã£ãŠïœ€fp16ã§ãªããšåããªãæ©èœããã£ããããã®ã§ããfp32ã䜿ãã°ç¢ºå®ã«å®å®ããŸãããèšç®å¹çãèœã¡ãŠããŸããšãããžã¬ã³ãããããŸããã
éçºã«ããã£ãŠã¯ãã©ã€ãã©ãªã®ä»æ§ãŸã§ç²ŸéããŠããå¿
èŠãããããšã宿ããŸããã
3. åŠç¿ããŒã¿ãšå®åã®ã®ã£ãã
æã
ã¯è±èªåŠç¿ããŒã¿ãšããŠãåŠè¡è«æãã³ãŒããWikipediaãªã©ã質ã®é«ãæç« ã倧éã«éããŸãããç¹ã«æ°åŠã®è«æãããããå«ãŸããŠããã®ã§ãããçšåºŠã¯æ°åŒãæ±ããã¢ãã«ãåºæ¥äžããã ãããšæåŸ
ããŠããŸããã
ãšãããèãéããŠã¿ããšãã¢ãã«ã¯1+1ã¯ã§ãããã®ã®ã1+2+3ãªã©ã®ç°¡åãªè¶³ãç®ããæºè¶³ã«ããªããŸããã§ããããã®çµæã«ã¯ããããã«èœèãçŠãåŸãŸããã§ããã
ã©ããããè«æãèªãŸããã ãã§ã¯æ°åŠçãªèœåã¯èº«ã«ã€ããªãããã§ããååæŒç®ããã¹ã¿ãŒãããã«ã¯ããã£ãšç¹åããæŒç¿çšã®ããŒã¿ã»ãããçšæããå¿
èŠãããã®ãããããŸããã
4. ããŒã¯ãã€ã¶ãŒã®çœ
ã¢ãã«ã®åºåã«æ¹è¡ãäžåå«ãŸããŠããªãããšã«æ°ã¥ããã®ã¯ãåŠç¿ãçµãã£ãåŸã®ããšã§ããããããããããæ¹è¡ã³ãŒããç¡èŠããç¶æ
ã§åŠç¿ãé²ããŠããŸã£ãã®ã§ã¯ïŒããèããã ãã§ãé ãçã£çœã«ãªãããã§ããã
ããŒã ã§å·éã«å¯ŸåŠã§ããããšã¯ãæ¬åœã«å¹žãã§ãããäžäººã ã£ãããåŸæãšèªè²¬ã®å¿µã«åãããŠèº«åããåããªããªã£ãŠãããããããŸããã
è²ã
ãšèª¿ã¹ãçµæãåå ã¯Hugging Faceãšããã©ã€ãã©ãªã«ä»å±ãããããŒã¯ãã€ã¶ãŒãšåŒã°ããããã°ã©ã ã®äžå
·åã ãšããããŸããã
å€§èŠæš¡èšèªã¢ãã«ã§ã¯ãåèªããã®ãŸãŸã®åœ¢ã§æ±ãã®ã§ã¯ãªããéšåæååã«åå²ãããããŒã¯ã³ãã«å€æããŠåŠçããŸãããã®å€æãæ
ãã®ãããŒã¯ãã€ã¶ãŒã§ãã
æã
ã䜿ã£ãå€ãããŒãžã§ã³ã®ããŒã¯ãã€ã¶ãŒã«ã¯ãæ¹è¡ã³ãŒããæ£ããåŠçã§ããªããã°ããã£ããããªã®ã§ãã
çµå±ãllm-jpã§å
¬éãããŠããæ°ããããŒã¯ãã€ã¶ãŒã«ä¹ãæããããšã§ãåé¡ãè§£æ¶ããããšãã§ããŸããã
[åèç»å]


5. ãã¡ã€ã³ãã¥ãŒãã³ã°äžã«æ³å®å€ã®ãšã©ãŒ
äºååŠç¿ãšã¯ç°ãªãããã¡ã€ã³ãã¥ãŒãã³ã°ã§ã¯HuggingFaceã®äžè¬çãªã©ã€ãã©ãªã䜿çšããŸããããããã®ã©ã€ãã©ãªã¯ãç§ãã¡èªèº«ãæ¥åžžçã«å©çšããŠããããŠãŒã¶ãŒæ°ãå€ããå®æåºŠãé«ãããã倧ããªåé¡ã¯çºçããªããšäºæ³ããŠããŸããããšããããå®éã«ãã¡ã€ã³ãã¥ãŒãã³ã°ãè¡ã£ãŠã¿ããšãããã£ã¹ã¯å®¹éãäžè¶³ããŠããŸãïŒno space left on deviceïŒããšãããšã©ãŒãé »çºããã®ã§ãããã£ã¹ã¯å®¹éèªäœã¯æ°TB以äžã®äœè£ãããã¯ããªã®ã«ããªãããã®ãšã©ãŒãçºçããŠããŸããŸããã
調æ»ã®çµæããã®ãšã©ãŒã¯ããã°ã©ã ã®å®è¡äžã«å€§éã®äžæãã¡ã€ã«ãçæãããããšãåå ã§ããããšãããããŸããã宿çã«ãããã®ãã¡ã€ã«ãåé€ããå¿
èŠããããŸãããåé€ã®æ¹æ³ããã¡ã€ã«ã®æš©éã«ã€ããŠã工倫ãå¿
èŠã§ããã以äžã®ãããªã³ãã³ãã䜿ã£ãŠãäžæãã¡ã€ã«ãåé€ããããšã§ãåé¡ã解決ããããšãã§ããŸããã
find /var/tmp -maxdepth 1 -user (ãŠãŒã¶ãŒå) -print0 | xargs -0 rm -r
ãã®ãããªãšã©ãŒã¯ãå€§èŠæš¡ãªèšèªã¢ãã«ã®åŠç¿ã«ãããŠã¯çãããããŸãããæ³å®å€ã®åé¡ãçºçããããšãåæã«ãæè»ã«å¯Ÿå¿ããããšãéèŠã ãšå®æããŸããã
ãããã«
å€§èŠæš¡èšèªã¢ãã«ã®åŠç¿ã¯ãæè¡çã«ãã¡ã³ã¿ã«çã«ãããªãã®é£æåºŠã§ãããèšç®ãªãœãŒã¹ã®ç¡é§é£ããæããç¡ç æéãåã£ãŠã¢ãã«ã®é¢åãèŠç¶ããæ¥ã
ã¯ãæ£çŽèšã£ãŠèŸãã£ãã§ãã
ããã§ããå£ãäžã€äžã€ä¹ãè¶ããŠãããã³ã«ã倧ããªåã³ãšéææãå³ããããšãã§ããŸãããGPUã®æ§èœãæå€§éã«åŒãåºãããã®ç¥æµããå°ããã€èº«ã«ã€ããŠããããã«æããŠããŸãã
ãã®çµéšãéããŠãæã
ã¯AIéçºã®é¢çœãã«æ°ã¥ããšãšãã«ãæå
ç«¯ã®æè¡ã«æºãããšã³ãžãã¢ã®å°ãã宿ããŸãããéã®ãã¯å¹³åŠã§ã¯ãããŸãããããããããæ°ããã¢ãã«ã®å¯èœæ§ã远æ±ãç¶ããŠãããããšæããŸãã
ãã®ææã¯ãNEDOïŒåœç«ç ç©¶éçºæ³äººæ°ãšãã«ã®ãŒã»ç£æ¥æè¡ç·åéçºæ©æ§ïŒã®å©æäºæ¥ããã¹ãïŒïŒ§æ å ±éä¿¡ã·ã¹ãã åºç€åŒ·åç ç©¶éçºäºæ¥ãïŒJPNP20017ïŒã®çµæåŸããããã®ã§ãã
æ±äº¬å€§åŠ æŸå°Ÿã»å²©æŸ€ç 究宀ãéå¶ããæŸå°Ÿç LLMã³ãã¥ããã£ã®LLMéçºãããžã§ã¯ã[GENIAC] ã®éçºèšé²ãæ å ±çºä¿¡ã«ãªããŸãã åçš®ãªã³ã¯ã¯ãã¡ã linktr.ee/matsuolab_community
Discussion