Дистрибуирано ΡƒΡ‡Π΅ΡšΠ΅ со Apache MXNet ΠΈ Horovod

ΠŸΡ€Π΅Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π²ΠΎ прСсрСт Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° курсот β€žΠ˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΡΠΊΠΈ ML Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈβ€œ

Дистрибуираната ΠΎΠ±ΡƒΠΊΠ° Π·Π° повСќС ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΡΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ со високи пСрформанси ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ±ΡƒΠΊΠ° Π½Π° ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΡ‚Π΅ Π΄Π»Π°Π±ΠΎΠΊΠΈ нСвронски ΠΌΡ€Π΅ΠΆΠΈ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π° часови ΠΈΠ»ΠΈ Π΄ΡƒΡ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΡˆΡ‚ΠΎ ја ΠΏΡ€Π°Π²ΠΈ ΠΎΠ²Π°Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π·Π° ΠΎΠ±ΡƒΠΊΠ° распространСта Π²ΠΎ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ Π½Π° Π΄Π»Π°Π±ΠΎΠΊΠΎΡ‚ΠΎ ΡƒΡ‡Π΅ΡšΠ΅. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π΄Π° сподСлуваат ΠΈ синхронизираат ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½ΠΈΠ· повСќС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ, ΡˆΡ‚ΠΎ ΠΏΠ°ΠΊ ΠΈΠΌΠ° Π³ΠΎΠ»Π΅ΠΌΠΎ влијаниС Π²Ρ€Π· Сфикасноста Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, корисницитС исто Ρ‚Π°ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π·Π½Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π΄Π° распорСдат скрипта Π·Π° ΠΎΠ±ΡƒΠΊΠ° ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° повСќС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ.

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° Π±Ρ€Π· ΠΈ лСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΠΈΡ€Π°ΡšΠ΅ Π½Π° ΡƒΡ‡Π΅ΡšΠ΅Ρ‚ΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Π΄Π»Π°Π±ΠΎΠΊΠΎ ΡƒΡ‡Π΅ΡšΠ΅ Apache MXNet ΠΈ Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π·Π° дистрибуирана ΡƒΡ‡Π΅ΡšΠ΅ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄. Јасно ќС Π³ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΏΡ€ΠΈΠ΄ΠΎΠ±ΠΈΠ²ΠΊΠΈΡ‚Π΅ ΠΎΠ΄ пСрформанситС Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π½Π° Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΈ ќС ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ скрипта Π·Π° ΠΎΠ±ΡƒΠΊΠ° Π½Π° MXNet Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° дистрибуиран Π½Π°Ρ‡ΠΈΠ½ со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄.

Π¨Ρ‚ΠΎ Π΅ Apache MXNet

Apache MX Net Π΅ Ρ€Π°ΠΌΠΊΠ° Π·Π° Π΄Π»Π°Π±ΠΎΠΊΠΎ ΡƒΡ‡Π΅ΡšΠ΅ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΡˆΡ‚ΠΎ сС користи Π·Π° создавањС, ΠΎΠ±ΡƒΠΊΠ° ΠΈ Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄Π»Π°Π±ΠΎΠΊΠΈ нСвронски ΠΌΡ€Π΅ΠΆΠΈ. MXNet ја апстрахира комплСксноста ΠΏΠΎΠ²Ρ€Π·Π°Π½Π° со ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° нСвронски ΠΌΡ€Π΅ΠΆΠΈ, Π΅ високо пСрформансна ΠΈ скалабилна ΠΈ Π½ΡƒΠ΄ΠΈ API Π·Π° ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈ програмски Ρ˜Π°Π·ΠΈΡ†ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½, C + +, Clojure, Јава, ΠˆΡƒΠ»ΠΈΡ˜Π°, R, Π‘ΠΊΠ°Π»Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.

