Распределенное обучение моделей глубокого обучения в Azure

Хранилище BLOB-объектов
Реестр контейнеров
Машинное обучение

В этой эталонной архитектуре демонстрируется выполнение распределенного обучения для моделей глубокого обучения в кластерах виртуальных машин с поддержкой графических процессоров (GPU). Сценарий — классификация изображений, но решение может быть обобщено в других сценариях глубокого обучения, таких как сегментация или обнаружение объектов.

Эталонная реализация для этой архитектуры доступна в GitHub.

Архитектура

Architecture for distributed deep learning

Рабочий процесс

Эта архитектура состоит из следующих служб:

Машинное обучение Azure Вычисление играет центральную роль в этой архитектуре путем увеличения и уменьшения ресурсов в соответствии с необходимостью. Azure ML Compute — это служба, которая помогает подготавливать кластеры виртуальных машин, планировать задания, собирать результаты, масштабировать ресурсы и обрабатывать сбои. Она позволяет использовать виртуальные машины с поддержкой GPU для рабочих нагрузок глубокого обучения.

Хранилище BLOB-объектов уровня "Стандартный" используется для хранения журналов и результатов. Premium хранилище BLOB-объектов используется для хранения обучающих данных и подключается к узлам обучающего кластера с помощью blobfuse. Уровень Premium хранилища BLOB-объектов обеспечивает лучшую производительность, чем уровень "Стандартный" и рекомендуется для распределенных сценариев обучения. При подключении с помощью blobfuse во время первой эпохи данные обучения загружаются на локальные диски обучающего кластера и кэшируются. Для каждой последующей эпохи данные считываются с локальных дисков, что является наиболее эффективной возможностью.

Реестр контейнеров используется для хранения образа Docker, который Машинное обучение Azure вычислительных ресурсов используется для выполнения обучения.

Сведения о сценарии

Сценарий: Классификация изображений — это широко применяемый метод компьютерного зрения, который часто решается путем обучения сверточной нейронной сети (CNN). Для особо крупных моделей с большими наборами данных процесс такого обучения на одном GPU может занять несколько недель или даже месяцев. В некоторых ситуациях модели настолько велики, что разумные размеры пакетов на GPU невозможно. В таких ситуациях распределенное обучение позволяет сократить время обучения.

В этом конкретном сценарии модель RESNet50 CNN обучена с помощью Horovod в наборе данных ImageNet и искусственных данных. Эталонная реализация показывает, как выполнить эту задачу с помощью TensorFlow.

Существует несколько способов для обучения модели глубокого обучения в распределенном режиме. В них может применяться параллельная обработка по данным или по моделям с синхронным или асинхронным обновлением. В настоящее время наиболее распространенным сценарием является параллельное обучение данных с синхронными обновлениями. Это самый простой в реализации подход, и его вполне достаточно для большинства вариантов использования.

Когда применяется распределенное обучение с параллельной обработкой по данным и синхронным обновлением, модель реплицируется на n аппаратных устройств. Мини-пакет образцов для обучения также разделяется на n микропакетов. Затем каждое устройство выполняет прямые и обратные проходы по этим микропакетам. Завершив процесс, устройство передает обновления на другие устройства. Полученные значения используются для обновления весовых коэффициентов для всего мини-пакета с синхронизацией этих коэффициентов между всеми моделями. Этот сценарий рассматривается в связанном GitHub репозитории.

Data-parallel distributed training

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

Ниже описана процедура обучения.

  1. Создайте скрипты, которые будут выполняться в кластере и обучать модель.
  2. Запись обучающих данных в хранилище BLOB-объектов.
  3. Создайте рабочую область машинного обучения Azure. Это также создаст Реестр контейнеров Azure для размещения образов Docker.
  4. Создайте кластер с поддержкой GPU Машинное обучение Azure.
  5. Отправка заданий обучения. Для каждого задания с уникальными зависимостями создается новый образ Docker и отправляется в реестр контейнеров. Во время выполнения соответствующий образ Docker запускается и выполняет скрипт.
  6. Все результаты и журналы записываются в хранилище BLOB-объектов.

Рекомендации по обучению кластера

