Entrenamiento distribuido de modelos de aprendizaje profundo en AzureDistributed training of deep learning models on Azure

Esta arquitectura de referencia muestra cómo llevar a cabo el entrenamiento distribuido de modelos de aprendizaje profundo en clústeres de máquinas virtuales habilitadas para GPU.This reference architecture shows how to conduct distributed training of deep learning models across clusters of GPU-enabled VMs. El escenario es la clasificación de imágenes, pero la solución puede generalizarse para otros escenarios de aprendizaje profundo, como la segmentación y la detección de objetos.The scenario is image classification, but the solution can be generalized for other deep learning scenarios such as segmentation and object detection.

Hay disponible una implementación de referencia de esta arquitectura en GitHub.A reference implementation for this architecture is available on GitHub.

Arquitectura para el aprendizaje profundo distribuido

Escenario: La clasificación de imágenes es una técnica ampliamente utilizada en el campo de la visión artificial, a menudo mediante el entrenamiento de una red neuronal convolucional (CNN).Scenario: Image classification is a widely applied technique in computer vision, often tackled by training a convolutional neural network (CNN). Para modelos especialmente grandes con conjuntos de datos de gran tamaño, el proceso de entrenamiento puede tardar semanas o meses en una sola GPU.For particularly large models with large datasets, the training process can take weeks or months on a single GPU. En algunas situaciones, los modelos son tan grandes que no es posible ajustar tamaños de lotes razonables en la GPU.In some situations, the models are so large that it's not possible to fit reasonable batch sizes onto the GPU. El uso del aprendizaje distribuido en estas situaciones puede reducir el tiempo de entrenamiento.Using distributed training in these situations can shorten the training time.

En este escenario concreto, se entrena un modelo de RESNET50 CNN con horovod en el conjunto de datos Imagenet y en datos sintéticos.In this specific scenario, a ResNet50 CNN model is trained using Horovod on the Imagenet dataset and on synthetic data. La implementación de referencia muestra cómo realizar esta tarea mediante TensorFlow.The reference implementation shows how to accomplish this task using TensorFlow.

Hay varias maneras de entrenar un modelo de aprendizaje profundo de forma distribuida, incluidos los enfoques de datos en paralelo y modelo en paralelo basados en actualizaciones sincrónicas o asincrónicas.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. Actualmente, el escenario más común es el de datos en paralelo con actualizaciones sincrónicas.Currently the most common scenario is data parallel with synchronous updates. Este enfoque es el más sencillo de implementar y es suficiente en la mayoría de los casos.This approach is the easiest to implement and is sufficient for most use cases.

En el entrenamiento distribuido de datos en paralelo con actualizaciones sincrónicas, el modelo se replica en n dispositivos de hardware.In data-parallel distributed training with synchronous updates, the model is replicated across n hardware devices. Un pequeño lote de ejemplos de entrenamiento se divide en n microlotes.A mini-batch of training samples is divided into n micro-batches. Cada dispositivo lleva a cabo los pases hacia adelante y hacia atrás de un microlote.Each device performs the forward and backward passes for a micro-batch. Cuando un dispositivo termina el proceso, comparte las actualizaciones con los demás dispositivos.When a device finishes the process, it shares the updates with the other devices. Estos valores se utilizan para calcular las ponderaciones actualizadas de todo el lote pequeño y las ponderaciones se sincronizan en todos los modelos.These values are used to calculate the updated weights of the entire mini-batch, and the weights are synchronized across the models. Este escenario se trata en el repositorio de GitHub .This scenario is covered in the GitHub repository.

Entrenamiento distribuido de datos en paralelo

Esta arquitectura también puede usarse para actualizaciones asincrónicas y para el enfoque de modelo en paralelo.This architecture can also be used for model-parallel and asynchronous updates. En el entrenamiento distribuido de modelo en paralelo, el modelo se divide en n dispositivos de hardware, con una parte del modelo en cada dispositivo.In model-parallel distributed training, the model is divided across n hardware devices, with each device holding a part of the model. En la implementación más sencilla, cada dispositivo puede contener una capa de la red y se transfiere información entre dispositivos durante el pase hacia adelante y hacia atrás.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. De esta manera se pueden entrenar redes neuronales de mayor tamaño, pero a costa del rendimiento, puesto que los dispositivos están constantemente esperándose entre sí para completar el pase hacia adelante o hacia atrás.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. Algunas técnicas avanzadas intentan mitigar parcialmente este problema mediante el uso de degradados sintéticos.Some advanced techniques try to partially alleviate this issue by using synthetic gradients.

