Condividi tramite


Eseguire il training del modello PyTorch

Questo articolo descrive come usare il componente Train PyTorch Model in Azure Machine Learning Designer per eseguire il training di modelli PyTorch come DenseNet. Il training viene eseguito dopo aver definito un modello e impostato i relativi parametri e richiede dati etichettati.

Attualmente, il componente Train PyTorch Model supporta sia il training a nodo singolo che il training distribuito.

Come usare il training del modello PyTorch

  1. Aggiungere il componente DenseNet o ResNet alla bozza di pipeline nella finestra di progettazione.

  2. Aggiungere il componente Train PyTorch Model alla pipeline. È possibile trovare questo componente nella categoria Training modello . Espandere Train (Esegui training) e quindi trascinare il componente Train PyTorch Model (Train PyTorch Model ) nella pipeline.

    Nota

    Il training del componente del modello PyTorch è migliore per l'esecuzione nel calcolo del tipo GPU per set di dati di grandi dimensioni. In caso contrario, la pipeline avrà esito negativo. È possibile selezionare il calcolo per un componente specifico nel riquadro destro del componente impostando Usa altra destinazione di calcolo.

  3. Nell'input sinistro collegare un modello non sottoposto a training. Collegare il set di dati di training e il set di dati di convalida all'input centrale e destro del training del modello PyTorch.

    Per il modello non sottoposto a training, deve essere un modello PyTorch come DenseNet; in caso contrario, verrà generata un'eccezione 'InvalidModelDirectoryError'.

    Per il set di dati, il set di dati di training deve essere una directory di immagini con etichetta. Per informazioni su come ottenere una directory di immagini etichettata, vedere Converti in directory di immagini. Se non viene etichettata, verrà generata un'eccezione 'NotLabeledDatasetError'.

    Il set di dati di training e il set di dati di convalida hanno le stesse categorie di etichette. In caso contrario, verrà generata un'eccezione InvalidDatasetError.

  4. Per Epochs specificare il numero di periodi di cui si vuole eseguire il training. L'intero set di dati verrà iterato in ogni periodo, per impostazione predefinita 5.

  5. Per dimensioni batch, specificare il numero di istanze di cui eseguire il training in un batch, per impostazione predefinita 16.

  6. Per Numero di passaggio warmup, specificare il numero di periodi che si vuole riscaldare il training, nel caso in cui la velocità di apprendimento iniziale sia leggermente troppo grande per iniziare a convergere, per impostazione predefinita 0.

  7. Per Frequenza di apprendimento specificare un valore per la frequenza di apprendimento e il valore predefinito è 0,001. La frequenza di apprendimento controlla le dimensioni del passaggio usato in Optimizer come sgd ogni volta che il modello viene testato e corretto.

    Impostando la velocità più piccola, si testa il modello più spesso, con il rischio che si possa rimanere bloccati in un altopiano locale. Impostando la velocità maggiore, è possibile convergere più velocemente, con il rischio di superamento del minimo reale.

    Nota

    Se la perdita di training diventa nana durante la formazione, che può essere causata da un tasso di apprendimento troppo elevato, la diminuzione del tasso di apprendimento può aiutare. Nel training distribuito, per mantenere stabile la discesa del gradiente, la velocità di apprendimento effettiva viene calcolata in lr * torch.distributed.get_world_size() quanto le dimensioni batch del gruppo di processi sono le dimensioni del mondo di quella del singolo processo. Il decadimento della frequenza di apprendimento polinomiale viene applicato e può contribuire a ottenere un modello con prestazioni migliori.

  8. Per Valore di inizializzazione casuale, digitare facoltativamente un valore intero da usare come valore di inizializzazione. È consigliabile usare un valore di inizializzazione se si vuole garantire la riproducibilità dell'esperimento tra i processi.

  9. Per Pazienza, specificare il numero di periodi di interruzione anticipata del training se la perdita di convalida non diminuisce consecutivamente. per impostazione predefinita 3.

  10. Per Frequenza di stampa specificare la frequenza di stampa del log di training sulle iterazioni in ogni periodo, per impostazione predefinita 10.

  11. Inviare la pipeline. Se le dimensioni del set di dati sono maggiori, è consigliabile usare un po' di tempo e il calcolo GPU.

Training distribuito

Nel training distribuito il carico di lavoro per il training di un modello viene suddiviso e condiviso tra più mini processori, denominati nodi di lavoro. Questi nodi di lavoro funzionano in parallelo per velocizzare il training del modello. Attualmente la finestra di progettazione supporta il training distribuito per il componente Train PyTorch Model .

Tempo di formazione

Il training distribuito consente di eseguire il training su un set di dati di grandi dimensioni, ad esempio ImageNet (1000 classi, 1,2 milioni di immagini) in poche ore da Train PyTorch Model. La tabella seguente illustra il tempo di training e le prestazioni durante il training di 50 periodi di Resnet50 in ImageNet da zero in base a dispositivi diversi.

Dispositivi Tempo di training Velocità effettiva del training Precisione della convalida top-1 Precisione della convalida top-5
16 GPU V100 6h22min ~3200 immagini/sec 68.83% 88.84%
8 GPU V100 12h21min ~1670 immagini/sec 68.84% 88.74%

Fare clic sulla scheda "Metriche" del componente e visualizzare i grafici delle metriche di training, ad esempio "Eseguire il training delle immagini al secondo" e "Accuratezza primi 1".

Screenshot che mostra le metriche di training

Come abilitare il training distribuito

Per abilitare il training distribuito per il componente Train PyTorch Model , è possibile impostare in Impostazioni processo nel riquadro destro del componente. Per il training distribuito è supportato solo il cluster di calcolo AML .

Nota

Per attivare il training distribuito sono necessarie più GPU perché il componente Train PyTorch del back-end NCCL usa cuda.

  1. Selezionare il componente e aprire il pannello destro. Espandere la sezione Impostazioni processo .

    Screenshot che mostra come impostare il training distribuito in runsetting

  2. Assicurarsi di avere selezionato calcolo AML per la destinazione di calcolo.

  3. Nella sezione Layout risorse è necessario impostare i valori seguenti:

    • Numero di nodi: numero di nodi nella destinazione di calcolo usata per il training. Deve essere minore o uguale alnumero massimo di nodi del cluster di calcolo. Per impostazione predefinita è 1, ovvero il processo a nodo singolo.

    • Conteggio processi per nodo: numero di processi attivati per nodo. Deve essere minore o uguale all'unità di elaborazione del calcolo. Per impostazione predefinita, è 1, ovvero un singolo processo di elaborazione.

    È possibile controllare il numero massimo di nodi e l'unità di elaborazione del calcolo facendo clic sul nome del calcolo nella pagina dei dettagli di calcolo.

    Screenshot che mostra come controllare il cluster di calcolo

Altre informazioni sul training distribuito in Azure Machine Learning sono disponibili qui.

Risoluzione dei problemi per il training distribuito

Se si abilita il training distribuito per questo componente, verranno visualizzati i log dei driver per ogni processo. 70_driver_log_0 è per il processo master. È possibile controllare i log dei driver per i dettagli degli errori di ogni processo nella scheda Output e log nel riquadro destro.

Screenshot che mostra il log del driver

Se il training distribuito abilitato per il componente ha esito negativo senza 70_driver alcun log, è possibile verificare 70_mpi_log i dettagli dell'errore.

L'esempio seguente mostra un errore comune, ovvero il conteggio dei processi per nodo è maggiore dell'unità di elaborazione del calcolo.

Screenshot che mostra il log mpi

Per altre informazioni sulla risoluzione dei problemi dei componenti, vedere questo articolo .

Risultati

Al termine del processo della pipeline, per usare il modello per l'assegnazione dei punteggi, connettere il modello Train PyTorch a Score Image Model per stimare i valori per i nuovi esempi di input.

Note tecniche

Input previsti

Nome Tipo Descrizione
Untrained model UntrainedModelDirectory Modello non sottoposto a training, richiedere PyTorch
Dataset di training ImageDirectory Dataset di training
Set di dati di convalida ImageDirectory Set di dati di convalida per la valutazione ogni periodo

Parametri del componente

Nome Intervallo Type Predefinito Descrizione
Epoche >0 Integer 5 Seleziona la colonna contenente l'etichetta o la colonna del risultato
Dimensioni dei batch >0 Integer 16 Numero di istanze di cui eseguire il training in un batch
Numero del passaggio di riscaldamento >=0 Integer 0 Quante epoche scaldare il training
Velocità di apprendimento >=double.Epsilon Float 0,1 Velocità di apprendimento iniziale per l'ottimizzatore di valori descent con sfumatura stocastica
Random seed Qualsiasi Integer 1 Valore di inizializzazione per il generatore di numeri casuali usato dal modello.
Pazienza >0 Integer 3 Quante epoche arrestare il training in anticipo
Frequenza di stampa >0 Integer 10 Frequenza di stampa del log di training sulle iterazioni in ogni periodo

Output

Nome Tipo Descrizione
Trained model ModelDirectory Trained model

Passaggi successivi

Vedere il set di componenti disponibili per Azure Machine Learning.