Azure предоставляет несколько типов виртуальных машин с поддержкой GPU , подходящих для обучения моделей глубокого обучения. Эти варианты перечислены ниже в порядке увеличения цены и скорости работы.

Серия виртуальных машин Azure GPU NVIDIA
NC K80
NDs P40
NCsv2 P100
NCsv3 V100
NDv2 8x V100 (NVLink)
ND A100 v4 8x A100 (NVLink)

Мы рекомендуем увеличить масштаб обучения перед масштабированием. Например, попробуйте одну версию 100, прежде чем попробовать кластер K80s. Аналогичным образом следует рассмотреть возможность использования одного NDv2 вместо восьми NCsv3.

На следующем графике показаны различия производительности для разных типов GPU на основе тестов производительности , выполняемых с помощью TensorFlow и Horovod. На этой диаграмме представлена пропускная способность кластеров из 32 GPU для нескольких разных моделей, разных типов GPU и версий MPI. Все модели были реализованы в TensorFlow версии 1.9.

Throughput results for TensorFlow models on GPU clusters

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

Рекомендации

Память

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

Машинное обучение Azure Compute поддерживает множество вариантов хранения. Для обеспечения оптимальной производительности рекомендуется скачивать данные локально на каждый узел. Однако это может быть громоздким, так как все узлы должны скачивать данные из большого двоичного объекта служба хранилища и с набором данных ImageNet, это может занять значительное время. По умолчанию Azure ML подключает хранилище таким образом, чтобы кэшировать данные локально. На практике это означает, что после первой эпохи данные считываются из локального хранилища. Это в сочетании с Premium служба хранилища BLOB-объектов обеспечивает хороший компромисс между простотой использования и производительностью.

Хотя Машинное обучение Azure вычисление может подключать хранилище BLOB-объектов уровня "Стандартный" с помощью адаптера blobfuse, мы не рекомендуем использовать уровень "Стандартный" для распределенного обучения, так как производительность обычно недостаточно хороша для обработки необходимой пропускной способности. Используйте уровень Premium в качестве хранилища для обучающих данных, как показано на схеме архитектуры выше. Вы также можете обратиться к следующей записи блога о сравнении пропускной способности и задержки между двумя уровнями.

Реестр контейнеров

При подготовке рабочей области Машинное обучение Azure также подготавливается набор зависимых ресурсов — хранилище BLOB-объектов, Key Vault, реестр контейнеров и Аналитика приложений. Кроме того, можно использовать существующие ресурсы Azure и связать их с новой рабочей областью машинного обучения Azure во время ее создания.

По умолчанию подготавливается уровень "Базовый" Реестр контейнеров Azure. Для крупномасштабного глубокого обучения рекомендуется настроить рабочую область для использования реестра контейнеров уровня Premium, так как она обеспечивает значительно более высокую пропускную способность, которая позволяет быстрее извлекать образы Docker между узлами кластера обучения.

Масштабируемость

Эффективность масштабирования распределенного обучения всегда меньше 100 процентов из-за издержек сети— синхронизация всей модели между устройствами становится узким местом. Это означает, что распределенное обучение лучше всего подходит для больших моделей, для обучения которых на одном GPU невозможно применить пакет приемлемого размера, а также для таких проблем, для решения которых недостаточно простого параллельного распределения модели.

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

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

Формат данных

При использовании больших наборов данных часто рекомендуется использовать такие форматы данных, как TFRecords или Petastorm , которые обеспечивают лучшую производительность ввода-вывода, чем несколько небольших файлов изображений.

Безопасность

Использование рабочей области с высоким уровнем влияния на бизнес

В сценариях, использующих конфиденциальные данные, следует рассмотреть вопрос о назначении рабочей области Машинное обучение Azure в качестве высокого уровня влияния на бизнес (HBI), установив для флага hbi_workspace значение true при его создании. Рабочая область с поддержкой HBI, помимо прочего, шифрует локальные временные диски вычислительных кластеров, обеспечивает фильтрацию IP-адресов и уменьшает объем собираемых корпорацией Майкрософт диагностических данных. Дополнительные сведения см. в статье Шифрование данных с помощью службы «Машинное обучение Azure».

Шифрование данных во время хранения и передачи

Шифруйте неактивные конфиденциальные данные, т. е. в хранилище BLOB-объектов. Каждый раз, когда данные перемещаются из одного расположения в другое, используйте ПРОТОКОЛ SSL для защиты передачи данных. Дополнительные сведения см. в руководстве по безопасности службы хранилища Azure.

Защита данных в виртуальной сети

Для рабочих развертываний рассмотрите возможность развертывания кластера Машинное обучение Azure в подсети указанной виртуальной сети. Это позволит вычислительным узлам в кластере безопасно обмениваться данными с другими виртуальными машинами или с локальной сетью. Вы также можете использовать службы или частные конечные точки для всех связанных ресурсов, чтобы предоставить доступ из виртуальной сети.

Наблюдение

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

Машинное обучение Azure предлагает множество способов инструментирования экспериментов. Stdout/stderr из скриптов автоматически регистрируется. Эти журналы автоматически синхронизируются с хранилищем BLOB-объектов рабочей области. Эти файлы можно просмотреть с помощью портал Azure, скачать или выполнить потоковую передачу с помощью пакета SDK для Python или интерфейса командной строки Машинное обучение Azure. Если вы регистрируете эксперименты с помощью Tensorboard, эти журналы автоматически синхронизируются, и вы можете получить к ним доступ напрямую или использовать пакет SDK для Машинное обучение Azure для потоковой передачи в сеанс Tensorboard.

Оптимизация затрат

Используйте калькулятор цен Azure для оценки затрат на выполнение рабочей нагрузки глубокого обучения. Ниже приведены рекомендации по планированию затрат и управлению, относящиеся к Azure ML. Дополнительные сведения см. в разделе "Затраты" в Microsoft Azure Well-Architected Framework.

Хранилище BLOB-объектов класса "Премиум"

Premium служба хранилища BLOB-объектов имеет более высокую стоимость хранения данных, однако стоимость транзакций ниже по сравнению с данными, хранящимися на горячем уровне служба хранилища BLOB-объектов уровня "Стандартный". Таким образом, Premium больших двоичных объектов служба хранилища может быть менее дорогостоящим для рабочих нагрузок с высокой скоростью транзакций. Дополнительные сведения см. на странице с ценами.

Реестр контейнеров Azure

Реестр контейнеров Azure предлагает базовый, стандартный и Premium. Выберите уровень в зависимости от нужного хранилища. Выберите Premium, если требуется георепликация или расширенная пропускная способность для docker извлекает данные между параллельными узлами. Кроме того, применяются стандартные сетевые расходы. Дополнительные сведения см. в разделе Реестр контейнеров Azure цен.

Вычислительная среда Машинного обучения Azure;

В этой архитектуре azure ML Вычисление, скорее всего, является основным драйвером затрат. Для реализации требуется кластер вычислительных узлов GPU, стоимость которых определяется их числом и выбранным размером виртуальной машины. Дополнительные сведения о размерах виртуальных машин, включающих GPU, см. в статье о размерах виртуальных машин, оптимизированных для GPU, и ценах на Azure Виртуальные машины.

Как правило, рабочие нагрузки глубокого обучения выполняются после каждой (нескольких) эпох, чтобы ограничить влияние непредвиденных прерываний обучения. Это можно хорошо связать с возможностью использования низкоприоритетных виртуальных машин для Машинное обучение Azure вычислительных кластеров. Низкоприоритетные виртуальные машины используют избыток емкости Azure с значительно меньшими темпами, однако они могут быть упрежены при увеличении спроса на емкость.

Развертывание этого сценария

Эталонную реализацию для этой архитектуры можно найти на сайте GitHub. Описанные здесь шаги позволяют выполнить распределенное обучение моделей глубокого обучения в кластерах виртуальных машин с поддержкой GPU.

Дальнейшие действия

Вы можете найти следующие полезные ресурсы:

Выходные данные этой архитектуры — это обученная модель, которая сохраняется в хранилище BLOB-объектов. Вы можете ввести эту модель в эксплуатацию, чтобы выполнять оценку в реальном времени или в пакетном режиме. Дополнительные сведения см. в следующих описаниях эталонных архитектур: