Распределенное обучение моделей глубокого обучения в AzureDistributed training of deep learning models on Azure

В этой эталонной архитектуре демонстрируется выполнение распределенного обучения для моделей глубокого обучения в кластерах виртуальных машин с поддержкой графических процессоров (GPU).This reference architecture shows how to conduct distributed training of deep learning models across clusters of GPU-enabled VMs. За основу взят сценарий классификации изображений, но это решение можно адаптировать к любым сценариям глубокого обучения, таким как сегментация и обнаружение объектов.The scenario is image classification, but the solution can be generalized for other deep learning scenarios such as segmentation and object detection.

Эталонную реализацию для этой архитектуры можно найти на сайте GitHub.A reference implementation for this architecture is available on GitHub.

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

Сценарий. Классификация изображений — широко применяемая методика в компьютерных концепциях, которая часто обучена при помощи расCNNной нейронной сети.Scenario: Image classification is a widely applied technique in computer vision, often tackled by training a convolutional neural network (CNN). Для особо крупных моделей с большими наборами данных процесс такого обучения на одном GPU может занять несколько недель или даже месяцев.For particularly large models with large datasets, the training process can take weeks or months on a single GPU. Иногда модели бывают настолько большими, что не позволяют создать пакет приемлемого размера для выполнения на одном GPU.In some situations, the models are so large that it's not possible to fit reasonable batch sizes onto the GPU. В таких ситуациях распределенное обучение позволяет сократить время обучения.Using distributed training in these situations can shorten the training time.

В этом конкретном сценарии модель RESNET50 CNN обучена с помощью хоровод в наборе данных Imagenet и в искусственных данных.In this specific scenario, a ResNet50 CNN model is trained using Horovod on the Imagenet dataset and on synthetic data. Эталонная реализация показывает, как выполнить эту задачу с помощью TensorFlow.The reference implementation shows how to accomplish this task using TensorFlow.

Существует несколько способов для обучения модели глубокого обучения в распределенном режиме. В них может применяться параллельная обработка по данным или по моделям с синхронным или асинхронным обновлением.There are several ways to train a deep learning model in a distributed fashion, including data-parallel and model-parallel approaches based on synchronous or asynchronous updates. Сейчас самой популярной считается параллельная обработка по данным с синхронным обновлением.Currently the most common scenario is data parallel with synchronous updates. Это самый простой в реализации подход, и его вполне достаточно для большинства вариантов использования.This approach is the easiest to implement and is sufficient for most use cases.

Когда применяется распределенное обучение с параллельной обработкой по данным и синхронным обновлением, модель реплицируется на n аппаратных устройств.In data-parallel distributed training with synchronous updates, the model is replicated across n hardware devices. Мини-пакет образцов для обучения также разделяется на n микропакетов.A mini-batch of training samples is divided into n micro-batches. Затем каждое устройство выполняет прямые и обратные проходы по этим микропакетам.Each device performs the forward and backward passes for a micro-batch. Завершив процесс, устройство передает обновления на другие устройства.When a device finishes the process, it shares the updates with the other devices. Полученные значения используются для обновления весовых коэффициентов для всего мини-пакета с синхронизацией этих коэффициентов между всеми моделями.These values are used to calculate the updated weights of the entire mini-batch, and the weights are synchronized across the models. Этот сценарий описан в репозитории GitHub .This scenario is covered in the GitHub repository.

Распределенное обучение с параллельной обработкой по данным

Эту же архитектуру можно применить для параллельной обработки по моделям и асинхронных обновлений.This architecture can also be used for model-parallel and asynchronous updates. Если распределенное обучение выполняется с параллельной обработкой по моделям, модель разделяется между n аппаратными устройствами, каждому из которых достается определенная часть модели.In model-parallel distributed training, the model is divided across n hardware devices, with each device holding a part of the model. В простейшей реализации каждое устройство содержит слой сети, а данные передаются между устройствами при каждом прямом и обратном проходе.In the simplest implementation, each device may hold a layer of the network, and information is passed between devices during the forward and backwards pass. Так можно обучать даже большие нейронные сети, но эффективность работы при этом снижается, так как устройства постоянно ожидают друг друга на каждом прямом и обратном проходе.Larger neural networks can be trained this way, but at the cost of performance, since devices are constantly waiting for each other to complete either the forward or backwards pass. Существуют дополнительные технологии, позволяющие частично устранить эту проблему с помощью искусственных градиентов.Some advanced techniques try to partially alleviate this issue by using synthetic gradients.

Ниже описана процедура обучения.The steps for training are:

  1. Создайте скрипты, которые будут выполняться в кластере для обучения модели, и передайте их в хранилище файлов.Create scripts that will run on the cluster and train your model, then transfer them to file storage.

  2. Запишите данные в хранилище BLOB-объектов класса Premium.Write the data to Premium Blob Storage.

  3. Создайте рабочую область машинного обучения Azure.Create an Azure Machine Learning workspace. Кроме того, будет создан реестр контейнеров Azure для размещения образов DOCKER.This will also create an Azure Container Registry to host your Docker Images.

  4. Создайте Машинное обучение Azureный кластер GPU.Create an Azure Machine Learning GPU Cluster.

  5. отправки заданий;Submit jobs. Для каждого задания с уникальными зависимостями создается новый образ DOCKER, который помещается в реестр контейнеров.For each job with unique dependencies, a new Docker image is built and pushed to your container registry. Во время выполнения будет запущен соответствующий образ DOCKER и выполнен сценарий.During execution, the appropriate Docker image runs and executes your script.

  6. Все результаты и журналы будут записаны в хранилище BLOB-объектов.All the results and logs will be written to Blob storage.

АрхитектураArchitecture

Архитектура состоит из следующих компонентов.This architecture consists of the following components.

Машинное обучение Azure вычислений играет центральную роль в этой архитектуре путем масштабирования ресурсов в соответствии с нуждами.Azure Machine Learning Compute plays the central role in this architecture by scaling resources up and down according to need. Среда AzureML COMPUTE — это служба, которая помогает подготавливать кластеры виртуальных машин и управлять ими, планировать задания, собирать результаты, масштабировать ресурсы и обрабатывать сбои.AzureML Compute is a service that helps provision and manage clusters of VMs, schedule jobs, gather results, scale resources,and handle failures. Она позволяет использовать виртуальные машины с поддержкой GPU для рабочих нагрузок глубокого обучения.It supports GPU-enabled VMs for deep learning workloads.

Хранилище BLOB-объектов используется для хранения журналов и результатов.Blob storage is used to store the logs and results.

Хранилище BLOB-объектов класса Premium используется для хранения обучающих данных.Premium Blob storage is used to store the training data. Хранилище больших двоичных объектов уровня "Премиум" монтируется в узлах с помощью предохранителя BLOB-объекта.The premium blob storage is mounted in the nodes using blob fuse. Большой двоичный объект Premium обеспечивает лучшую производительность, чем стандартный большой двоичный объект, и рекомендуется для распределенных обучающих сценариев.Premium blob offers better performance than standard blob and is recommended for distributed training scenarios. При подключении предохранителя BLOB-объекта использует кэширование, чтобы данные сохранялись локально.When mounted blob fuse uses caching so that the data is saved locally. Это означает, что после первого эпохи последующие эпохи будут считаться из локального хранилища, что является наиболее подполняющее действием.This means that after the first epoch subsequent epochs will read from the local storage which is the most performant option.

Реестр контейнеров используется для хранения образа DOCKER, который машинное обучение Azure вычислений использует для запуска обучения.Container Registry is used to store the Docker image that Azure Machine Learning Compute uses to run the training.

Рекомендации по производительностиPerformance considerations

Azure предоставляет четыре типа виртуальных машин с поддержкой GPU , пригодных для обучения моделям глубокого обучения.Azure provides four GPU-enabled VM types suitable for training deep learning models. Эти варианты перечислены ниже в порядке увеличения цены и скорости работы.They range in price and speed from low to high as follows:

Серия виртуальных машин AzureAzure VM series GPU NVIDIANVIDIA GPU
NCNC K80K80
NDND P40P40
NCv2NCv2 P100P100
NCv3NCv3 V100V100

Мы рекомендуем масштабировать обучение перед масштабированием. Например, попробуйте один V100, прежде чем пытаться выполнить кластер K80s.We recommended scaling up your training before scaling out. For example, try a single V100 before trying a cluster of K80s.

На следующей диаграмме показаны различия в производительности для различных типов GPU на основе тестов производительности, выполненных с помощью TensorFlow и хоровод.The following graph shows the performance differences for different GPU types based on benchmarking tests carried out using TensorFlow and Horovod. На этой диаграмме представлена пропускная способность кластеров из 32 GPU для нескольких разных моделей, разных типов GPU и версий MPI.The graph shows throughput of 32 GPU clusters across various models, on different GPU types and MPI versions. Все модели были реализованы в TensorFlow версии 1.9.Models were implemented in TensorFlow 1.9

Данные о пропускной способности для моделей TensorFlow в кластерах GPU

Все серии виртуальных машин из приведенной выше таблицы включают конфигурацию с InfiniBand.Each VM series shown in the previous table includes a configuration with InfiniBand. При выполнении распределенного обучения эти конфигурации InfiniBand позволяют ускорить обмен данными между узлами.Use the InfiniBand configurations when you run distributed training, for faster communication between nodes. Также InfiniBand повышает эффективность масштабирования для обучения на тех платформах, которые поддерживают эту технологию.InfiniBand also increases the scaling efficiency of the training for the frameworks that can take advantage of it. Дополнительные сведения см. в статье Сравнение тестов производительностиInfiniBand.For details, see the Infiniband benchmark comparison.

Несмотря на то, что Машинное обучение Azure COMPUTE может подключать хранилище BLOB-объектов с помощью адаптера blobfuse , мы не рекомендуем использовать хранилище BLOB-объектов таким образом для распределенного обучения, поскольку производительность не слишком велика, чтобы большинство вариантов не обрабатывали необходимую пропускную способность.Although Azure Machine Learning Compute can mount Blob storage using the blobfuse adapter, we don't recommend using Blob Storage this way for distributed training, because the performance isn't good enough for the majority of cases to handle the necessary throughput. Используйте большой двоичный объект уровня "Премиум" для данных, как показано на схеме архитектуры.Use Premium Blob for the data as shown in the architecture diagram.

Вопросы масштабируемостиScalability considerations

Эффективность масштабирования при распределенном обучении всегда далека от 100 % из-за значительных издержек на сетевое взаимодействие. Узким местом становится синхронизация всей модели между устройствами.The scaling efficiency of distributed training is always less than 100 percent due to network overhead — syncing the entire model between devices becomes a bottleneck. Это означает, что распределенное обучение лучше всего подходит для больших моделей, для обучения которых на одном GPU невозможно применить пакет приемлемого размера, а также для таких проблем, для решения которых недостаточно простого параллельного распределения модели.Therefore, distributed training is most suited for large models that cannot be trained using a reasonable batch size on a single GPU, or for problems that cannot be addressed by distributing the model in a simple, parallel way.

Мы не рекомендуем применять распределенное обучение для поиска гиперпараметров.Distributed training is not recommended for running hyperparameter searches. Эффективность масштабирования влияет на производительность и снижает эффективность распределенного подхода по сравнению с раздельным обучением нескольких конфигураций модели.The scaling efficiency affects performance and makes a distributed approach less efficient than training multiple model configurations separately.

Для повышения эффективности масштабирования можно увеличить размер пакета.One way to increase scaling efficiency is to increase the batch size. Но соблюдайте при этом осторожность, ведь увеличение размера пакета без корректировки других параметров может значительно снизить итоговую производительность модели.That must be done carefully, however, because increasing the batch size without adjusting the other parameters can hurt the model's final performance.

Рекомендации по работе с хранилищемStorage considerations

При обучении моделей глубокого обучения часто упускают из виду такой аспект, как расположение для хранения данных.When training deep learning models, an often-overlooked aspect is where the data is stored. Если скорость работы хранилища не соответствует требованиям GPU, эффективность обучения будет снижаться.If the storage is too slow to keep up with the demands of the GPUs, training performance can degrade.

Машинное обучение Azure COMPUTE поддерживает множество вариантов хранения.Azure Machine Learning Compute supports many storage options. Для достижения оптимальной производительности рекомендуется загружать данные локально на каждый узел.For best performance it is advisable that you download the data locally to each node. Однако это может быть громоздким, так как все узлы должны загружать данные из хранилища BLOB-объектов, а с помощью набора данных ImageNet это может занять значительное время.However, this can be cumbersome, because all the nodes must download the data from Blob Storage, and with the ImageNet dataset, this can take a considerable amount of time. По умолчанию AzureML монтирует хранилище таким же путем, чтобы данные кэшируются локально.By default AzureML mounts storage such that it caches the data locally. Это означает, что после первого эпохи считывания данных из локального хранилища.This means in practice that after the first epoch the data is read from local storage. В сочетании с хранилищем больших двоичных объектов уровня "Премиум" обеспечивается хороший компромисс между простотой использования и производительностью.This combined with Premium Blob Storage offers a good compromise between ease of use and performance.

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

В больших наборах данных часто рекомендуется использовать такие форматы, как тфрекордс и Parquet , которые обеспечивают лучшую производительность ввода-вывода по сравнению с несколькими небольшими файлами изображений.With large datasets it is often advisable to use data formats such as TFRecords and parquet which provide better IO performance than multiple small image files.

Вопросы безопасностиSecurity considerations

Шифрование данных во время хранения и передачиEncrypt data at rest and in motion

В сценариях с использованием конфиденциальных данных следует шифровать все неактивные (размещенные в хранилище) данные.In scenarios that use sensitive data, encrypt the data at rest — that is, the data in storage. При любых перемещениях данных из одного расположения в другое используйте SSL для безопасной передачи данных.Each time data moves from one location to the next, use SSL to secure the data transfer. Дополнительные сведения см. в разделе с руководством по безопасности службы хранилища Azure.For more information, see the Azure Storage security guide.

Защита данных в виртуальной сетиSecure data in a virtual network

Для рабочих развертываний рассмотрите возможность развертывания Машинное обучение Azure кластера в подсети указанной виртуальной сети.For production deployments, consider deploying the Azure Machine Learning cluster into a subnet of a virtual network that you specify. Это позволит вычислительным узлам в кластере безопасно обмениваться данными с другими виртуальными машинами или с локальной сетью.This allows the compute nodes in the cluster to communicate securely with other virtual machines or with an on-premises network. Вы также можете использовать конечные точки службы с хранилищем BLOB-объектов, чтобы предоставить доступ из виртуальной сети.You can also use service endpoints with blob storage to grant access from a virtual network.

Рекомендации по мониторингуMonitoring considerations

Во время выполнения задания, важно отслеживать ход выполнения и убедиться, что все работает должным образом.While running your job, it's important to monitor the progress and make sure that things are working as expected. Тем не менее, сложно отслеживать кластер активных узлов.However, it can be a challenge to monitor across a cluster of active nodes.

Машинное обучение Azure предлагает множество способов для инструментирования экспериментов.Azure Machine Learning offers many ways to instrument your experiments. Stdout или stderr из скриптов автоматически заносятся в журнал.The stdout/stderr from your scripts are automatically logged. Эти журналы автоматически синхронизируются с хранилищем BLOB-объектов рабочей области.These logs are automatically synced to your workspace Blob storage. Эти файлы можно просмотреть с помощью портал Azure или скачать или передать в поток с помощью пакета SDK для Python или Машинное обучение Azure CLI.You can either view these files through the Azure portal, or download or stream them using the Python SDK or Azure Machine Learning CLI. Если вы регистрируете эксперименты с помощью Tensorboard, эти журналы автоматически синхронизируются, и вы можете получить к ним доступ напрямую или использовать пакет SDK Машинное обучение Azure для потоковой передачи в сеанс Tensorboard.If you log your experiments using Tensorboard, these logs are automatically synced and you can access them directly or use the Azure Machine Learning SDK to stream them to a Tensorboard session.

Развертывание.Deployment

Эталонная реализация этой архитектуры доступна на сайте GitHub.The reference implementation of this architecture is available on GitHub. Описанные здесь шаги позволяют выполнить распределенное обучение моделей глубокого обучения в кластерах виртуальных машин с поддержкой GPU.Follow the steps described there to conduct distributed training of deep learning models across clusters of GPU-enabled VMs.

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

Результатом применения этой архитектуры станет обученная модель, сохраненная в хранилище BLOB-объектов.The output from this architecture is a trained model that is saved to blob storage. Вы можете ввести эту модель в эксплуатацию, чтобы выполнять оценку в реальном времени или в пакетном режиме.You can operationalize this model for either real-time scoring or batch scoring. Дополнительные сведения см. в следующих описаниях эталонных архитектур:For more information, see the following reference architectures: