Träna PyTorch-modell

Den här artikeln beskriver hur du använder komponenten Train PyTorch Model i Azure Machine Learning-designern 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 Train PyTorch Model-komponenten både enskild nod och distribuerad träning.

Så här använder du Train PyTorch Model

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

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

    Anteckning

    Train PyTorch Model-komponenten körs bättre på GPU-typberäkning för stor datamängd, annars misslyckas pipelinen. Du kan välja beräkning för en specifik komponent i den högra rutan i komponenten genom att ange Använd annat beräkningsmål.

  3. Bifoga en otränad modell till vänster. Koppla träningsdatauppsättningen och valideringsdatauppsättningen till mitten och höger indata för Train PyTorch Model.

    För en otränad modell måste den vara en PyTorch-modell som DenseNet. Annars utlöses "InvalidModelDirectoryError".

    För datauppsättningen måste träningsdatauppsättningen vara en etikett för avbildningskatalogen. Mer information om hur du hämtar en etikett för avbildningskatalog finns i Konvertera till bildkatalog . Om den inte är märkt genereras "NotLabeledDatasetError".

    Träningsdatauppsättningen och valideringsdatauppsättningen har samma etikettkategorier, annars genereras en InvalidDatasetError.

  4. För Epochs 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 Uppvärmningsstegsnummer anger du hur många epoker du vill värma upp träningen, om den inledande inlärningshastigheten är något för stor för att börja konvergera, som standard 0.

  7. För Inlärningsfrekvens anger du ett värde för inlärningsfrekvensen och standardvärdet är 0,001. Inlärningshastigheten styr storleken på steget som används i optimizer som sgd varje gång modellen testas och korrigeras.

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

    Anteckning

    Om träningsförlusten blir nan under träningen, vilket kan orsakas av för stor inlärningshastighet, kan det hjälpa att minska inlärningshastigheten. I distribuerad träning, för att hålla gradient descent stabil, beräknas den faktiska inlärningshastigheten med lr * torch.distributed.get_world_size() eftersom processgruppens batchstorlek är världsstorlekstider för en enskild process. Polynominlärningshastighetens sönderfall tillämpas och kan hjälpa till att resultera i en modell med bättre prestanda.

  8. För Slumpmässigt frö kan du ange ett heltalsvärde som ska användas som startvärde. Vi rekommenderar att du använder ett startvärde om du vill säkerställa experimentets reproducerbarhet mellan jobben.

  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 utskriftsfrekvens för träningsloggar över iterationer i varje epok, som standard 10.

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

Distribuerad träning

I distribuerad träning delas arbetsbelastningen för att träna en modell upp och delas mellan flera miniprocessorer, så kallade arbetsnoder. Dessa arbetsnoder fungerar parallellt för att påskynda modellträningen. Designern stöder för närvarande distribuerad utbildning för train PyTorch Model-komponenten .

Träningstid

Distribuerad träning gör det möjligt att träna på en stor datamängd som ImageNet (1 000 klasser, 1,2 miljoner bilder) på bara flera timmar med Train PyTorch Model. Följande tabell visar träningstid och prestanda under träning 50 epoker av Resnet50 på ImageNet från grunden baserat på olika enheter.

Enheter Träningstid Träningsdataflöde Topp-1-valideringsprecision Top-5 Valideringsprecision
16 V100 GPU:er 6h22min ~3 200 bilder/sekund 68.83% 88.84%
8 V100 GPU:er 12h21min ~1 670 bilder/sekund 68.84% 88.74%

Klicka på den här komponentens fliken Mått och se träningsmåttdiagram, till exempel "Träna bilder per sekund" och "Top 1 accuracy".

Skärmbild som visar träningsmått

Så här aktiverar du distribuerad utbildning

Om du vill aktivera distribuerad träning för komponenten Train PyTorch Model kan du ange i Jobbinställningar i komponentens högra fönster. 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 komponenten NCCL-backend Train PyTorch Model använder cuda.

  1. Välj komponenten och öppna den högra panelen. Expandera avsnittet Jobbinställningar .

    Skärmbild som visar hur du ställer in distribuerad träning i runsetting

  2. Kontrollera att du har valt AML-beräkning för beräkningsmålet.

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

    • Antal noder : Antal noder i beräkningsmålet som används för träning. Den bör vara mindre än eller lika meddet maximala antalet noder i beräkningsklustret. Som standard är det 1, vilket innebär jobb med en enda nod.

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

    Du kan kontrollera maximalt antal noder och bearbetningsenhet för din beräkning genom att klicka på beräkningsnamnet på sidan med beräkningsinformation.

    Skärmbild som visar hur du kontrollerar beräkningsklustret

Du kan läsa mer om distribuerad utbildning i Azure Machine Learning här.

Felsökning för distribuerad träning

Om du aktiverar distribuerad utbildning för den här komponenten finns det drivrutinsloggar för varje process. 70_driver_log_0 är för huvudprocess. Du kan kontrollera drivrutinsloggarna för felinformation om varje process under fliken Utdata+loggar i den högra rutan.

Skärmbild som visar drivrutinslogg

Om den komponentaktiverade distribuerade träningen 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-logg

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

Resultat

När pipelinejobbet har slutförts ansluter du Train PyTorch Model till Score Image Model för att förutsäga värden för nya indataexempel för att använda modellen för bedömning.

Tekniska anteckningar

Förväntade indata

Namn Typ Beskrivning
Otränad modell UntrainedModelDirectory Otränad modell, kräv PyTorch
Träningsdatauppsättning ImageDirectory Träningsdatauppsättning
Datauppsättning för validering ImageDirectory Valideringsdatauppsättning för utvärdering varje epok

Komponentparametrar

Name Intervall Typ Standardvärde Beskrivning
Epoker >0 Integer 5 Markera kolumnen som innehåller etiketten eller resultatkolumnen
Batchstorlek >0 Integer 16 Hur många instanser som ska tränas i en batch
Stegnummer för uppvärmning >=0 Integer 0 Hur många epoker för att värma upp träningen
Inlärningstakt >=dubbel. Epsilon Float 0.1 Den inledande inlärningsfrekvensen för stochastic Gradient Descent-optimeraren.
Slumpmässigt frö Valfri Integer 1 Fröet för slumptalsgeneratorn som används av modellen.
Tålamod >0 Integer 3 Hur många epoker till tidig stoppträning
Utskriftsfrekvens >0 Integer 10 Utskriftsfrekvens för träningsloggar över iterationer i varje epok

Utdata

Namn Typ Beskrivning
Tränad modell ModelDirectory Tränad modell

Nästa steg

Se den uppsättning komponenter som är tillgängliga för Azure Machine Learning.