Verteiltes Trainieren von Deep Learning-Modellen in AzureDistributed training of deep learning models on Azure

Diese Referenzarchitektur zeigt, wie Sie ein verteiltes Training von Deep Learning-Modellen in mehreren Clustern mit GPU-fähigen virtuellen Computern durchführen.This reference architecture shows how to conduct distributed training of deep learning models across clusters of GPU-enabled VMs. Bei dem Szenario handelt es sich zwar um eine Bildklassifizierung, die Lösung kann jedoch auch für andere Deep Learning-Szenarien (etwa für die Segmentierung oder Objekterkennung) generalisiert werden.The scenario is image classification, but the solution can be generalized for other deep learning scenarios such as segmentation and object detection.

Eine Referenzimplementierung für diese Architektur ist auf GitHub verfügbar.A reference implementation for this architecture is available on GitHub.

Architektur für verteiltes Deep Learning

Szenario: Die Klassifizierung von Bildern ist im Bereich des maschinellen Sehens eine weit verbreitete Technik und wird häufig durch Trainieren eines auf dem Faltungsprinzip basierenden neuronalen Netzes (Convolutional Neural Network, CNN) umgesetzt.Scenario: Classifying images is a widely applied technique in computer vision, often tackled by training a convolutional neural network (CNN). Bei besonders umfangreichen Modellen mit großen Datasets kann das Training mit einer einzelnen GPU Wochen oder Monate dauern.For particularly large models with large datasets, the training process can take weeks or months on a single GPU. Manchmal sind die Modelle sogar so groß, dass gar keine sinnvollen Batchgrößen für die GPU möglich sind.In some situations, the models are so large that it's not possible to fit reasonable batch sizes onto the GPU. In solchen Fällen lässt sich die Trainingsdauer mithilfe eines verteilten Trainings verkürzen.Using distributed training in these situations can shorten the training time.

In diesem spezifischen Szenario wird ein ResNet50-CNN-Modell unter Verwendung von Horovod mit dem Imagenet-Dataset sowie mit synthetischen Daten trainiert.In this specific scenario, a ResNet50 CNN model is trained using Horovod on the Imagenet dataset and on synthetic data. In der Referenzimplementierung können Sie sehen, wie diese Aufgabe mithilfe von TensorFlow ausgeführt werden kann.The reference implementation shows how to accomplish this task using TensorFlow.

Für das verteilte Trainieren von Deep Learning-Modellen gibt es verschiedene Möglichkeiten. Hierzu zählen unter anderem Ansätze mit parallelen Daten und parallelem Modell auf der Grundlage von synchronen oder asynchronen Aktualisierungen.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. Das gängigste Szenario ist derzeit der Ansatz mit parallelen Daten und synchronen Aktualisierungen.Currently the most common scenario is data parallel with synchronous updates. Dieser Ansatz lässt sich am einfachsten implementieren und ist in den meisten Fällen ausreichend.This approach is the easiest to implement and is sufficient for most use cases.

Beim verteilten Trainieren mit parallelen Daten und synchronen Aktualisierungen wird das Modell auf n Hardwaregeräten repliziert.In data-parallel distributed training with synchronous updates, the model is replicated across n hardware devices. Ein Minibatch mit Trainingsbeispielen wird auf n Mikrobatches aufgeteilt.A mini-batch of training samples is divided into n micro-batches. Jedes Gerät führt die Vorwärts- und Rückwärtsvorgänge für einen Mikrobatch aus.Each device performs the forward and backward passes for a micro-batch. Nach Abschluss des Prozesses gibt das jeweilige Gerät die Aktualisierungen an die anderen Geräte weiter.When a device finishes the process, it shares the updates with the other devices. Die Werte werden verwendet, um die aktualisierten Gewichtungen des gesamten Minibatchs zu berechnen, und die Gewichtungen werden modellübergreifend synchronisiert.These values are used to calculate the updated weights of the entire mini-batch, and the weights are synchronized across the models. Dieses Szenario wird in diesem GitHub-Repository behandelt.This scenario is covered in the GitHub repository.

Verteiltes Trainieren mit parallelen Daten

