Gedistribueerde training van deep learning-modellen in Azure

Blob Storage
Container Registry
Machine Learning

Deze referentiearchitectuur laat zien hoe u gedistribueerde training van deep learning-modellen kunt uitvoeren op clusters met VM's met GPU. Het scenario is afbeeldingsclassificatie, maar de oplossing kan worden gegeneraliseerd voor andere deep learning-scenario's, zoals segmentatie of objectdetectie.

Een referentie-implementatie voor deze architectuur is beschikbaar op GitHub.

Architectuur

Architectuurdiagram met gedistribueerde deep learning.

Een Visio-bestand van deze architectuur downloaden.

Werkstroom

Deze architectuur bestaat uit de volgende services:

Azure Machine Learning Compute speelt de centrale rol in deze architectuur door resources naar behoefte omhoog en omlaag te schalen. Azure Machine Learning Compute is een service waarmee u clusters van VM's kunt inrichten en beheren, taken kunt plannen, resultaten kunt verzamelen, resources kunt schalen en fouten kunt afhandelen. Het ondersteunt VM's met GPU voor deep learning-workloads.

Standard Blob Storage wordt gebruikt om de logboeken en resultaten op te slaan. Premium Blob Storage wordt gebruikt voor het opslaan van de trainingsgegevens en wordt gekoppeld aan de knooppunten van het trainingscluster met behulp van blobfuse. De Premium-laag van Blob Storage biedt betere prestaties dan de Standard-laag en wordt aanbevolen voor gedistribueerde trainingsscenario's. Wanneer de trainingsgegevens tijdens het eerste tijdvak worden gekoppeld met behulp van blobfuse, worden ze gedownload naar de lokale schijven van het trainingscluster en in de cache opgeslagen. Voor elk volgend tijdvak worden de gegevens gelezen van de lokale schijven, wat de meest presterende optie is.

Azure Container Registry wordt gebruikt voor het opslaan van de Docker-installatiekopieën die Azure Machine Learning Compute gebruikt om de training uit te voeren.

Onderdelen

  • Azure Machine Learning is een open platform voor het beheren van de ontwikkeling en implementatie van machine learning-modellen op schaal. Het platform ondersteunt veelgebruikte open frameworks en biedt geautomatiseerde featurisatie en selectie van algoritmen. U kunt Machine Learning gebruiken om modellen te implementeren op verschillende doelen, waaronder Azure Container Instances.
  • Azure Blob Storage is een service die deel uitmaakt van Azure Storage. Blob Storage biedt geoptimaliseerde cloudobjectopslag voor grote hoeveelheden ongestructureerde gegevens.
  • Container Registry is een privéregisterservice in de cloud. U kunt Container Registry gebruiken om persoonlijke Docker-containerinstallatiekopieën en gerelateerde artefacten op te slaan en te beheren.

Scenariodetails

Scenario: Het classificeren van afbeeldingen is een veelgebruikte techniek in Computer Vision, die vaak wordt aangepakt door een convolutioneel neuraal netwerk (CNN) te trainen. Voor bijzonder grote modellen met grote gegevenssets kan het trainingsproces weken of maanden duren op één GPU. In sommige situaties zijn de modellen zo groot dat het niet mogelijk is om redelijke batchgrootten op de GPU te passen. Het gebruik van gedistribueerde training in deze situaties kan de trainingstijd verkorten.

In dit specifieke scenario wordt een ResNet50 CNN-model getraind met horovod op de ImageNet-gegevensset en op synthetische gegevens. De referentie-implementatie laat zien hoe u deze taak kunt uitvoeren met behulp van TensorFlow.

Er zijn verschillende manieren om een deep learning-model op een gedistribueerde manier te trainen, waaronder gegevensparallel en modelparallel benaderingen die zijn gebaseerd op synchrone of asynchrone updates. Momenteel is het meest voorkomende scenario gegevensparallel trainen met synchrone updates. Deze aanpak is het eenvoudigst te implementeren en is voldoende voor de meeste use cases.

In gegevens parallel gedistribueerde training met synchrone updates wordt het model gerepliceerd op n hardwareapparaten. Een mini-batch met trainingsvoorbeelden is onderverdeeld in n microbatches. Elk apparaat voert voorwaartse en achterwaartse passes uit voor een microbatch. Wanneer een apparaat het proces heeft voltooid, worden de updates gedeeld met de andere apparaten. Deze waarden worden gebruikt om de bijgewerkte gewichten van de hele minibatch te berekenen en de gewichten worden gesynchroniseerd tussen de modellen. Dit scenario wordt behandeld in de bijbehorende GitHub-opslagplaats .

Gegevens parallel gedistribueerde training.

Deze architectuur kan ook worden gebruikt voor modelparallel en asynchrone updates. Bij model parallel gedistribueerde training is het model verdeeld over n hardwareapparaten, waarbij elk apparaat een deel van het model bevat. In de eenvoudigste implementatie bevat elk apparaat een laag van het netwerk en wordt informatie tussen apparaten doorgegeven tijdens de voorwaartse en achterwaartse uitvoering. Grotere neurale netwerken kunnen op deze manier worden getraind, maar dit gaat ten koste van de prestaties, omdat apparaten voortdurend op elkaar wachten om de voorwaartse of achterwaartse pass te voltooien. Sommige geavanceerde technieken proberen dit probleem gedeeltelijk te verhelpen met behulp van synthetische kleurovergangen.

De stappen voor training zijn:

  1. Maak scripts die worden uitgevoerd op het cluster en train uw model.
  2. Trainingsgegevens schrijven naar Blob Storage.
  3. Een Machine Learning-werkruimte maken. Met deze stap maakt u ook een exemplaar van Container Registry om uw Docker-installatiekopieën te hosten.
  4. Maak een cluster met GPU voor Machine Learning.
  5. Trainingstaken verzenden. Voor elke taak met unieke afhankelijkheden wordt een nieuwe Docker-installatiekopie gebouwd en naar uw containerregister gepusht. Tijdens de uitvoering wordt uw script uitgevoerd met de juiste Docker-installatiekopieën.
  6. Alle resultaten en logboeken worden naar Blob Storage geschreven.

Overwegingen voor trainingsclusters

Azure biedt verschillende VM-typen met GPU die geschikt zijn voor het trainen van Deep Learning-modellen. Ze variëren in prijs en snelheid van laag tot hoog als volgt:

Azure VM-serie NVIDIA GPU
NC K80
Nds P40
NCsv2 P100
NCsv3 V100
NDv2 8x V100 (NVLink)
ND A100 v4 8x A100 (NVLink)

We raden u aan uw training omhoog te schalen voordat u uitschaalt. Probeer bijvoorbeeld één V100 voordat u een cluster van K80's probeert. Op dezelfde manier kunt u overwegen om één NDv2 te gebruiken in plaats van acht NCsv3-VM's.

In de volgende grafiek ziet u de prestatieverschillen voor verschillende GPU-typen op basis van benchmarkingtests die worden uitgevoerd met TensorFlow en Horovod. De grafiek toont de doorvoer van 32 GPU-clusters in verschillende modellen, op verschillende GPU-typen en MPI-versies. Modellen zijn geïmplementeerd in TensorFlow 1.9

Doorvoerresultaten voor TensorFlow-modellen op GPU-clusters.

Elke VM-serie die in de vorige tabel wordt weergegeven, bevat een configuratie met InfiniBand. Gebruik de InfiniBand-configuraties wanneer u gedistribueerde training uitvoert, voor snellere communicatie tussen knooppunten. InfiniBand verhoogt ook de schaalefficiëntie van de training voor de frameworks die hiervan kunnen profiteren. Zie de Vergelijking van de Infiniband-benchmark voor meer informatie.

Overwegingen

Deze overwegingen implementeren de pijlers van het Azure Well-Architected Framework, een set richtlijnen die u kunt gebruiken om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.

Storage

Wanneer u deep learning-modellen traint, wordt vaak over het hoofd gezien waar de trainingsgegevens moeten worden opgeslagen. Als de opslag te traag is om aan de eisen van de GPU's te voldoen, kunnen de trainingsprestaties afnemen.

Azure Machine Learning Compute ondersteunt veel opslagopties. Voor de beste prestaties downloadt u de gegevens lokaal naar elk knooppunt. Dit proces kan echter omslachtig zijn, omdat u de gegevens vanuit Blob Storage naar elk knooppunt moet downloaden. Met de ImageNet-gegevensset kan dit proces veel tijd in beslag nemen. Standaard koppelt Machine Learning opslag zodat de gegevens lokaal in de cache worden opgeslagen. Als gevolg hiervan worden de gegevens in de praktijk na het eerste tijdvak gelezen uit de lokale opslag. In combinatie met Premium Blob Storage biedt deze regeling een goede compromis tussen gebruiksgemak en prestaties.

Hoewel Azure Machine Learning Compute Blob Storage in de Standard-laag kan koppelen met behulp van de blobfuse-adapter , raden we u af om de Standard-laag te gebruiken voor gedistribueerde training, omdat de prestaties doorgaans niet goed genoeg zijn om de benodigde doorvoer te verwerken. Gebruik de Premium-laag als opslag voor trainingsgegevens, zoals eerder in het architectuurdiagram is weergegeven. Zie Premium Block Blob Storage - een nieuw prestatieniveau voor een blogbericht met een vergelijking van doorvoer en latentie tussen de twee lagen.

Container Registry

Wanneer een Machine Learning-werkruimte wordt ingericht, wordt ook een set afhankelijke resources (Blob Storage, Key Vault, Container Registry en Application Insights) ingericht. U kunt ook bestaande Azure-resources gebruiken en deze tijdens het maken van de nieuwe Machine Learning-werkruimte koppelen.

Container Registry in de Basic-laag is standaard ingericht. Voor grootschalige deep learning raden we u aan uw werkruimte aan te passen voor het gebruik van Container Registry in de Premium-laag. Het biedt een aanzienlijk hogere bandbreedte waarmee u snel Docker-installatiekopieën kunt ophalen over knooppunten van uw trainingscluster.

Gegevensindeling

Bij grote gegevenssets is het vaak raadzaam om gegevensindelingen zoals TFRecords of Petastorm te gebruiken die betere I/O-prestaties bieden dan meerdere kleine afbeeldingsbestanden.

Beveiliging

Beveiliging biedt garanties tegen opzettelijke aanvallen en misbruik van uw waardevolle gegevens en systemen. Zie Overzicht van de beveiligingspijler voor meer informatie.

Een werkruimte met hoge bedrijfsimpact gebruiken

In scenario's waarin gevoelige gegevens worden gebruikt, kunt u overwegen om een Machine Learning-werkruimte aan te wijzen als HBI (High Business Impact) door een hbi_workspace vlag in te stellen op true wanneer u deze maakt. Een werkruimte met HBI-functionaliteit versleutelt onder andere lokale scratchschijven van rekenclusters, maakt IP-filtering mogelijk en vermindert de hoeveelheid diagnostische gegevens die Microsoft verzamelt. Zie Gegevensversleuteling met Azure Machine Learning voor meer informatie.

Data-at-rest en in beweging versleutelen

Gevoelige data-at-rest versleutelen, dat wil gezegd, in de blobopslag. Telkens wanneer gegevens van de ene locatie naar de andere worden verplaatst, gebruikt u SSL om de gegevensoverdracht te beveiligen. Zie Azure Storage Security Guide (Beveiligingshandleiding voor Azure Storage) voor meer informatie.

Gegevens beveiligen in een virtueel netwerk

Voor productie-implementaties kunt u overwegen om het Machine Learning-cluster te implementeren in een subnet van een virtueel netwerk dat u opgeeft. Met deze installatie kunnen de rekenknooppunten in het cluster veilig communiceren met andere virtuele machines of met een on-premises netwerk. U kunt ook service- of privé-eindpunten gebruiken voor alle gekoppelde resources om toegang te verlenen vanuit een virtueel netwerk.

Kostenoptimalisatie

Kostenoptimalisatie gaat over het zoeken naar manieren om onnodige uitgaven te verminderen en de operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.

Gebruik de Azure-prijscalculator om een schatting te maken van de kosten voor het uitvoeren van uw Deep Learning-workload. Zie Kosten voor Azure Machine Learning plannen voor kostenplanning en -beheeroverwegingen die specifiek zijn voor Machine Learning. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.

Premium Blob Storage

Premium Blob Storage heeft hoge kosten voor gegevensopslag, maar de transactiekosten zijn lager dan de kosten voor het opslaan van gegevens in de dynamische laag van Standard Blob Storage. Premium Blob Storage kan dus goedkoper zijn voor workloads met hoge transactiesnelheden. Zie Azure Blob Storage prijzen voor meer informatie.

Container Registry

Container Registry biedt de lagen Basic, Standard en Premium. Kies een laag, afhankelijk van de opslag die u nodig hebt. Kies Premium als u geo-replicatie of verbeterde doorvoer nodig hebt voor Docker-pulls op gelijktijdige knooppunten. Daarnaast zijn er standaard netwerkkosten van toepassing. Zie Azure Container Registry prijzen voor meer informatie.

Azure Machine Learning Compute

In deze architectuur is Azure Machine Learning Compute waarschijnlijk het belangrijkste kostenstuurprogramma. Voor de implementatie is een cluster van GPU-rekenknooppunten vereist. De prijs van deze knooppunten wordt bepaald door het aantal knooppunten en de VM-grootte die u selecteert. Zie VOOR GPU geoptimaliseerde VM-grootten en Prijzen voor Azure Virtual Machines voor meer informatie over de VM-grootten met GPU's.

Deep Learning-workloads volgen doorgaans de voortgang na elk tijdvak of om de paar tijdperken. Deze procedure beperkt de impact van onverwachte onderbrekingen van de training. U kunt deze procedure koppelen met het gebruik van VM's met lage prioriteit voor Machine Learning-rekenclusters. VM's met een lage prioriteit gebruiken overtollige Azure-capaciteit tegen aanzienlijk lagere tarieven, maar ze kunnen worden afgekeerd als de capaciteitsvraag toeneemt.

Operationele uitmuntendheid

Operationele uitmuntendheid omvat de operationele processen die een toepassing implementeren en deze in productie houden. Zie Overzicht van de operationele uitmuntendheidpijler voor meer informatie.

Tijdens het uitvoeren van uw taak is het belangrijk om de voortgang te controleren en ervoor te zorgen dat alles werkt zoals verwacht. Het kan echter een uitdaging zijn om een cluster van actieve knooppunten te bewaken.

Machine Learning biedt veel manieren om uw experimenten te instrumenteren. De stdout- en stderr-streams van uw scripts worden automatisch geregistreerd. Deze logboeken worden automatisch gesynchroniseerd met de blobopslag van uw werkruimte. U kunt deze bestanden bekijken via de Azure Portal of ze downloaden of streamen met behulp van de Python SDK of Machine Learning CLI. Als u uw experimenten registreert met behulp van Tensorboard, worden deze logboeken automatisch gesynchroniseerd. U kunt ze rechtstreeks openen of de Machine Learning-SDK gebruiken om ze naar een Tensorboard-sessie te streamen.

Prestatie-efficiëntie

Prestatie-efficiëntie is de mogelijkheid om op efficiënte wijze uw werkbelasting te schalen om te voldoen aan de vereisten die gebruikers eraan stellen. Zie Overzicht van de pijler Prestatie-efficiëntie voor meer informatie.

De schaalefficiëntie van gedistribueerde training is altijd minder dan 100 procent vanwege netwerkoverhead. Het synchroniseren van het hele model tussen apparaten wordt een knelpunt. Daarom is gedistribueerde training het meest geschikt voor:

  • Grote modellen die niet kunnen worden getraind met behulp van een redelijke batchgrootte op één GPU.
  • Problemen die niet kunnen worden opgelost door het model op een eenvoudige, parallelle manier te distribueren.

Gedistribueerde training wordt niet aanbevolen voor het uitvoeren van zoekopdrachten op hyperparameters. De schaalefficiëntie is van invloed op de prestaties en maakt een gedistribueerde aanpak minder efficiënt dan het afzonderlijk trainen van meerdere modelconfiguraties.

Een manier om de schaalefficiëntie te verhogen, is door de batchgrootte te vergroten. Maar maak deze aanpassing zorgvuldig. Het vergroten van de batchgrootte zonder de andere parameters aan te passen, kan de uiteindelijke prestaties van het model beïnvloeden.

Dit scenario implementeren

De referentie-implementatie van deze architectuur is beschikbaar op GitHub. Volg de stappen die daar worden beschreven om gedistribueerde training van deep learning-modellen uit te voeren in clusters met VM's met GPU.

Medewerkers

Dit artikel wordt onderhouden door Microsoft. Het is oorspronkelijk geschreven door de volgende inzenders.

Hoofdauteurs:

Als u niet-openbare LinkedIn-profielen wilt zien, meldt u zich aan bij LinkedIn.

Volgende stappen

De uitvoer van deze architectuur is een getraind model dat wordt opgeslagen in een blobopslag. U kunt dit model operationeel maken voor realtime scoren of batchgewijs scoren. Zie de volgende referentiearchitecturen voor meer informatie:

Zie de volgende resources voor architecturen die betrekking hebben op gedistribueerde training of deep learning: