PyTorch-model trainen

In dit artikel wordt beschreven hoe u het onderdeel PyTorch-model trainen in azure Machine Learning Designer gebruikt om PyTorch-modellen zoals DenseNet te trainen. Training vindt plaats nadat u een model hebt gedefinieerd en de parameters ervan hebt ingesteld. Hiervoor zijn gelabelde gegevens vereist.

Momenteel ondersteunt het onderdeel PyTorch-model trainen zowel één knooppunt als gedistribueerde training.

PyTorch-model trainen gebruiken

  1. Voeg het DenseNet-onderdeel of ResNet toe aan uw pijplijnconcept in de ontwerpfunctie.

  2. Voeg het onderdeel PyTorch-model trainen toe aan de pijplijn. U vindt dit onderdeel onder de categorie Modeltraining . Vouw Trainen uit en sleep het onderdeel PyTorch-model trainen naar uw pijplijn.

    Notitie

    Het pyTorch-modelonderdeel trainen kan beter worden uitgevoerd op GPU-rekenkracht voor grote gegevenssets, anders mislukt uw pijplijn. U kunt compute voor een specifiek onderdeel selecteren in het rechterdeelvenster van het onderdeel door Ander rekendoel gebruiken in te stellen.

  3. Koppel aan de linkerkant een niet-getraind model. Koppel de trainingsgegevensset en validatiegegevensset aan de middelste en rechterinvoer van PyTorch-model trainen.

    Voor een niet-getraind model moet het een PyTorch-model zijn, zoals DenseNet; Anders wordt er een 'InvalidModelDirectoryError' gegenereerd.

    Voor gegevenssets moet de trainingsgegevensset een gelabelde afbeeldingsmap zijn. Raadpleeg Converteren naar afbeeldingsmap voor het ophalen van een gelabelde afbeeldingsmap. Als dit niet is gelabeld, wordt een 'NotLabeledDatasetError' gegenereerd.

    De trainingsgegevensset en validatiegegevensset hebben dezelfde labelcategorieën, anders wordt er een InvalidDatasetError gegenereerd.

  4. Geef voor Epochs op hoeveel tijdvakken u wilt trainen. De hele gegevensset wordt in elk tijdvak opnieuw uitgevoerd, standaard 5.

  5. Geef voor Batchgrootte op hoeveel exemplaren in een batch moeten worden getraind, standaard 16.

  6. Geef voor Het nummer van de warming-upstap op hoeveel tijdvakken u de training wilt opwarmen, voor het geval de initiële leersnelheid iets te groot is om te beginnen met samenvoegen, standaard 0.

  7. Geef bij Leerfrequentie een waarde op voor de leersnelheid en de standaardwaarde is 0,001. Leersnelheid bepaalt de grootte van de stap die in optimizer wordt gebruikt, zoals sgd telkens wanneer het model wordt getest en gecorrigeerd.

    Door de snelheid lager in te stellen, test u het model vaker, met het risico dat u vastloopt in een lokaal plateau. Door het tarief hoger in te stellen, kunt u sneller convergeren, met het risico dat de werkelijke minima wordt overschreden.

    Notitie

    Als het trainingsverlies tijdens de training wordt veroorzaakt door een te hoge leersnelheid, kan het verminderen van de leersnelheid helpen. Bij gedistribueerde training wordt, om gradiëntafname stabiel te houden, de werkelijke leersnelheid berekend door lr * torch.distributed.get_world_size() omdat de batchgrootte van de procesgroep de grootte van de wereld maal die van één proces is. Polynomial learning rate verval wordt toegepast en kan helpen bij een beter presterend model.

  8. Voor Willekeurig zaad typt u desgewenst een geheel getal dat u als seed wilt gebruiken. Het gebruik van een seed wordt aanbevolen als u de reproduceerbaarheid van het experiment tussen taken wilt garanderen.

  9. Voor Geduld geeft u op hoeveel tijdvakken u vroegtijdig moet stoppen met trainen als het validatieverlies niet opeenvolgend afneemt. standaard 3.

  10. Geef bij Afdrukfrequentie de afdrukfrequentie van het trainingslogboek op voor iteraties in elk tijdvak, standaard 10.

  11. Verzend de pijplijn. Als uw gegevensset groter is, duurt het even en wordt GPU-rekenkracht aanbevolen.

Gedistribueerde training

In gedistribueerde training wordt de workload voor het trainen van een model opgesplitst en gedeeld tussen meerdere miniprocessors, werkknooppunten genoemd. Deze werkknooppunten werken parallel om modeltraining te versnellen. Momenteel ondersteunt de ontwerper gedistribueerde training voor het onderdeel PyTorch-model trainen .

Trainingstijd

Gedistribueerde training maakt het mogelijk om te trainen op een grote gegevensset zoals ImageNet (1000 klassen, 1,2 miljoen afbeeldingen) in slechts enkele uren met Behulp van Het PyTorch-model trainen. In de volgende tabel ziet u de trainingstijd en prestaties tijdens de training 50 perioden van Resnet50 op ImageNet op basis van verschillende apparaten.

Apparaten Trainingstijd Doorvoer van training Top-1 validatienauwkeurigheid Top-5 validatienauwkeurigheid
16 V100 GPU's 6u22min ~3200 afbeeldingen per seconde 68.83% 88.84%
8 V100 GPU's 12u21min ~1670 afbeeldingen per seconde 68.84% 88.74%

Klik op het tabblad Metrische gegevens van dit onderdeel en bekijk grafieken met metrische gegevens voor training, zoals 'Afbeeldingen trainen per seconde' en 'Hoogste 1 nauwkeurigheid'.

Schermopname met metrische gegevens voor training

Gedistribueerde training inschakelen

Als u gedistribueerde training voor het onderdeel PyTorch-model trainen wilt inschakelen, kunt u instellen in Taakinstellingen in het rechterdeelvenster van het onderdeel. Alleen AML Compute-cluster wordt ondersteund voor gedistribueerde training.

Notitie

Er zijn meerdere GPU's vereist om gedistribueerde training te activeren, omdat het nccl-back-endonderdeel PyTorch-model de behoeften cuda gebruikt.

  1. Selecteer het onderdeel en open het rechterdeelvenster. Vouw de sectie Taakinstellingen uit .

    Schermopname van het instellen van gedistribueerde training in runseting

  2. Zorg ervoor dat u AML-berekening hebt geselecteerd voor het rekendoel.

  3. In de sectie Resource-indeling moet u de volgende waarden instellen:

    • Aantal knooppunten : het aantal knooppunten in het rekendoel dat wordt gebruikt voor de training. Deze moet kleiner zijn dan of gelijk zijn aan het Maximum aantal knooppunten van uw rekencluster. Standaard is dit 1, wat een taak met één knooppunt betekent.

    • Aantal processen per knooppunt: het aantal processen dat per knooppunt wordt geactiveerd. Deze moet kleiner zijn dan of gelijk zijn aan de verwerkingseenheid van uw rekenproces. Standaard is dit 1, wat een taak met één proces betekent.

    U kunt het maximum aantal knooppunten en de verwerkingseenheid van uw rekenproces controleren door op de naam van de berekening te klikken op de pagina met rekengegevens.

    Schermopname van het controleren van het rekencluster

Meer informatie over gedistribueerde training in Azure Machine Learning vindt u hier.

Problemen met gedistribueerde training oplossen

Als u gedistribueerde training voor dit onderdeel inschakelt, zijn er stuurprogrammalogboeken voor elk proces. 70_driver_log_0 is voor het hoofdproces. U kunt stuurprogrammalogboeken controleren op foutdetails van elk proces op het tabblad Uitvoer en logboeken in het rechterdeelvenster.

Schermopname van het stuurprogrammalogboek

Als het onderdeel gedistribueerde training mislukt zonder 70_driver logboeken, kunt u controleren op 70_mpi_log foutdetails.

In het volgende voorbeeld ziet u een veelvoorkomende fout, namelijk het aantal processen per knooppunt is groter dan de verwerkingseenheid van de berekening.

Schermopname van mpi-logboek

Raadpleeg dit artikel voor meer informatie over het oplossen van problemen met onderdelen.

Resultaten

Nadat de pijplijntaak is voltooid, koppelt u het PyTorch-model trainen aan het afbeeldingsmodel scoren om waarden voor nieuwe invoervoorbeelden te voorspellen.

Technische opmerkingen

Verwachte invoer

Naam Type Description
Niet-getraind model UntrainedModelDirectory Niet-getraind model, PyTorch vereisen
Trainingsgegevensset ImageDirectory Trainingsgegevensset
Validatiegegevensset ImageDirectory Validatiegegevensset voor evaluatie van elk tijdvak

Onderdeelparameters

Naam Bereik Type Standaard Beschrijving
Tijdperken >0 Geheel getal 5 Selecteer de kolom die het label of de resultaatkolom bevat
Batchgrootte >0 Geheel getal 16 Hoeveel exemplaren er in een batch moeten worden getraind
Nummer van de warming-upstap >=0 Geheel getal 0 Hoeveel tijdvakken om training op te warmen
Leersnelheid >=double. Epsilon Float 0,1 Het initiële leerpercentage voor de optimalisatie van stochastische gradiëntafname.
Willekeurig zaad Alle Geheel getal 1 De seed voor de generator voor willekeurige getallen die door het model wordt gebruikt.
Geduld >0 Geheel getal 3 Hoeveel tijdvakken tot vroege stoptraining
Afdrukfrequentie >0 Geheel getal 10 Afdrukfrequentie van trainingslogboeken over iteraties in elk tijdvak

Uitvoerwaarden

Naam Type Description
Getraind model Modeldirectory Getraind model

Volgende stappen

Bekijk de set onderdelen die beschikbaar zijn voor Azure Machine Learning.