Los pasos del entrenamiento son los siguientes:The steps for training are:

  1. Crear scripts que se ejecutarán en el clúster y entrenarán el modelo; a continuación, transferirlos al almacenamiento de archivos.Create scripts that will run on the cluster and train your model, then transfer them to file storage.

  2. Escriba los datos en el Blob Storage Premium.Write the data to Premium Blob Storage.

  3. Cree un área de trabajo de Azure Machine Learning.Create an Azure Machine Learning workspace. También se creará una Azure Container Registry para hospedar las imágenes de Docker.This will also create an Azure Container Registry to host your Docker Images.

  4. Cree un clúster de GPU Azure Machine Learning.Create an Azure Machine Learning GPU Cluster.

  5. Enviar trabajos.Submit jobs. Para cada trabajo con dependencias únicas, se crea una nueva imagen de Docker y se inserta en el registro de contenedor.For each job with unique dependencies, a new Docker image is built and pushed to your container registry. Durante la ejecución, se ejecuta la imagen de Docker adecuada y se ejecuta el script.During execution, the appropriate Docker image runs and executes your script.

  6. Todos los resultados y registros se escribirán en el almacenamiento de blobs.All the results and logs will be written to Blob storage.

ArquitecturaArchitecture

Esta arquitectura consta de los siguientes componentes.This architecture consists of the following components.

Azure machine learning Compute juega el rol central en esta arquitectura al escalar y reducir verticalmente los recursos según sea necesario.Azure Machine Learning Compute plays the central role in this architecture by scaling resources up and down according to need. AzureML Compute es un servicio que ayuda a aprovisionar y administrar clústeres de máquinas virtuales, programar trabajos, recopilar resultados, escalar recursos y controlar errores.AzureML Compute is a service that helps provision and manage clusters of VMs, schedule jobs, gather results, scale resources,and handle failures. Es compatible con máquinas virtuales habilitadas para GPU para cargas de trabajo de aprendizaje profundo.It supports GPU-enabled VMs for deep learning workloads.

BLOB Storage se usa para almacenar los registros y los resultados.Blob storage is used to store the logs and results.

El almacenamiento de blobs Premium se usa para almacenar los datos de entrenamiento.Premium Blob storage is used to store the training data. El almacenamiento de blobs Premium se monta en los nodos mediante el fusible de blobs.The premium blob storage is mounted in the nodes using blob fuse. El BLOB Premium ofrece un mejor rendimiento que el BLOB estándar y se recomienda para escenarios de aprendizaje distribuido.Premium blob offers better performance than standard blob and is recommended for distributed training scenarios. Cuando el fusible de blobs montado utiliza el almacenamiento en caché para que los datos se guarden localmente.When mounted blob fuse uses caching so that the data is saved locally. Esto significa que, una vez transcurrido el primer tiempo, los tiempos posteriores se leerán desde el almacenamiento local, que es la opción de mayor rendimiento.This means that after the first epoch subsequent epochs will read from the local storage which is the most performant option.

Container Registry se usa para almacenar la imagen de Docker que Azure machine learning proceso usa para ejecutar el entrenamiento.Container Registry is used to store the Docker image that Azure Machine Learning Compute uses to run the training.

Consideraciones sobre rendimientoPerformance considerations

Azure proporciona cuatro tipos de máquinas virtuales habilitadas para GPU para entrenar modelos de aprendizaje profundo.Azure provides four GPU-enabled VM types suitable for training deep learning models. A continuación, se enumeran por precio y velocidad en orden ascendente:They range in price and speed from low to high as follows:

Serie de máquinas virtuales de AzureAzure VM series GPU NVIDIANVIDIA GPU
NCNC K80K80
NDND P40P40
NCv2NCv2 P100P100
NCv3NCv3 V100V100

Se recomienda escalar verticalmente el entrenamiento antes de escalarlo horizontalmente. Por ejemplo, use una única máquina virtual V100 antes de probar un clúster de varias K80.We recommended scaling up your training before scaling out. For example, try a single V100 before trying a cluster of K80s.

En el gráfico siguiente se muestran las diferencias de rendimiento de los distintos tipos de GPU en función de las pruebas comparativas realizadas con TensorFlow y horovod.The following graph shows the performance differences for different GPU types based on benchmarking tests carried out using TensorFlow and Horovod. El gráfico muestra la capacidad de proceso de 32 clústeres de GPU en varios modelos, con diferentes tipos GPU y versiones de MPI.The graph shows throughput of 32 GPU clusters across various models, on different GPU types and MPI versions. Los modelos se implementaron en TensorFlow 1.9.Models were implemented in TensorFlow 1.9

Resultados de la capacidad de proceso de modelos de TensorFlow en clústeres de GPU

Cada serie de máquinas virtuales de la tabla anterior incluye una configuración con InfiniBand.Each VM series shown in the previous table includes a configuration with InfiniBand. Utilice las configuraciones de InfiniBand al ejecutar el entrenamiento distribuido para una comunicación más rápida entre los nodos.Use the InfiniBand configurations when you run distributed training, for faster communication between nodes. InfiniBand también incrementa la eficiencia de escalado del entrenamiento para los marcos que pueden aprovecharlo.InfiniBand also increases the scaling efficiency of the training for the frameworks that can take advantage of it. Para obtener más información, consulte la comparación de las pruebascomparativas de Infiniband.For details, see the Infiniband benchmark comparison.

Aunque Azure Machine Learning proceso puede montar el almacenamiento de blobs mediante el adaptador de blobfuse , no se recomienda usar BLOB Storage de este modo para el entrenamiento distribuido, ya que el rendimiento no es lo suficientemente bueno como para la mayoría de los casos de controlar el rendimiento necesario.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 el BLOB Premium para los datos tal como se muestra en el diagrama de la arquitectura.Use Premium Blob for the data as shown in the architecture diagram.

Consideraciones sobre escalabilidadScalability considerations

La eficiencia de escalado del entrenamiento distribuido siempre es inferior al 100 % debido a la sobrecarga de la red, ya que al sincronizar todo el modelo entre los dispositivos se origina un cuello de botella.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. Por lo tanto, el aprendizaje distribuido es más adecuado para modelos de gran tamaño que no se pueden entrenar con un tamaño de lote razonable en una sola GPU o para problemas que no se pueden resolver distribuyendo el modelo en paralelo de una manera sencilla.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.

El entrenamiento distribuido no se recomienda para ejecutar búsquedas de hiperparámetros.Distributed training is not recommended for running hyperparameter searches. La eficiencia de escalado afecta al rendimiento y hace que un enfoque distribuido resulte menos eficiente que entrenar varias configuraciones del modelo por separado.The scaling efficiency affects performance and makes a distributed approach less efficient than training multiple model configurations separately.

Una manera de mejorar la eficiencia de escalado es aumentar el tamaño del lote.One way to increase scaling efficiency is to increase the batch size. No obstante, esto debe realizarse con cuidado, ya que el aumento del tamaño del lote sin ajustar los demás parámetros puede afectar negativamente al rendimiento final del modelo.That must be done carefully, however, because increasing the batch size without adjusting the other parameters can hurt the model's final performance.

Consideraciones sobre el almacenamientoStorage considerations

Al entrenar modelos de aprendizaje profundo, un aspecto que se suele pasar por alto es dónde se almacenan los datos.When training deep learning models, an often-overlooked aspect is where the data is stored. Si el almacenamiento es demasiado lento para satisfacer la demanda de las GPU, el rendimiento del entrenamiento puede verse afectado negativamente.If the storage is too slow to keep up with the demands of the GPUs, training performance can degrade.

Azure Machine Learning Compute admite muchas opciones de almacenamiento.Azure Machine Learning Compute supports many storage options. Para obtener el mejor rendimiento, es aconsejable que descargue los datos localmente en cada nodo.For best performance it is advisable that you download the data locally to each node. Sin embargo, esto puede ser complicado, porque todos los nodos deben descargar los datos de Blob Storage, y con el conjunto de datos ImageNet, esto puede tardar una cantidad considerable de tiempo.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. De forma predeterminada, AzureML monta el almacenamiento de modo que almacena los datos en caché localmente.By default AzureML mounts storage such that it caches the data locally. Esto significa que, en la práctica, después de la primera época, los datos se leen del almacenamiento local.This means in practice that after the first epoch the data is read from local storage. Esta combinación con Premium Blob Storage ofrece un buen compromiso entre la facilidad de uso y el rendimiento.This combined with Premium Blob Storage offers a good compromise between ease of use and performance.

Formato de datosData format

Con grandes conjuntos de datos, a menudo se recomienda usar formatos de datos como TFRecords y parquet , que proporcionan un mejor rendimiento de e/s que varios archivos de imagen pequeños.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.

Consideraciones sobre la seguridadSecurity considerations

Cifrado de datos en reposo y en movimientoEncrypt data at rest and in motion

En escenarios que utilizan datos confidenciales, cifre los datos en reposo; es decir, los datos almacenados.In scenarios that use sensitive data, encrypt the data at rest — that is, the data in storage. Cada vez que los datos se muevan de una ubicación a la siguiente, use SSL para proteger la transferencia de datos.Each time data moves from one location to the next, use SSL to secure the data transfer. Para obtener más información, consulte la Guía de seguridad de Azure Storage.For more information, see the Azure Storage security guide.

Protección de datos de una red virtualSecure data in a virtual network

En el caso de las implementaciones de producción, considere la posibilidad de implementar el clúster de Azure Machine Learning en una subred de una red virtual que especifique.For production deployments, consider deploying the Azure Machine Learning cluster into a subnet of a virtual network that you specify. Esto permite que los nodos de proceso del clúster se comuniquen de forma segura con otras máquinas virtuales o con una red local.This allows the compute nodes in the cluster to communicate securely with other virtual machines or with an on-premises network. También puede usar puntos de conexión de servicio con almacenamiento de blobs para conceder acceso desde una red virtual.You can also use service endpoints with blob storage to grant access from a virtual network.

Consideraciones sobre supervisiónMonitoring considerations

Mientras se ejecuta el trabajo, es importante supervisar el progreso y asegurarse de que todo funciona según lo previsto.While running your job, it's important to monitor the progress and make sure that things are working as expected. Sin embargo, puede resultar complicado supervisar un clúster de nodos activos.However, it can be a challenge to monitor across a cluster of active nodes.

Azure Machine Learning ofrece muchas maneras de instrumentar los experimentos.Azure Machine Learning offers many ways to instrument your experiments. El stdout/stderr de los scripts se registra automáticamente.The stdout/stderr from your scripts are automatically logged. Estos registros se sincronizan automáticamente con el almacenamiento de blobs del área de trabajo.These logs are automatically synced to your workspace Blob storage. Puede ver estos archivos a través del Azure Portal, o bien descargarlos o transmitirlos mediante el SDK de Python o la CLI de Azure Machine Learning.You can either view these files through the Azure portal, or download or stream them using the Python SDK or Azure Machine Learning CLI. Si registra los experimentos con Tensorboard, estos registros se sincronizan automáticamente y puede acceder a ellos directamente o usar el SDK de Azure Machine Learning para transmitirlos a una sesión de 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.

ImplementaciónDeployment

La implementación de referencia de esta arquitectura está disponible en GitHub.The reference implementation of this architecture is available on GitHub. Siga los pasos descritos ahí para llevar a cabo el entrenamiento distribuido de modelos de aprendizaje profundo en clústeres de máquinas virtuales habilitadas para GPU.Follow the steps described there to conduct distributed training of deep learning models across clusters of GPU-enabled VMs.

Pasos siguientesNext steps

El resultado de esta arquitectura es un modelo entrenado que se guarda en Blob Storage.The output from this architecture is a trained model that is saved to blob storage. Puede utilizar este modelo para puntuación en tiempo real o puntuación de Batch.You can operationalize this model for either real-time scoring or batch scoring. Para más información, consulte las siguientes arquitecturas de referencia:For more information, see the following reference architectures: