Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Apache MXNet ΠΈ Horovod

ΠŸΡ€Π΅Π²ΠΎΠ΄ΡŠΡ‚ Π½Π° статията бСшС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π² Π½Π°Π²Π΅Ρ‡Π΅Ρ€ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° курса β€žΠ˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΠ°Π»Π½ΠΎ машинно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²ΡŠΡ€Ρ…Ρƒ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈβ€œ

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° мноТСство високопроизводитСлни изчислитСлни инстанции ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ‚Π΅ дълбоки Π½Π΅Π²Ρ€ΠΎΠ½Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ Π²ΡŠΡ€Ρ…Ρƒ Π³ΠΎΠ»Π΅ΠΌΠΈ количСства Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ сСдмици Π΄ΠΎ часовС ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°Π·ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°Π²Π°Ρ‰Π° Π² практичСскитС прилоТСния Π½Π° Π΄ΡŠΠ»Π±ΠΎΠΊΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΠΊΠ°ΠΊ Π΄Π° сподСлят ΠΈ синхронизират Π΄Π°Π½Π½ΠΈ Π² мноТСство СкзСмпляри, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΡ‚ своя страна ΠΈΠΌΠ° голямо влияниС Π²ΡŠΡ€Ρ…Ρƒ СфСктивността Π½Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. ОсвСн Ρ‚ΠΎΠ²Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ трябва ΡΡŠΡ‰ΠΎ Π΄Π° знаят ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ‚ ΠΎΠ±ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅Π½ скрипт, ΠΊΠΎΠΉΡ‚ΠΎ сС изпълнява Π½Π° Π΅Π΄ΠΈΠ½ СкзСмпляр Π² мноТСство СкзСмпляри.

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π±ΡŠΡ€Π· ΠΈ лСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° разпространСниС Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° дълбоко ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Apache MXNet ΠΈ Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Horovod. Π©Π΅ дСмонстрирамС ясно ΠΏΠΎΠ»Π·ΠΈΡ‚Π΅ ΠΎΡ‚ производитСлността Π½Π° Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Horovod ΠΈ Ρ‰Π΅ дСмонстрирамС ΠΊΠ°ΠΊ Π΄Π° напишСм скрипт Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° MXNet, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ с Horovod.

Какво С Apache MXNet

Apache MX Net Π΅ Ρ€Π°ΠΌΠΊΠ° Π·Π° дълбоко ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° създаванС, ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ внСдряванС Π½Π° дълбоки Π½Π΅Π²Ρ€ΠΎΠ½Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ. MXNet абстрахира слоТността, ΡΠ²ΡŠΡ€Π·Π°Π½Π° с внСдряванСто Π½Π° Π½Π΅Π²Ρ€ΠΎΠ½Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ, Π΅ с висока производитСлност ΠΈ мащабируСмост ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° API Π·Π° популярни Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€. ΠŸΠΈΡ‚ΠΎΠ½, C + +, Clojure, Π―Π²Π°, ДТулия, R, Scala ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² MXNet със ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² MXNet ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. Π’ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ всСки Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° слСдващата итСрация Π½Π° оптимизация. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ Π΅ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ към Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. Ако ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΊΠ°ΠΆΠ΅ тясно място Π² изчислСнията. ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π°ΠΊΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, комуникацията ΠΌΠ½ΠΎΠ³ΠΎ към ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Ρ€ΡŠΡΡ‚ΠΈ всички ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ.

Какво С Horovod

Π₯ΠΎΡ€ΠΎΠ²ΠΎΠ΄ Π΅ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ€Π°ΠΌΠΊΠ° Π·Π° дълбоко ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° Π² Uber. Π’ΠΎΠΉ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ GPU ΠΈ ΠΊΡ€ΡŠΡΡ‚ΠΎΡΠ°Π½ΠΈ възли, ΠΊΠ°Ρ‚ΠΎ NVIDIA Collective Communications Library (NCCL) ΠΈ Message Passing Interface (MPI), Π·Π° Π΄Π° разпространява ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ vore. Π’ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° чСстотната Π»Π΅Π½Ρ‚Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈ сС ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π° Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с дълбоки ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π½Π΅Π²Ρ€ΠΎΠ½Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° няколко популярни Ρ€Π°ΠΌΠΊΠΈ Π·Π° машинно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ MX Net, Tensorflow, Keras ΠΈ PyTorch.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π½Π° MXNet ΠΈ Horovod

MXNet сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° с Horovod Ρ‡Ρ€Π΅Π· API Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² Horovod. API Π·Π° комуникация Π½Π° Horovod horovod.broadcast(), Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄.allgather() ΠΈ Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄.allreduce() Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° асинхронни ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΈ извиквания Π½Π° двигатСля MXNet, ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ зависимоститС Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ комуникация ΠΈ изчислСниС сС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ лСсно ΠΎΡ‚ MXNet двигатСля, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π·Π°Π³ΡƒΠ±ΠΈ Π½Π° производитСлност ΠΏΠΎΡ€Π°Π΄ΠΈ синхронизация. ΠžΠ±Π΅ΠΊΡ‚ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Π² Horovod Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄.DistributedOptimizer Ρ€Π°Π·ΡˆΠΈΡ€ΡΠ²Π° сС Optimizer Π² MXNet, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ API Π½Π° Horovod Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ. Всички Ρ‚Π΅Π·ΠΈ подробности Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ са ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΈ Π·Π° ΠΊΡ€Π°ΠΉΠ½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

Π‘ΡŠΡ€Π· старт

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΎΠ±ΡƒΡ‡Π°Π²Π°Ρ‚Π΅ ΠΌΠ°Π»ΠΊΠ° ΠΊΠΎΠ½Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Π° Π½Π΅Π²Ρ€ΠΎΠ½Π½Π° ΠΌΡ€Π΅ΠΆΠ° Π²ΡŠΡ€Ρ…Ρƒ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ MNIST, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ MXNet ΠΈ Horovod Π½Π° вашия MacBook.
ΠŸΡŠΡ€Π²ΠΎ инсталирайтС mxnet ΠΈ horovod ΠΎΡ‚ PyPI:

pip install mxnet
pip install horovod

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°: Ако срСщнСтС Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° pip инсталиратС Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄ΠΌΠΎΠΆΠ΅ Π±ΠΈ трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° MACOSX_DEPLOYMENT_TARGET=10.vvΠšΡŠΠ΄Π΅Ρ‚ΠΎ vv – Ρ‚ΠΎΠ²Π° Π΅ вСрсията Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° MacOS вСрсия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° MacOSX Sierra Ρ‰Π΅ трябва Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ MACOSX_DEPLOYMENT_TARGET=10.12 пипса инсталационСн Ρ…ΠΎΡ€ΠΎΠ²ΠΎΠ΄

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° инсталирайтС 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 GPU с осСм СкзСмпляра p3.16xголям EC2, всяка ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° 8 Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ процСсора NVIDIA Tesla V100 Π² AWS ΠΎΠ±Π»Π°ΠΊ, постигнахмС пропускатСлна способност Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 45000 44 изобраТСния/сСк (Ρ‚.Π΅. броя Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±ΠΈ Π² сСкунда). ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ Π·Π° 90 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ слСд 75.7 Π΅ΠΏΠΎΡ…ΠΈ с Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π° точност ΠΎΡ‚ XNUMX%.

Π‘Ρ€Π°Π²Π½ΠΈΡ…ΠΌΠ΅ Ρ‚ΠΎΠ²Π° с ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° MXNet Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° 8, 16, 32 ΠΈ 64 GPU с Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΈ ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΡΡŠΡ€Π²ΡŠΡ€ към Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ 1 към 1 ΠΈ 2 към 1. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π½Π° Ρ„ΠΈΠ³ΡƒΡ€Π° 1 ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. На оста y вляво Π»Π΅Π½Ρ‚ΠΈΡ‚Π΅ прСдставляват броя Π½Π° изобраТСнията Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² сСкунда, Π»ΠΈΠ½ΠΈΠΈΡ‚Π΅ отразяват СфСктивността Π½Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ (Ρ‚.Π΅. ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° дСйствитСлната към ΠΈΠ΄Π΅Π°Π»Π½Π°Ρ‚Π° производитСлност) Π½Π° оста y вдясно. ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Π±Ρ€ΠΎΠΉ ΡΡŠΡ€Π²ΡŠΡ€ΠΈ влияС Π²ΡŠΡ€Ρ…Ρƒ СфСктивността Π½Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅. Ако ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, СфСктивността Π½Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅ ΠΏΠ°Π΄Π° Π΄ΠΎ 38% Π½Π° 64 GPU. Π—Π° Π΄Π° постигнСтС ΡΡŠΡ‰Π°Ρ‚Π° СфСктивност Π½Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ Horovod, трябва Π΄Π° ΡƒΠ΄Π²ΠΎΠΈΡ‚Π΅ броя Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ спрямо броя Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈΡ‚Π΅.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Apache MXNet ΠΈ Horovod
Π€ΠΈΠ³ΡƒΡ€Π° 1. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° MXNet с Horovod ΠΈ със ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π° 1 ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ сравнявамС ΠΊΡ€Π°ΠΉΠ½Π°Ρ‚Π° Ρ†Π΅Π½Π° Π½Π° инстанция ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° СкспСримСнти Π½Π° 64 GPU. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° MXNet с Horovod осигурява Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π° производитСлност Π½Π° Π½Π°ΠΉ-ниска Ρ†Π΅Π½Π°.

Π Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Apache MXNet ΠΈ Horovod
Π’Π°Π±Π»ΠΈΡ†Π° 1. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Horovod ΠΈ Parameter Server със ΡΡŠΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΡΡŠΡ€Π²ΡŠΡ€ към Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ 2 към 1.

Π‘Ρ‚ΡŠΠΏΠΊΠΈ Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅

Π’ слСдващитС ΡΡ‚ΡŠΠΏΠΊΠΈ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° ΠΎΡ‚ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° MXNet ΠΈ Horovod. Π—Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с MXNet ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ пост.

Π‘Ρ‚ΡŠΠΏΠΊΠ° 1

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ ΠΎΡ‚ Ρ…ΠΎΠΌΠΎΠ³Π΅Π½Π½ΠΈ СкзСмпляри с MXNet вСрсия 1.4.0 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π° ΠΈ Horovod вСрсия 0.16.0 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π°, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π©Π΅ трябва ΡΡŠΡ‰ΠΎ Π΄Π° инсталиратС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° GPU ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π—Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ Ubuntu 16.04 Linux с GPU Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ 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, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ прост шаблон. Π Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ с ΡƒΠ΄Π΅Π±Π΅Π»Π΅Π½ ΡˆΡ€ΠΈΡ„Ρ‚ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π΅Π½ скрипт Π·Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅. Π•Ρ‚ΠΎ няколко ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π·Π° Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ с Horovod:

  • Π—Π°Π΄Π°ΠΉΡ‚Π΅ контСкста спорСд мСстния Ρ€Π°Π½Π³ Π½Π° Horovod (Ρ€Π΅Π΄ 8), Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΎ ядро.
  • ΠŸΡ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊ към всички (Ρ€Π΅Π΄ 18), Π·Π° Π΄Π° стС сигурни, Ρ‡Π΅ всички Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ с Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π½Π°Ρ‡Π°Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.
  • Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Horovod DistributedOptimizer (Ρ€Π΅Π΄ 25), Π·Π° Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½.

Π—Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ пълния скрипт, Π²ΠΈΠΆΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Horovod-MXNet MNIST ΠΈ 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 GPU Π΄ΠΎ 16 384 Π·Π° 64 GPU). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Π·Π°Ρ‚ΠΈΡ…Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π³Π»ΠΎΡ‚ΠΎ ΠΈ импулса сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ…Π° с ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° броя Π½Π° Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈΡ‚Π΅ процСсори. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ смСсСно ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ float16 Π·Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ float32 Π·Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΈ, Π·Π° Π΄Π° ускорим изчислСнията float16, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈ ΠΎΡ‚ GPU Π½Π° 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. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° смС Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, Π·Π° Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ скрипт, Π·Π° Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ многоинстанционно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Horovod.

Ако Ρ‚Π΅ΠΏΡŠΡ€Π²Π° Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚Π΅ с MXNet ΠΈ Π΄ΡŠΠ»Π±ΠΎΠΊΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π½Π° страницата Π·Π° инсталиранС MXNeΠ·Π° ΠΏΡŠΡ€Π²ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° MXNet. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° силно ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ статията MXNet Π·Π° 60 ΠΌΠΈΠ½ΡƒΡ‚ΠΈΠ·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅.

Ако Π²Π΅Ρ‡Π΅ стС Ρ€Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈ с MXNet ΠΈ искатС Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Horovod, Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΉΡ‚Π΅ Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° Π·Π° инсталиранС Π½Π° Horovod, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΎΡ‚ MXNet ΠΈ слСдвайтС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° MNIST ΠΈΠ»ΠΈ ImageNet.

*Ρ†Π΅Π½Π°Ρ‚Π° сС изчислява Π½Π° Π±Π°Π·Π° почасови ставки AWS Π·Π° СкзСмпляри Π½Π° EC2

НаучСтС ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° курса β€žΠ˜Π½Π΄ΡƒΡΡ‚Ρ€ΠΈΠ°Π»Π½ΠΎ машинно ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²ΡŠΡ€Ρ…Ρƒ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΄Π°Π½Π½ΠΈβ€œ

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€