www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Обучение MXNet - часть 4: распределенное обучение

Дата публикации May 5, 2017

Вчасть 3мы работали сCIFAR-10Набор данных и узнал, как настроить параметры оптимизации. Мы закончили обучение 110-слойной модели ResNext, используя все 4 графических процессораg2.8xlargeэкземпляр ... который занял около 12 часов.

В этой статье я покажу вам, как использовать несколько экземпляров, чтобы значительно ускорить обучение. Пристегнитесь!

Обучение CIFAR-10 на 4 экземплярах и 32 графических процессорах. Читать дальше!

Создание мастер-узла

Мы будем работать сp2.8xlargeслучаи запускаГлубокое обучение AMI,Ubuntu издание, Тем не менее, вы можете легко скопировать это на любой экземпляр EC2 или даже на кучу компьютеров, работающих под вашим столом :)

Давайте начнем. Мы собираемся настроить главный узел так, как нам нравится, и тогда мы будемклонэто добавить больше экземпляров в наш кластер MXNet. Первый шаг - перейти в раздел Marketplace консоли EC2 и найти AMI Deep Learning.

Затем выберите тип экземпляра, который вы хотите использовать. Пожалуйста, помните о стоимости экземпляра: р2,8 будет стоить $ 7,20 в час. Не волнуйтесь, вы можете использоватьлюбой тип экземпляра, поскольку MXNet может использовать либо процессор (ы), либо графический процессор (ы) экземпляра. Очевидно, что экземпляры GPU будут намного быстрее, чем t2.micros :)

Еще несколько кликов, и все готово. Просто убедитесь, чтоSSH портоткрыт и что вы создали новыйпара ключейдля примера (давайте назовем этоec2). Через несколько минут вы можетеSSHв главный узел, используяубунтупользователь (неec2 пользователь).

Включение распределенного обучения в MXNET

По умолчанию распределенное обучение не включено в исходном выпуске, что означает, что нам, вероятно, придется перестраивать MXNet из исходного кода. Если ваша сборка уже включает в себя распределенное обучение, вы можете пропустить этот раздел.

AMI Deep Learning включает источники MXNet: нам просто нужно сделать их своими и обновить их до последней стабильной версии (0.9.5на момент написания).

Затем нам нужно настроить нашварианты сборки, Последний действительно позволяет распределенное обучение.

Теперь мы можем собрать и установить библиотеку. Не нужно добавлять зависимости, так как они уже включены в AMI. Я использую параллельную сборку на 32 ядрах, потому что это то, что имеет p2.8xlarge.

После установки библиотеки рекомендуется выполнить быструю проверку Python.

Хорошо, это выглядит хорошо. Давайте двигаться дальше.

Открытие портов для распределенного обучения

Главный узел и рабочие узлы должны общаться друг с другом, чтобы делитьсянабор данныхтак же какрезультаты обучения, Таким образом, нам нужно изменить конфигурацию нашей группы безопасности, чтобы разрешить это.

Абсолютно простой способ сделать это состоит в том, чтобывсе ПТСсвязь между экземплярами кластера MXNet, то есть экземплярами, использующимита же группа безопасности,

Для этого перейдите в консоль EC2 и отредактируйте входящие правила группы безопасности главного узла. Добавить правило, позволяющеевесь трафик TCPи использовать фактическое имя группы безопасности дляограничиватьИсходный трафик.

Наш экземпляр сейчас готов. Давайте создадим рабочие узлы.

Создание рабочих узлов

Мы собираемся создатьновый AMIна основе мастер-узла. Затем мы будем использовать его для запуска рабочих. Найдите свой экземпляр в консоли EC2 и создайте образ.

Через несколько минут вы увидите новый AMI в разделе «Изображения» консоли EC2. Теперь вы можете использовать его для запуска ваших рабочих узлов.

Ничего сложного здесь нет: выберитетип экземпляра,количествослучаев, которые вы хотели бы запустить (3 в моем случае) ита же группа безопасностив качестве главного узла.

Еще несколько минут, и ваши экземпляры готовы.

Прекрасный. Запишите частные IP-адреса каждого экземпляра, они нам понадобятся через секунду.

Настройка кластера

Давайте войдем в главный узел, перейдем кинструментыкаталог и посмотрите на лаунчер.

Это инструмент, который мы будем использовать для начала обучения на всех узлах (включая главный узел). Это делает две вещи:

  • используя rsync,скопировать набор данныхв/ TMP / mxnetна каждом узле. В качестве альтернативы, мы могли бы избежать этого, поделившись набором данных между узлами с самодельной NFS илиAmazon EFS,
  • используя SSH,запустить скрипт Pythonэто начинает тренироваться. Как видите, доступны другие протоколы, но мы не будем их рассматривать сегодня.

Создание файла hosts

launch.pyнеобходимо, чтобы частный IP-адрес всех узлов (включая главный узел) был объявлен в файле. Это должно выглядеть примерно так.

Настройка SSH

Нам нужен пароль безSSHдоступ между главным узлом и рабочими узлами. Если у вас уже есть это, вы можете пропустить этот раздел.

Мы упростим задачу, создав новую пару ключей на нашем локальном компьютере и распределив ее по кластеру.

ПОЖАЛУЙСТАне используйте повторноec2пара ключей, это плохая практика Кроме того, некоторые из вас могут испытывать желание испечь пару ключей в AMI, чтобы избежать ее распределения во всех экземплярах, но я бы рекомендовал не делать этого, поскольку это означает хранение закрытого ключа на всех узлах, а не только на главном узле. А такжеПересылка агента ssh тоже не очень,

Далее, еще с нашего локального компьютера, мы собираемся скопироватьоткрытый ключко всем узлам (включая главный узел) изакрытый ключтолько к мастер-узлу.

Наконец, на главном узле мы начнемSSH-агенти добавитьmxnetидентичность.

Теперь вы сможете войти в системуот главного узла к каждому рабочему узлу(включая сам главный узел). Пожалуйста, убедитесь, что это работает правильно, прежде чем продолжить.

Если это произойдет, вы готовы тренироваться, приятель :)

Запуск распределенного обучения

Вот волшебная команда: 4 узла перечислены вхостовфайл получит копию набора данных в/ TMP / mxnetс помощьюRsync, Затем мастер-узел запуститtrain_cifar10.pyскрипт на каждом узле, обучающий 110-слойную модель ResNext на всех 8 графических процессорах.

Если вы работаете с экземплярами процессора, просто удалите параметры gpus.

Переменная PS_VERBOSE будет выводить дополнительную информацию. Очень полезно на случай, если что-то пойдет не так;)

Вы можете проверить прогресс, войдя в систему на разных узлах и запустив ‘nvidia-smi -lКомандование.

Так как быстро это? Как я упоминал ранее, для запуска 300 эпох на 4 графических процессорах экземпляра g2.8xlarge потребовалось около 12 часов. Объединенные 32 графических процессора из 4 экземпляров p2.8xarge сделали это в91 минута!

Это8-кратное ускорениечто имеет смысл, так как мы имеемВ 8 раз больше графических процессоров, Я читал об этом, и теперь я вижу это своими глазами:линейное масштабированиеверно! Это заставляет меня хотеть увеличить его до 256 графических процессоров: для этого потребуется всего 16 p2.16xlarge: D

Не в последнюю очередь, мои коллеги Навин Свами и Джозеф Списак написали очень интересныеСообщение блогао том, как автоматизировать большинство этих вещей с помощью AWS CloudFormation. Это определенно стоит прочитать, если вы все запускаете в AWS.

Вот и все на сегодня. Большое спасибо за чтение и за ту дружескую поддержку, которую я получал в последнее время. Это очень много значит для меня!


Следующий:

Часть 5 - Распределенное обучение, выпуск EFS

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map