Дистрибуирана ΠΎΠ±ΡƒΠΊΠ° Π²ΠΎ MXNet со парамСтарски сСрвСр

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π΅Π½ дистрибуиран ΠΌΠΎΠ΄ΡƒΠ» Π·Π° ΡƒΡ‡Π΅ΡšΠ΅ Π²ΠΎ MXNet користи пристап Π½Π° сСрвСр со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈ Π·Π±ΠΈΡ€ Π½Π° сСрвСри Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ сСкој Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ, Π·Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π° ΠΈ Π·Π° ΠΈΡΠΏΡ€Π°ΡœΠ°ΡšΠ΅ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ Π½Π°Π·Π°Π΄ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° слСдната ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°. Π£Ρ‚Π²Ρ€Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈΠΎΡ‚ сооднос Π½Π° сСрвСритС ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π΅ ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ Π·Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅. Ако ΠΈΠΌΠ° само Π΅Π΄Π΅Π½ парамСтарски сСрвСр, ΠΌΠΎΠΆΠ΅ Π΄Π° испаднС Π΄Π΅ΠΊΠ° Π΅ тСсно Π³Ρ€Π»ΠΎ Π²ΠΎ прСсмСткитС. Π‘ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, Π°ΠΊΠΎ сС користат ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ сСрвСри, ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΎΠ΄ ΠΌΠ½ΠΎΠ³Ρƒ Π΄ΠΎ ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ Π·Π°Π³Π»Π°Π²ΠΈ ситС ΠΌΡ€Π΅ΠΆΠ½ΠΈ врски.

Π¨Ρ‚ΠΎ Π΅ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄

Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° дистрибуирана Ρ€Π°ΠΌΠΊΠ° Π·Π° Π΄Π»Π°Π±ΠΎΠΊΠΎ ΡƒΡ‡Π΅ΡšΠ΅ Ρ€Π°Π·Π²ΠΈΠ΅Π½Π° Π²ΠΎ Uber. Π˜ΡΠΊΠΎΡ€ΠΈΡΡ‚ΡƒΠ²Π° Сфикасни Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠ΅Ρ“Ρƒ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈΠΎΡ‚ процСсор ΠΈ вкрстСни јазли, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° NVIDIA (NCCL) ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΎΡ‚ Π·Π° ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΡ€Π°ΠΊΠΈ (MPI) Π·Π° Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π° ΠΈ ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ Π½ΠΈΠ· Π²ΠΎΡ€Π΅Ρ†ΠΈΡ‚Π΅. Ја ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° пропусниот опсСг Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ сС Ρ€Π°Π·ΠΌΠ΅Ρ€ΡƒΠ²Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π΄Π»Π°Π±ΠΎΠΊΠΈ нСвронски ΠΌΡ€Π΅ΠΆΠΈ. Π’ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½ΠΈ Ρ€Π°ΠΌΠΊΠΈ Π·Π° машинско ΡƒΡ‡Π΅ΡšΠ΅, ΠΈΠΌΠ΅Π½ΠΎ MX Net, Tensorflow, Keras ΠΈ PyTorch.

MXNet ΠΈ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°

MXNet сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΏΡ€Π΅ΠΊΡƒ API-Ρ‚ΠΎ Π·Π° дистрибуирано ΡƒΡ‡Π΅ΡšΠ΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄. Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ комуникациски API horovod.broadcast(), horovod.allgather() ΠΈ horovod.allreduce() ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° асинхрони ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ Π½Π° ΠΌΠΎΡ‚ΠΎΡ€ΠΎΡ‚ MXNet, ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ Π·Π° Π·Π°Π΄Π°Ρ‡ΠΈ. На овој Π½Π°Ρ‡ΠΈΠ½, зависноститС ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ прСсмСткитС лСсно сС справуваат со ΠΌΠΎΡ‚ΠΎΡ€ΠΎΡ‚ MXNet Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π·Π°Π³ΡƒΠ±ΠΈΡ‚Π΅ Π½Π° пСрформанситС ΠΏΠΎΡ€Π°Π΄ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Дистрибуиран ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Π²ΠΎ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ horovod.DistributedOptimizer сС ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π° ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π²ΠΎ MXNet, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π³ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° соодвСтнитС Horovod API Π·Π° дистрибуирани Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. Π‘ΠΈΡ‚Π΅ ΠΎΠ²ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° сС транспарСнтни Π·Π° ΠΊΡ€Π°Ρ˜Π½ΠΈΡ‚Π΅ корисници.

Π‘Ρ€Π· ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ€Π·ΠΎ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°Ρ‚Π΅ ΠΌΠ°Π»Π° ΠΊΠΎΠ½Π²ΠΎΠ»ΡƒΡ‚ΠΈΠ²Π½Π° нСвронска ΠΌΡ€Π΅ΠΆΠ° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° MNIST ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ MXNet ΠΈ Horovod Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ MacBook.
ΠŸΡ€Π²ΠΎ, ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ mxnet ΠΈ horovod ΠΎΠ΄ PyPI:

pip install mxnet
pip install horovod

Π—Π°Π±Π΅Π»Π΅ΡˆΠΊΠ°: Π”ΠΎΠΊΠΎΠ»ΠΊΡƒ Π½Π°ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° pip install horovodΠΌΠΎΠΆΠ΅Π±ΠΈ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° MACOSX_DEPLOYMENT_TARGET=10.vvΠΊΠ°Π΄Π΅ vv – ΠΎΠ²Π° Π΅ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° MacOS, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° MacOSX Sierra ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ MACOSX_DEPLOYMENT_TARGET=10.12 ΠΏΠΈΠΏ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° horovod

ΠŸΠΎΡ‚ΠΎΠ° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ OpenMPI ΠΎΡ‚Ρ‚ΡƒΠΊΠ°.

На ΠΊΡ€Π°Ρ˜ΠΎΡ‚, ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ја тСст скриптата mxnet_mnist.py ΠΎΡ‚Ρ‚ΡƒΠΊΠ° ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ΅Ρ‚Π΅ Π³ΠΈ слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π²ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΡ‚ MacBook Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ:

mpirun -np 2 -H localhost:2 -bind-to none -map-by slot python mxnet_mnist.py

Ова ќС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΎΠ±ΡƒΠΊΠ° Π½Π° Π΄Π²Π΅ Ρ˜Π°Π΄Ρ€Π° Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ процСсор. Π˜Π·Π»Π΅Π·ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ слСдниот:

INFO:root:Epoch[0] Batch [0-50] Speed: 2248.71 samples/sec      accuracy=0.583640
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.89 samples/sec      accuracy=0.882812
INFO:root:Epoch[0] Batch [50-100] Speed: 2273.39 samples/sec      accuracy=0.870000

Π”Π΅ΠΌΠΎ Π·Π° ΠΈΠ·Π²Π΅Π΄Π±Π°

Кога Ρ‚Ρ€Π΅Π½ΠΈΡ€Π°Ρ‚Π΅ ΠΌΠΎΠ΄Π΅Π» ResNet50-v1 Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ImageNet Π½Π° 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори со осум ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ стр3.16xΠ³ΠΎΠ»Π΅ΠΌ EC2, сСкој ΠΎΠ΄ Π½ΠΈΠ² содрТи 8 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори NVIDIA Tesla V100 Π½Π° ΠΎΠ±Π»Π°ΠΊΠΎΡ‚ AWS, постигнавмС ΠΏΡ€ΠΎΡ‚ΠΎΠΊ Π½Π° ΠΎΠ±ΡƒΠΊΠ° ΠΎΠ΄ 45000 слики/сСк (Ρ‚.Π΅. Π±Ρ€ΠΎΡ˜ Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ Π²ΠΎ сСкунда). Π’Ρ€Π΅Π½ΠΈΠ½Π³ΠΎΡ‚ Π·Π°Π²Ρ€ΡˆΠΈ Π·Π° 44 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΏΠΎ 90 Π΅ΠΏΠΎΡ…ΠΈ со Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€Π° прСцизност ΠΎΠ΄ 75.7%.

НиС Π³ΠΎ спорСдивмС ΠΎΠ²Π° со дистрибуираниот пристап Π·Π° ΠΎΠ±ΡƒΠΊΠ° Π½Π° MXNet Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° сСрвСри со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° 8, 16, 32 ΠΈ 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори со Π΅Π΄Π΅Π½ парамСтарски сСрвСр ΠΈ однос сСрвСр Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ ΠΎΠ΄ 1 Π΄ΠΎ 1 ΠΈ 2 спрСма 1, соодвСтно. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° Π‘Π»ΠΈΠΊΠ° 1 ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. На y-оската Π»Π΅Π²ΠΎ, Π»Π΅Π½Ρ‚ΠΈΡ‚Π΅ Π³ΠΎ прСтставуваат Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° слики ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΎΠ±ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ сСкунда, Π»ΠΈΠ½ΠΈΠΈΡ‚Π΅ ја Ρ€Π΅Ρ„Π»Π΅ΠΊΡ‚ΠΈΡ€Π°Π°Ρ‚ Сфикасноста Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ (Ρ‚.Π΅. односот Π½Π° вистинската ΠΈ ΠΈΠ΄Π΅Π°Π»Π½Π°Ρ‚Π° пропусност) Π½Π° y-оската Π½Π° дСсната страна. Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΈΠ·Π±ΠΎΡ€ΠΎΡ‚ Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° сСрвСри влијаС Π½Π° Сфикасноста Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅. Ако ΠΈΠΌΠ° само Π΅Π΄Π΅Π½ парамСтарски сСрвСр, Сфикасноста Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΏΠ°Ρ“Π° Π½Π° 38% Π½Π° 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори. Π—Π° Π΄Π° ја постигнСтС истата Сфикасност Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΊΠ°ΠΊΠΎ кај Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΡƒΠ΄Π²ΠΎΠΈΡ‚Π΅ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° сСрвСри Π²ΠΎ однос Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ.

Дистрибуирано ΡƒΡ‡Π΅ΡšΠ΅ со Apache MXNet ΠΈ Horovod
Π‘Π»ΠΈΠΊΠ° 1. Π‘ΠΏΠΎΡ€Π΅Π΄Π±Π° Π½Π° дистрибуираното ΡƒΡ‡Π΅ΡšΠ΅ со помош Π½Π° MXNet со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΈ со парамСтарски сСрвСр

Π’ΠΎ Π’Π°Π±Π΅Π»Π° 1 ΠΏΠΎΠ΄ΠΎΠ»Ρƒ, ја спорСдувамС ΠΊΠΎΠ½Π΅Ρ‡Π½Π°Ρ‚Π° Ρ†Π΅Π½Π° ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° СкспСримСнти Π½Π° 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори. ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° MXNet со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π½Π°Ρ˜Π΄ΠΎΠ±Ρ€Π° пропусност ΠΏΠΎ најниска Ρ†Π΅Π½Π°.

Дистрибуирано ΡƒΡ‡Π΅ΡšΠ΅ со Apache MXNet ΠΈ Horovod
Π’Π°Π±Π΅Π»Π° 1. Π‘ΠΏΠΎΡ€Π΅Π΄Π±Π° Π½Π° Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ ΠΈ сСрвСр со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ со однос сСрвСр/Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ ΠΎΠ΄ 2 спрСма 1.

Π§Π΅ΠΊΠΎΡ€ΠΈ Π·Π° Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ˜Π°

Π’ΠΎ слСднитС Ρ‡Π΅ΠΊΠΎΡ€ΠΈ, ќС Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΡ†ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ ΠΎΠ΄ дистрибуираната ΠΎΠ±ΡƒΠΊΠ° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ MXNet ΠΈ Horovod. Π—Π° Π΄Π° Π΄ΠΎΠ·Π½Π°Π΅Ρ‚Π΅ повСќС Π·Π° дистрибуираното ΡƒΡ‡Π΅ΡšΠ΅ со MXNet, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ овој пост.

Π§Π΅ΠΊΠΎΡ€ 1

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ кластСр ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… экзСмпляров с MXNet вСрсии 1.4.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΈ Horovod вСрсии 0.16.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ распрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для обучСния Π½Π° GPU. Для Π½Π°ΡˆΠΈΡ… экзСмпляров ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Ubuntu 16.04 Linux, с GPU Driver 396.44, CUDA 9.2, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ cuDNN 7.2.1, ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ‚ΠΎΡ€ NCCL 2.2.13 ΠΈ OpenMPI 3.1.1. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Amazon Deep Learning AMI, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΎΠ²ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сС вСќС ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ инсталирани.

Π§Π΅ΠΊΠΎΡ€ 2

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ја способноста Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со Horovod API Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° скрипта Π·Π° ΠΎΠ±ΡƒΠΊΠ° MXNet. Π‘ΠΊΡ€ΠΈΠΏΡ‚Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ заснована Π½Π° MXNet Gluon API ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи ΠΊΠ°ΠΊΠΎ СдноставСн ΠΎΠ±Ρ€Π°Π·Π΅Ρ†. Π›ΠΈΠ½ΠΈΠΈΡ‚Π΅ со Π·Π°Π΄Π΅Π±Π΅Π»Π΅Π½ΠΈ Π±ΡƒΠΊΠ²ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π°ΠΊΠΎ вСќС ΠΈΠΌΠ°Ρ‚Π΅ соодвСтна скрипта Π·Π° ΠΎΠ±ΡƒΠΊΠ°. Π•Π²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π·Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄:

  • ΠŸΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ Π³ΠΎ контСкстот спорСд Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ‚ Ρ€Π°Π½Π³ Π½Π° Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ (линија 8) Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΎΠ±ΡƒΠΊΠ°Ρ‚Π° сС ΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΎ Ρ˜Π°Π΄Ρ€ΠΎ.
  • ΠŸΡ€Π΅Π½Π΅ΡΠ΅Ρ‚Π΅ Π³ΠΈ ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ Π½Π° ситС (линија 18) Π·Π° Π΄Π° сС осигуратС Π΄Π΅ΠΊΠ° ситС Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Π°Ρ‚ со иститС ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.
  • НаправСтС Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ DistributedOptimizer (линија 25) Π·Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° дистрибуиран Π½Π°Ρ‡ΠΈΠ½.

Π—Π° Π΄Π° ја Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ цСлосната скрипта, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π³ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Horovod-MXNet МНИБВ ΠΈ IMAGEnet.

1  import mxnet as mx
2  import horovod.mxnet as hvd
3
4  # Horovod: initialize Horovod
5  hvd.init()
6
7  # Horovod: pin a GPU to be used to local rank
8  context = mx.gpu(hvd.local_rank())
9
10 # Build model
11 model = ...
12
13 # Initialize parameters
14 model.initialize(initializer, ctx=context)
15 params = model.collect_params()
16
17 # Horovod: broadcast parameters
18 hvd.broadcast_parameters(params, root_rank=0)
19
20 # Create optimizer
21 optimizer_params = ...
22 opt = mx.optimizer.create('sgd', **optimizer_params)
23
24 # Horovod: wrap optimizer with DistributedOptimizer
25 opt = hvd.DistributedOptimizer(opt)
26
27 # Create trainer and loss function
28 trainer = mx.gluon.Trainer(params, opt, kvstore=None)
29 loss_fn = ...
30
31 # Train model
32 for epoch in range(num_epoch):
33    ...

Π§Π΅ΠΊΠΎΡ€ 3

ΠΠ°Ρ˜Π°Π²Π΅Ρ‚Π΅ сС Π½Π° Π΅Π΄Π΅Π½ ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ со дистрибуирана ΠΎΠ±ΡƒΠΊΠ° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° MPI. Π’ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€, дистрибуираната ΠΎΠ±ΡƒΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ†ΠΈ со ΠΏΠΎ 4 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори ΠΈ Π²ΠΊΡƒΠΏΠ½ΠΎ 16 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори Π²ΠΎ кластСрот. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° Бтохастичко ΡΠΏΡƒΡˆΡ‚Π°ΡšΠ΅ Π½Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ (SGD) ќС сС користи со слСднитС Ρ…ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΌΠΈΠ½ΠΈ ΡΠ΅Ρ€ΠΈΡ˜Π°: 256
  • стапка Π½Π° ΡƒΡ‡Π΅ΡšΠ΅: 0.1
  • ΠΌΠΎΠΌΠ΅Π½Ρ‚ΡƒΠΌ: 0.9
  • Ρ€Π°ΡΠΏΠ°Ρ“Π°ΡšΠ΅ Π½Π° Ρ‚Π΅ΠΆΠΈΠ½Π°Ρ‚Π°: 0.0001

Како ΡˆΡ‚ΠΎ скалиравмС ΠΎΠ΄ Π΅Π΄Π΅Π½ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсор Π½Π° 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори, Π»ΠΈΠ½Π΅Π°Ρ€Π½ΠΎ ја скалиравмС стапката Π½Π° ΠΎΠ±ΡƒΠΊΠ° спорСд Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори (ΠΎΠ΄ 0,1 Π·Π° 1 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсор Π΄ΠΎ 6,4 Π·Π° 64 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори), Π΄ΠΎΠ΄Π΅ΠΊΠ° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° слики ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсор Π³ΠΎ Π·Π°Π΄Ρ€ΠΆΠ°Π²ΠΌΠ΅ Π½Π° 256 (ΠΎΠ΄ ΡΠ΅Ρ€ΠΈΡ˜Π° Π½Π° 256 слики Π·Π° 1 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсор Π΄ΠΎ 16 Π·Π° 384 Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° Ρ€Π°ΡΠΏΠ°Ρ“Π°ΡšΠ΅ Π½Π° Ρ‚Π΅ΠΆΠΈΠ½Π°Ρ‚Π° ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΡƒΠΌΠΎΡ‚ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ˜Π° ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡˆΠ΅ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈ процСсори. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΠ²ΠΌΠ΅ мСшана ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½Π° ΠΎΠ±ΡƒΠΊΠ° со Ρ‚ΠΈΠΏΠΎΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ float64 Π·Π° Π½Π°ΠΏΡ€Π΅Π΄ ΠΏΡ€Π΅ΠΌΠΈΠ½ ΠΈ float16 Π·Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ Π·Π° Π΄Π° Π³ΠΈ Π·Π°Π±Ρ€Π·Π°ΠΌΠ΅ прСсмСткитС float32 ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ ΠΎΠ΄ Π³Ρ€Π°Ρ„ΠΈΡ‡ΠΊΠΈΡ‚Π΅ процСсори Π½Π° NVIDIA Tesla.

$ mpirun -np 16 
    -H server1:4,server2:4,server3:4,server4:4 
    -bind-to none -map-by slot 
    -mca pml ob1 -mca btl ^openib 
    python mxnet_imagenet_resnet50.py

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°, Ρ€Π°Π·Π³Π»Π΅Π΄Π°Π²ΠΌΠ΅ скалабилСн пристап Π·Π° ΠΎΠ±ΡƒΠΊΠ° Π·Π° дистрибуирани ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Apache MXNet ΠΈ Horovod. Ја дСмонстриравмС Сфикасноста Π½Π° ΡΠΊΠ°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΈ Скономичноста Π²ΠΎ спорСдба со пристапот Π½Π° сСрвСрот со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ImageNet Π½Π° која бСшС ΠΎΠ±ΡƒΡ‡Π΅Π½ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ‚ ResNet50-v1. Π’ΠΊΠ»ΡƒΡ‡ΠΈΠ²ΠΌΠ΅ ΠΈ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ користитС Π·Π° Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ постоСчка скрипта Π·Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΎΠ±ΡƒΠΊΠ° со повСќС инстанци ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄.

Ако ΡˆΡ‚ΠΎΡ‚ΡƒΠΊΡƒ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π°Ρ‚Π΅ со MXNet ΠΈ Π΄Π»Π°Π±ΠΎΠΊΠΎ ΡƒΡ‡Π΅ΡšΠ΅, ΠΎΠ΄Π΅Ρ‚Π΅ Π½Π° страницата Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° MXNeΠΏΡ€Π²ΠΎ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ MXNet. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, силно ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° ја ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° MXNet Π·Π° 60 ΠΌΠΈΠ½ΡƒΡ‚ΠΈΠ·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅.

Ако вСќС стС Ρ€Π°Π±ΠΎΡ‚Π΅Π»Π΅ со MXNet ΠΈ сакатС Π΄Π° ΠΏΡ€ΠΎΠ±Π°Ρ‚Π΅ дистрибуирано ΡƒΡ‡Π΅ΡšΠ΅ со Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄, Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π³ΠΎ Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΎΠ΄ MXNet ΠΈ слСдСтС Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ МНИБВ ΠΈΠ»ΠΈ IMAGEnet.

*Ρ‚Ρ€ΠΎΡˆΠΎΠΊΠΎΡ‚ сС прСсмСтува Π²Ρ€Π· основа Π½Π° саатни стапки AWS Π·Π° EC2 ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ

Π”ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ повСќС Π·Π° курсот β€žΠ˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΡΠΊΠΈ ML Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈβ€œ

Π˜Π·Π²ΠΎΡ€: www.habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π΄ΠΎΠ²Π΅Ρ€Π»ΠΈΠ² хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²ΠΈ со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ сигурСн Π²Π΅Π±-хостинг со DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚Π°, VPS VDS сСрвСри | ProHoster