РаспрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Apache MXNet ΠΈ Horovod

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ Π² ΠΏΡ€Π΅Π΄Π΄Π²Π΅Ρ€ΠΈΠΈ старта курса Β«ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹ΠΉ ML Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…Β»

РаспрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… экзСмплярах ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя обучСния соврСмСнных Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй Π½Π° большом объСмС Π΄Π°Π½Π½Ρ‹Ρ… с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСдСль Π΄ΠΎ часов ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΈΠ½ΡƒΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ эту Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ обучСния ΠΏΡ€Π΅Π²Π°Π»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π² вопросах практичСского использования Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экзСмплярах, Ρ‡Ρ‚ΠΎ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ большоС влияниС Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Помимо этого, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экзСмплярах ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ быстрый ΠΈ простой способ распрСдСлСнного обучСния с использованиСм ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния Apache MXNet ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° распрСдСлСнного обучСния Horovod. ΠœΡ‹ наглядно ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ прСимущСства Ρ„Ρ€Π΅ΠΉΠΌΡ„ΠΎΡ€ΠΊΠ° Horovod Π² вопросах ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ продСмонстрируСм, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ скрипт MXNet Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π» распрСдСлСнно с Horovod.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Apache MXNet

Apache MXNet – ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания, обучСния ΠΈ развСртывания Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй. MXNet абстрагируСт слоТности, связанныС с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ API для популярных языков программирования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Python, C++, Clojure, Java, Julia, R, Scala ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ….

РаспрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² MXNet с сСрвСром ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ распрСдСлСнного обучСния Π² MXNet ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сСрвСра ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (parameter server). Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π°Π±ΠΎΡ€ сСрвСров ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для сбора Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² с ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°, выполнСния Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²ΠΎΡ€Π΅ΠΊΡ€Π°ΠΌ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ сСрвСров ΠΊ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌ – Π·Π°Π»ΠΎΠ³ эффСктивного ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ. Если сСрвСр ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² всСго ΠΎΠ΄ΠΈΠ½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΡƒΡ‚Ρ‹Π»ΠΎΡ‡Π½Ρ‹ΠΌ Π³ΠΎΡ€Π»Ρ‹ΡˆΠΊΠΎΠΌ Π² ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ вычислСний. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ слишком ΠΌΠ½ΠΎΠ³ΠΎ сСрвСров, Ρ‚ΠΎ связь Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±ΠΈΡ‚ΡŒ всС сСтСвыС соСдинСния.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Horovod

Horovod – ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ распрСдСлСнного Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ обучСния, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π² Uber. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эффСктивныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими GPU ΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ NVIDIA Collective Communications Library (NCCL) ΠΈ Message Passing Interface (MPI) для распрСдСлСния ΠΈ агрСгирования ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΎΡ€Π΅ΠΊΡ€Π°ΠΌΠΈ. Он ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ использованиС пропускной способности сСти ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с модСлями Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй. Π’ настоящСС врСмя ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² машинного обучСния, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ MXNet, Tensorflow, Keras, ΠΈ PyTorch.

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

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

Быстрый старт

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΠ²Π΅Ρ€Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… 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 pip install 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 GPU с восСмью экзСмплярами p3.16xlarge EC2, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит 8 GPU NVIDIA Tesla V100 Π½Π° AWS cloud, ΠΌΡ‹ достигли пропускной способности обучСния 45000 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ/сСк (Ρ‚.Π΅. количСство ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… сэмплов Π² сСкунду). ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΠΎΡΡŒ Π·Π° 44 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ послС 90 эпох с Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π² 75.7%.

ΠœΡ‹ сравнили это с распрСдСлСнным ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ 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 ΠΈ сСрвСром ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ сСрвСров ΠΊ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π°ΠΌ 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

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² свой ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΉ скрипт MXNet Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с API Horovod. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ скрипт Π½Π° основС 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 GPU Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ, ΠΈ с 16 GPU Π² кластСрС ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Ρƒ. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ стохастичСского Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π½ΠΎΠ³ΠΎ спуска (SGD) со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π³ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

  • mini-batch size: 256
  • learning rate: 0.1
  • momentum: 0.9
  • weight decay: 0.0001

По ΠΌΠ΅Ρ€Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ GPU ΠΊ 64 GPU ΠΌΡ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ обучСния Π² соотвСтствии с количСством GPU (ΠΎΡ‚ 0,1 для 1 GPU Π΄ΠΎ 6,4 для 64 GPU), сохраняя ΠΏΡ€ΠΈ этом количСство ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, приходящихся Π½Π° ΠΎΠ΄ΠΈΠ½ GPU, Ρ€Π°Π²Π½Ρ‹ΠΌ 256 (ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² 256 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для 1 GPU Π΄ΠΎ 16 384 для 64 GPU). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ weight decay ΠΈ momentum измСнялись ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ увСличСния числа 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 in 60 minutes, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Если Π²Ρ‹ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с MXNet ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ распрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ с Horovod, Ρ‚ΠΎ заглянитС Π½Π° страницу установки Horovod, собСритС Π΅Π³ΠΎ с MXNet ΠΈ слСдуйтС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ MNIST ΠΈΠ»ΠΈ ImageNet.

*ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ рассчитываСтся Π½Π° основании почасовой ставки AWS для экзСмпляров EC2

Π£Π·Π½Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ курсС Β«ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹ΠΉ ML Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…Β»

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