Diese Architektur kann auch für den Ansatz mit parallelem Modell und asynchronen Aktualisierungen verwendet werden.This architecture can also be used for model-parallel and asynchronous updates. Beim verteilten Trainieren mit parallelem Modell wird das Modell auf n Hardwaregeräte aufgeteilt, wobei jedes Gerät über einen Teil des Modells verfügt.In model-parallel distributed training, the model is divided across n hardware devices, with each device holding a part of the model. In der einfachsten Implementierung kann jedes Gerät über eine Schicht des Netzwerks verfügen, und Informationen werden während der Vorwärts- und Rückwärtsphase zwischen Geräten ausgetauscht.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. Größere neuronale Netze können zwar auf diese Weise trainiert werden, dies geht jedoch zulasten der Leistung, da Geräte ständig darauf warten, dass andere Geräte entweder die Vorwärts- oder die Rückwärtsphase abschließen.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. Bei einigen erweiterten Techniken wird mithilfe synthetischer Gradienten versucht, dieses Problem zumindest teilweise zu entschärfen.Some advanced techniques try to partially alleviate this issue by using synthetic gradients.

Das Training umfasst folgende Schritte:The steps for training are:

  1. Erstellen von Skripts, die im Cluster ausgeführt werden und Ihr Modell trainieren, und anschließendes Übertragen in den DateispeicherCreate scripts that will run on the cluster and train your model, then transfer them to file storage.

  2. Schreiben der Daten in Blob Storage Premium.Write the data to Premium Blob Storage.

  3. Erstellen Sie einen Azure Machine Learning-Arbeitsbereich.Create an Azure Machine Learning workspace. Dadurch wird auch eine Azure-Containerregistrierung erstellt, um Ihre Docker-Images zu speichern.This will also create an Azure Container Registry to host your Docker Images.

  4. Erstellen eines Azure Machine Learning-GPU-Clusters.Create an Azure Machine Learning GPU Cluster.

  5. Übermitteln von Aufträgen.Submit jobs. Für jeden Auftrag mit eindeutigen Abhängigkeiten wird ein neues Docker-Image erstellt und an Ihre Containerregistrierung gepusht.For each job with unique dependencies, a new Docker image is built and pushed to your container registry. Während der Ausführung nutzt das entsprechende Docker-Image Ihr Skript und führt es aus.During execution, the appropriate Docker image runs and executes your script.

  6. Alle Ergebnisse und Protokolle werden in Azure Blob Storage geschrieben.All the results and logs will be written to Blob storage.

AufbauArchitecture

Diese Architektur umfasst die folgenden Komponenten.This architecture consists of the following components.

Azure Machine Learning Compute bildet das Herzstück dieser Architektur und sorgt für eine bedarfsgerechte Skalierung der Ressourcen.Azure Machine Learning Compute plays the central role in this architecture by scaling resources up and down according to need. Azure Machine Learning Compute ist ein Dienst, der Sie beim Bereitstellen und Verwalten von VM-Clustern unterstützt, beim Planen von Aufträgen, beim Erfassen der Ergebnisse, beim Skalieren der Ressourcen und beim Behandeln von Fehlern.AzureML Compute is a service that helps provision and manage clusters of VMs, schedule jobs, gather results, scale resources,and handle failures. Er unterstützt GPU-fähige virtuelle Computer für Deep Learning-Workloads.It supports GPU-enabled VMs for deep learning workloads.

Blob Storage wird verwendet, um die Protokolle und Ergebnisse zu speichern.Blob storage is used to store the logs and results.

Blob Storage Premium wird verwendet, um die Trainingsdaten zu speichern.Premium Blob storage is used to store the training data. Blob Storage Premium wird in die Knoten mithilfe des Adapters „blobfuse“ eingebunden.The premium blob storage is mounted in the nodes using blob fuse. Blob Storage Premium bietet eine bessere Leistung als das normale Azure Blob Storage und wird für verteilte Trainingsszenarios empfohlen.Premium blob offers better performance than standard blob and is recommended for distributed training scenarios. Blobfuse greift während der Einbindung auf Caching zurück, damit die Daten lokal gespeichert werden.When mounted blob fuse uses caching so that the data is saved locally. Das bedeutet, dass nach der ersten Epoche alle folgenden Epochen aus dem lokalen Speicher lesen werden. Dabei handelt es sich um die leistungsfähigste Option.This means that after the first epoch subsequent epochs will read from the local storage which is the most performant option.

Container Registry wird verwendet, um das Docker-Image zu speichern, mit dem Azure Machine Learning Compute das Training ausführt.Container Registry is used to store the Docker image that Azure Machine Learning Compute uses to run the training.

Überlegungen zur LeistungPerformance considerations

Azure bietet vier GPU-fähige VM-Typen, die zum Trainieren von Deep Learning-Modellen geeignet sind.Azure provides four GPU-enabled VM types suitable for training deep learning models. Im Anschluss finden Sie Informationen zu den verschiedenen Preisen und zur jeweiligen Geschwindigkeit (in aufsteigender Reihenfolge):They range in price and speed from low to high as follows:

Azure-VM-SerieAzure VM series NVIDIA-GPUNVIDIA GPU
NCNC K80K80
NDND P40P40
NCv2NCv2 P100P100
NCv3NCv3 V100V100

Es empfiehlt sich, das Training zunächst zentral zu skalieren, bevor Sie eine horizontale Skalierung durchführen. Versuchen Sie es also beispielsweise erst mit einer einzelnen V100-Instanz, bevor Sie einen Cluster mit K80-Instanzen verwenden.We recommended scaling up your training before scaling out. For example, try a single V100 before trying a cluster of K80s.

Das folgende Diagramm zeigt die Leistungsunterschiede für verschiedene GPU-Typen auf der Grundlage von Benchmarktests, die mit TensorFlow und Horovod durchgeführt wurden.The following graph shows the performance differences for different GPU types based on benchmarking tests carried out using TensorFlow and Horovod. Das Diagramm zeigt den Durchsatz von 32 GPU-Clustern für verschiedene Modelle mit unterschiedlichen GPU-Typen und MPI-Versionen.The graph shows throughput of 32 GPU clusters across various models, on different GPU types and MPI versions. Die Modelle wurden in TensorFlow 1.9 implementiert.Models were implemented in TensorFlow 1.9

Durchsatzergebnisse für TensorFlow-Modelle in GPU-Clustern

Jede VM-Serie aus der obigen Tabelle verfügt über eine Konfiguration mit InfiniBand.Each VM series shown in the previous table includes a configuration with InfiniBand. Verwenden Sie die InfiniBand-Konfigurationen beim Ausführen von verteilten Trainings, um die Kommunikation zwischen Knoten zu beschleunigen.Use the InfiniBand configurations when you run distributed training, for faster communication between nodes. InfiniBand erhöht außerdem die Skalierungseffizienz des Trainings für die Frameworks, die dafür geeignet sind.InfiniBand also increases the scaling efficiency of the training for the frameworks that can take advantage of it. Ausführliche Informationen finden Sie im Benchmarkvergleich für InfiniBand.For details, see the Infiniband benchmark comparison.

Azure Machine Learning Compute kann Blob Storage zwar mithilfe des Adapters blobfuse einbinden, wir raten jedoch davon ab, Blob Storage auf diese Weise für verteilte Trainings zu verwenden, da die Leistung für den erforderlichen Durchsatz in den meisten Fällen nicht ausreicht.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. Verwenden Sie wie im Architekturdiagramm gezeigt Blob Storage Premium für die Daten.Use Premium Blob for the data as shown in the architecture diagram.

Überlegungen zur SkalierbarkeitScalability considerations

Bei der Skalierungseffizienz des verteilten Trainings werden aufgrund des Zusatzaufwands für das Netzwerk niemals 100 Prozent erreicht: Die Synchronisierung des gesamten Modells zwischen Geräten wird zu einem Engpass.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. Somit eignen sich verteilte Trainings am besten für umfangreiche Modelle, die nicht mit einer sinnvollen Batchgröße auf einer einzelnen GPU trainiert werden können, oder für Probleme, die sich nicht durch eine einfache, parallele Verteilung des Modells lösen lassen.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.

Verteilte Trainings sollten nicht für Hyperparameter-Suchvorgänge verwendet werden.Distributed training is not recommended for running hyperparameter searches. Die Skalierungseffizienz wirkt sich auf die Leistung aus und macht einen verteilten Ansatz weniger effizient als das separate Trainieren mehrerer Modellkonfigurationen.The scaling efficiency affects performance and makes a distributed approach less efficient than training multiple model configurations separately.

Eine Möglichkeit zur Steigerung der Skalierungseffizienz ist die Erhöhung der Batchgröße.One way to increase scaling efficiency is to increase the batch size. Dabei ist jedoch Vorsicht geboten, da die Erhöhung der Batchgröße ohne Anpassung der anderen Parameter letztendlich die Leistung des Modells beeinträchtigen kann.That must be done carefully, however, because increasing the batch size without adjusting the other parameters can hurt the model's final performance.

SpeicheraspektStorage considerations

Beim Trainieren von Deep Learning-Modellen wird oftmals der Speicherort der Daten außer Acht gelassen.When training deep learning models, an often-overlooked aspect is where the data is stored. Ist der Speicher den Anforderungen der GPUs nicht gewachsen, geht dies unter Umständen zulasten der Trainingsleistung.If the storage is too slow to keep up with the demands of the GPUs, training performance can degrade.

Azure Machine Learning Compute unterstützt viele Speicheroptionen.Azure Machine Learning Compute supports many storage options. Für eine optimale Leistung empfehlen wir, dass Sie die Daten lokal auf jeden Knoten herunterladen.For best performance it is advisable that you download the data locally to each node. Dies kann sich jedoch als umständlich erweisen, da alle Knoten die Daten aus Blob Storage herunterladen müssen, was bei dem ImageNet-Dataset mehrere Stunden dauern kann.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. Standardmäßig bindet Azure Machine Learning Speicher ein, sodass die Daten lokal zwischengespeichert werden.By default AzureML mounts storage such that it caches the data locally. Das bedeutet für die Praxis, dass die Daten nach der ersten Epoche aus dem lokalen Speicher gelesen werden.This means in practice that after the first epoch the data is read from local storage. Diese bietet in Kombination mit Blob Storage Premium einen guten Kompromiss zwischen einfacher Verwendung und hoher Leistung.This combined with Premium Blob Storage offers a good compromise between ease of use and performance.

DatenformatData format

Für große Datasets empfiehlt es sich oft, Datenformate wie TFRecords und Parquet zu verwenden, da diese im Vergleich zu mehreren kleinen Imagedateien eine bessere E/A-Leistung bieten.With large datasets it is often advisable to use data formats such as TFRecords and parquet which provide better I/O performance than multiple small image files.

SicherheitshinweiseSecurity considerations

Verschlüsseln von ruhenden und übertragenen DatenEncrypt data at rest and in motion

In Szenarien mit sensiblen Daten müssen ruhende Daten (Daten im Speicher) verschlüsselt werden.In scenarios that use sensitive data, encrypt the data at rest — that is, the data in storage. Bei Datenübertragungen müssen die Daten mithilfe von SSL geschützt werden.Each time data moves from one location to the next, use SSL to secure the data transfer. Weitere Informationen finden Sie im Azure Storage-Sicherheitsleitfaden.For more information, see the Azure Storage security guide.

Schützen von Daten in einem virtuellen NetzwerkSecure data in a virtual network

Bei Produktionsbereitstellungen empfiehlt es sich ggf., den Azure Machine Learning-Cluster in einem Subnetz eines von Ihnen angegebenen virtuellen Netzwerks bereitzustellen.For production deployments, consider deploying the Azure Machine Learning cluster into a subnet of a virtual network that you specify. Dadurch können die Computeknoten im Cluster sicher mit anderen virtuellen Computern oder mit einem lokalen Netzwerk kommunizieren.This allows the compute nodes in the cluster to communicate securely with other virtual machines or with an on-premises network. Sie können auch Dienstendpunkte mit Blobspeicher verwenden, um Zugriff von einem virtuellen Netzwerk aus zu gewähren.You can also use service endpoints with blob storage to grant access from a virtual network.

Aspekte der ÜberwachungMonitoring considerations

Beim Ausführen Ihres Auftrags ist es wichtig, den Fortschritt zu überwachen und zu überprüfen, ob alles wie erwartet funktioniert.While running your job, it's important to monitor the progress and make sure that things are working as expected. Es kann jedoch eine Herausforderung sein, über einen Cluster von aktiven Knoten hinweg zu überwachen.However, it can be a challenge to monitor across a cluster of active nodes.

Im Rahmen von Azure Machine Learning stehen viele Möglichkeiten zur Verfügung, Ihre Experimente zu instrumentieren.Azure Machine Learning offers many ways to instrument your experiments. Die beiden Standarddatenströme „stdout/stderr“ aus Ihren Skripts werden automatisch protokolliert.The stdout/stderr from your scripts are automatically logged. Diese Protokolle werden automatisch mit ihrem Arbeitsbereichsblobspeicher synchronisiert.These logs are automatically synced to your workspace Blob storage. Sie können sich diese Dateien entweder über das Azure-Portal ansehen, oder sie mithilfe des Python SDK oder der Azure Machine Learning-CLI herunterladen oder streamen.You can either view these files through the Azure portal, or download or stream them using the Python SDK or Azure Machine Learning CLI. Wenn Sie Ihre Experimente mithilfe von Tensorboard protokollieren lassen, werden diese Protokolle automatisch synchronisiert, und Sie können direkt auf sie zugreifen oder das Azure Machine Learning SDK verwenden, um sie in eine Tensorboard-Sitzung zu streamen.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.

KostenbetrachtungCost considerations

Verwenden Sie den Azure-Preisrechner, um die voraussichtlichen Kosten zu ermitteln.Use the Azure pricing calculator to estimate costs. Hier finden Sie einige weitere Überlegungen dazu.Here are some other considerations.

Blob Storage PremiumPremium Blob Storage

Bei Blob Storage Premium fallen zwar höhere Datenspeicherkosten an, dafür sind die Transaktionskosten niedriger als bei gespeicherten Daten auf der regulären heißen Ebene.Premium Blob Storage has higher data storage cost, however the transaction cost is lower compared to data stored in the regular Hot tier. Für Workloads mit hohen Transaktionsraten kann Blob Storage Premium daher günstiger sein.So, Premium Blob Storage can be less expensive for workloads with high transaction rates. Weitere Informationen finden Sie auf der Seite mit der Preisübersicht.For more information, see pricing page.

Azure Container RegistryAzure Container Registry

Azure Container Registry ist als Basic, Standard und Premium erhältlich.Azure Container Registry offers Basic, Standard and Premium. Orientieren Sie sich bei der Wahl des Tarifs an Ihren Speicheranforderungen.Choose a tier depending on the storage you need. Verwenden Sie Premium, wenn Sie Georeplikation benötigen oder den Durchsatz für Docker-Pullvorgänge über parallele Knoten hinweg erhöht haben.Choose Premium if you need geo replication, or you enhanced throughput for docker pulls across concurrent nodes. Zusätzlich fallen die üblichen Netzwerkgebühren an.In addition, standard networking charges apply. Weitere Informationen finden Sie auf der Seite mit den Preisen für Azure Container Registry.For more information, see Azure Container Registry pricing.

Azure Machine Learning ComputeAzure Machine Learning Compute

In dieser Architektur ist Azure ML Compute einer der primären Kostentreiber.In this architecture, Azure ML Compute is one of the main cost drivers. Für die Implementierung ist ein Cluster mit GPU-Computeknoten erforderlich, und die ausgewählten VM-Größen können sich auf die Kosten auswirken.The implementation needs a cluster of GPU compute nodes and selected VM sizes can impact cost. Weitere Informationen zu den VM-Größen mit GPUs finden Sie unter Für GPU optimierte VM-Größen sowie in den Preisdetails für virtuelle Computer in Azure.For more information on the VM sizes that include GPUs, see GPU-optimized virtual machine sizes and Azure Virtual Machines Pricing.

Weitere Informationen finden Sie im Microsoft Azure Well-Architected Framework unter Grundsätze der Kostenoptimierung.For more information, see the Cost section in Microsoft Azure Well-Architected Framework.

BereitstellungDeployment

Die Referenzimplementierung dieser Architektur ist auf GitHub verfügbar.The reference implementation of this architecture is available on GitHub. Führen Sie die dort beschriebenen Schritte aus, um ein verteiltes Training von Deep Learning-Modellen in mehreren Clustern mit GPU-fähigen virtuellen Computern durchzuführen.Follow the steps described there to conduct distributed training of deep learning models across clusters of GPU-enabled VMs.

Nächste SchritteNext steps

Diese Architektur gibt ein trainiertes, in Blob Storage gespeichertes Modell aus.The output from this architecture is a trained model that is saved to blob storage. Dieses Modell kann für Echtzeitbewertungen oder für Batchbewertungen operationalisiert werden.You can operationalize this model for either real-time scoring or batch scoring. Weitere Informationen finden Sie in den folgenden Referenzarchitekturen:For more information, see the following reference architectures: