Delen via


PyTorch-model trainen

In dit artikel wordt beschreven hoe u het onderdeel PyTorch-model trainen in Azure Machine Learning-ontwerpfunctie gebruikt om PyTorch-modellen zoals DenseNet te trainen. Training vindt plaats nadat u een model hebt gedefinieerd en de bijbehorende parameters hebt ingesteld en gelabelde gegevens nodig hebt.

Momenteel ondersteunt het onderdeel Train PyTorch Model zowel één knooppunt als gedistribueerde training.

Train PyTorch Model gebruiken

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

  2. Voeg het onderdeel Train PyTorch Model toe aan de pijplijn. U vindt dit onderdeel onder de categorie Modeltraining . Vouw Train uit en sleep vervolgens het onderdeel Train PyTorch Model naar uw pijplijn.

    Notitie

    Train PyTorch Model component is better run on GPU type compute for large dataset, anders mislukt uw pijplijn. U kunt berekeningen selecteren voor een specifiek onderdeel in het rechterdeelvenster van het onderdeel door het instellen van Ander rekendoel gebruiken.

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

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

    Voor de gegevensset moet de trainingsgegevensset een gelabelde afbeeldingsmap zijn. Raadpleeg Converteren naar afbeeldingsmap voor het ophalen van een gelabelde afbeeldingsmap. Als dit niet is gelabeld, wordt er 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 geïmplementeerd, standaard 5.

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

  6. Geef voor opwarmstapnummer op hoeveel tijdvakken u de training wilt opwarmen, voor het geval de eerste leersnelheid iets te groot is om standaard 0 te beginnen met samenvoegen.

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

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

    Notitie

    Als het verlies van de trein tijdens de training wordt, wat kan worden veroorzaakt door te grote leersnelheid, kan het verminderen van het leerpercentage helpen. Bij gedistribueerde training, om gradiëntafname stabiel te houden, wordt de werkelijke leersnelheid berekend lr * torch.distributed.get_world_size() omdat de batchgrootte van de procesgroep wereldgrootten is die van één proces. Polynomial learning rate verval wordt toegepast en kan leiden tot een beter presterend model.

  8. Voor willekeurige seed 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. Geef voor Geduld op hoeveel tijdvakken u moet stoppen met trainen als validatieverlies niet opeenvolgend afneemt. standaard 3.

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

  11. Verzend de pijplijn. Als uw gegevensset een grotere grootte heeft, duurt het even en wordt GPU-rekenkracht aanbevolen.

Gedistribueerde training

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

Trainingstijd

Met gedistribueerde training kunt u in slechts enkele uren trainen op een grote gegevensset zoals ImageNet (1000 klassen, 1,2 miljoen afbeeldingen) door Het PyTorch-model trainen. In de volgende tabel ziet u de trainingstijd en prestaties tijdens het trainen van 50 perioden van Resnet50 op ImageNet helemaal zelf op basis van verschillende apparaten.

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

Klik op dit onderdeel op het tabblad Metrische gegevens en zie metrische grafieken voor training, zoals 'Afbeeldingen trainen per seconde' en 'Nauwkeurigheid van top 1'.

Schermopname van metrische trainingsgegevens

Gedistribueerde training inschakelen

Als u gedistribueerde training wilt inschakelen voor het onderdeel Train PyTorch Model , kunt u instellen in taakinstellingen in het rechterdeelvenster van het onderdeel. Alleen Azure Machine Learning 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 cuda nodig heeft.

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

    Schermopname die laat zien hoe u gedistribueerde training instelt in runsetting

  2. Zorg ervoor dat u Azure Machine Learning-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 training. Dit moet kleiner zijn dan of gelijk zijn aan het maximum aantal knooppunten dat uw rekencluster heeft. Standaard is dit 1, wat betekent dat de taak met één knooppunt wordt uitgevoerd.

    • 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 betekent dat één procestaak.

    U kunt het maximum aantal knooppunten en de verwerkingseenheid van uw berekening controleren door op de naam van de berekening te klikken op de detailpagina van de berekening.

    Schermopname die laat zien hoe u het rekencluster controleert

Hier vindt u meer informatie over gedistribueerde training in Azure Machine Learning.

Problemen met gedistribueerde training oplossen

Als u gedistribueerde training voor dit onderdeel inschakelt, worden er stuurprogrammalogboeken voor elk proces weergegeven. 70_driver_log_0 is bedoeld voor het hoofdproces. U kunt stuurprogrammalogboeken controleren op foutdetails van elk proces onder het tabblad Uitvoer+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. Dit is het aantal processen per knooppunt is groter dan de verwerkingseenheid van de rekenkracht .

Schermopname van mpi-logboek

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

Resultaten

Nadat de pijplijntaak is voltooid, verbindt u het Train PyTorch-model met Score Image Model om waarden voor nieuwe invoervoorbeelden te voorspellen om het model te gebruiken voor scoren.

Technische notities

Verwachte invoer

Naam Typologie Beschrijving
Ongetraind model UntrainedModelDirectory Niet-getraind model, PyTorch vereisen
Trainingsgegevensset ImageDirectory Trainingsgegevensset
Validatiegegevensset ImageDirectory Validatiegegevensset voor evaluatie elke periode

Onderdeelparameters

Naam Bereik Typologie Verstek Beschrijving
Tijdperken >0 Geheel getal 5 Selecteer de kolom met het label of de resultaatkolom
Batchgrootte >0 Geheel getal 16 Hoeveel exemplaren er in een batch moeten worden getraind
Opwarmstapnummer >=0 Geheel getal 0 Hoeveel tijdvakken om training op te warmen
Leersnelheid >=dubbel. Epsilon zweven 0,1 Het eerste leerpercentage voor de stochastische gradiëntafname-optimalisatie.
Willekeurig basis 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 om de training vroeg te stoppen
Afdrukfrequentie >0 Geheel getal 10 Afdrukfrequentie van trainingslogboeken over iteraties in elk tijdvak

Uitvoerwaarden

Naam Typologie Beschrijving
Getraind model ModelDirectory Getraind model

Volgende stappen

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