Träna PyTorch-modell

I den här artikeln beskrivs hur du använder modulen Träna PyTorch-modell i Azure Machine Learning för att träna PyTorch-modeller som DenseNet. Träningen sker när du har definierat en modell och angett dess parametrar och kräver märkta data.

För närvarande stöder Modulen Träna PyTorch-modell både enskild nod och distribuerad träning.

Så här använder du Träna PyTorch-modell

  1. Lägg till DenseNet-modulen eller ResNet i pipelineutkastet i designern.

  2. Lägg till modulen Train PyTorch Model (Träna PyTorch-modell) i pipelinen. Du hittar den här modulen under kategorin Modellträning. Expandera Träna och dra sedan modulen Train PyTorch Model (Träna PyTorch-modell) till din pipeline.

    Anteckning

    Modulen Träna PyTorch-modell är bättre att köra på GPU-typbearbetning för en stor datauppsättning, annars misslyckas pipelinen. Du kan välja beräkning för en specifik modul i den högra rutan i modulen genom att ange Använd andra beräkningsmål.

  3. Till vänster indata bifogar du en ej tränad modell. Koppla träningsdatauppsättningen och valideringsdatamängden till indata i mitten och höger för Train PyTorch Model ( Träna PyTorch-modell).

    För otränad modell måste det vara en PyTorch-modell som DenseNet. Annars kommer en "InvalidModelDirectoryError" att visas.

    För datauppsättningen måste datauppsättningen för träning vara en märkt bildkatalog. Information om hur du hämtar en etiketterad bildkatalog finns i Konvertera till bildkatalog. Om den inte är märkt kommer "NotLabeledDatasetError" att visas.

    Datauppsättningen för träning och validering har samma etikettkategorier, annars kommer en InvalidDatasetError att visas.

  4. För Epoker anger du hur många epoker du vill träna. Hela datamängden itereras i varje epok, som standard 5.

  5. För Batch-storlek anger du hur många instanser som ska tränas i en batch, som standard 16.

  6. För Stegnummer för uppvärmning anger du hur många epoker du vill värme upp träningen, om den inledande inlärningstakten är något för stor för att börja konvergera, som standard 0.

  7. För Inlärningstakt anger du ett värde för inlärningstakten och standardvärdet är 0,001. Inlärningstakten styr storleken på det steg som används i optimeraren som sgd varje gång modellen testas och korrigeras.

    Genom att ange hastigheten mindre testar du modellen oftare, med risk för att du fastnar på en lokal platå. Genom att ställa in hastigheten större kan du konvergera snabbare, med risk för att den sanna minimien förskjuts.

    Anteckning

    Om träningsförlusten blir mindre under träningen, vilket kan bero på för hög inlärningstakt, kan en minskning av inlärningstakten vara till hjälp. För att hålla gradient descent stabil i distribuerad träning beräknas den faktiska inlärningstakten genom att processgruppens batchstorlek är världsstorlek gånger den lr * torch.distributed.get_world_size() för en enda process. Nedslag i polynominlärning tillämpas och kan hjälpa till att få en modell med bättre prestanda.

  8. För Random seed(Slumpmässigt startvärde) kan du ange ett heltalsvärde som ska användas som startvärde. Vi rekommenderar att du använder ett seed om du vill säkerställa reproducerbarhet för experimentet mellan körningar.

  9. För Tålamod anger du hur många epoker som ska avbryta träningen tidigt om valideringsförlusten inte minskar i följd. som standard 3.

  10. För Utskriftsfrekvens anger du utskriftsfrekvensen för träningsloggen över iterationer i varje epok, som standard 10.

  11. Skicka pipelinen. Om datauppsättningen har större storlek tar det en stund och GPU-beräkning rekommenderas.

Distribuerad träning

Vid distribuerad träning delas arbetsbelastningen för att träna en modell upp och delas mellan flera miniprocessorer, så kallade arbetsnoder. Dessa arbetsnoder arbetar parallellt för att påskynda modellträningen. Designern stöder för närvarande distribuerad träning för modulen Träna PyTorch-modell.

Träningstid

Distribuerad träning gör det möjligt att träna på en stor datauppsättning som ImageNet (1 000 klasser, 1,2 miljoner bilder) på bara några timmar genom att träna PyTorch-modellen. I följande tabell visas träningstid och prestanda under träning 50 epoker av Resnet50 på ImageNet från grunden baserat på olika enheter.

Enheter Träningstid Träningsgenomflöde Valideringsprecision topp 1 De 5 främsta valideringsprecisionerna
16 V100 GPU:er 6h22min ~3 200 bilder/sek 68.83% 88.84%
8 V100 GPU:er 12h21min ~1670 bilder/sek 68.84% 88.74%

Klicka på den här modulens måttflik och se diagram för träningsmått, till exempel "Träna bilder per sekund" och "Top 1 accuracy".

Skärmbild som visar träningsmått

Så här aktiverar du distribuerad träning

Om du vill aktivera distribuerad träning för modulen Träna PyTorch-modell kan du ange i Körningsinställningar i den högra rutan i modulen. Endast AML-beräkningskluster stöds för distribuerad träning.

Anteckning

Flera GPU:er krävs för att aktivera distribuerad träning eftersom FÖRL-backend-modulen Träna PyTorch-modell använder behov cuda.

  1. Välj modulen och öppna den högra panelen. Expandera avsnittet Körningsinställningar.

    Skärmbild som visar hur du ställer in distribuerad träning i körningsinställningar

  2. Kontrollera att du har valt AML-beräkning som beräkningsmål.

  3. I avsnittet Resurslayout måste du ange följande värden:

    • Antal noder: Antalet noder i beräkningsmålet som används för träning. Det bör vara mindre än eller lika med Maximalt antal noder i beräkningsklustret. Som standard är det 1, vilket innebär ett jobb med en nod.

    • Antal processer per nod: Antalet processer som utlöses per nod. Det bör vara mindre än eller lika med bearbetningsenheten för din beräkning. Som standard är det 1, vilket innebär ett enskilt processjobb.

    Du kan kontrollera Maximalt antal noder och Bearbetningsenhet för din beräkning genom att klicka på beräkningsnamnet på sidan med beräkningsdetaljer.

    Skärmbild som visar hur du kontrollerar beräkningskluster

Du kan lära dig mer om distribuerad träning i Azure Machine Learning här.

Felsökning för distribuerad träning

Om du aktiverar distribuerad träning för den här modulen kommer det att finnas drivrutinsloggar för varje process. 70_driver_log_0 är för huvudprocessen. Du kan kontrollera drivrutinsloggarna för felinformation för varje process under fliken Outputs+logs (Utdata+loggar) i den högra rutan.

Skärmbild som visar drivrutinsloggen

Om modulen aktiverad distribuerad träning misslyckas utan några 70_driver loggar kan du söka efter 70_mpi_log felinformation.

I följande exempel visas ett vanligt fel, vilket är Att antalet processer per nod är större än bearbetningsenheten för beräkningen.

Skärmbild som visar mpi-loggen

Mer information om felsökning av moduler finns i den här artikeln.

Resultat

När pipelinekörningen är klar ansluter du PyTorch-modellen till Score Image Model(Poängsättning av bildmodell) för att förutsäga värden för nya indataexempel för att använda modellen för bedömning.

Teknisk information

Förväntade indata

Namn Typ Description
Ej tränad modell UntrainedModelDirectory Omtränad modell kräver PyTorch
Datauppsättning för träning ImageDirectory Datauppsättning för träning
Valideringsdatauppsättning ImageDirectory Valideringsdatauppsättning för utvärdering varje epok

Modulparametrar

Name Intervall Typ Standardvärde Description
Epoker > 0 Integer 5 Välj den kolumn som innehåller etikett- eller utfallskolumnen
Batchstorlek > 0 Integer 16 Hur många instanser som ska tränas i en batch
Warmup step number (Uppvärmningsstegnummer) >=0 Integer 0 Hur många epoker som ska värma upp träningen
Inlärningstakt >=double. Epsilon Float 0.1 Den inledande inlärningstakten för optimeringen av Stochastic Gradient Descent.
Slumpmässigt start seed Valfri Integer 1 Start seed för slumptalsgeneratorn som används av modellen.
Tålamod > 0 Integer 3 Hur många epoker att tidigt stoppa träningen
Utskriftsfrekvens > 0 Integer 10 Utskriftsfrekvens för träningslogg över iterationer i varje epok

Utdata

Namn Typ Description
Tränad modell ModelDirectory Tränad modell

Nästa steg

Se uppsättningen moduler som är tillgängliga för Azure Machine Learning.