Training distribuito con Azure Machine Learning

Questo articolo illustra il training distribuito e come è supportato da Azure Machine Learning per i modelli di Deep Learning.

Nel training distribuito, il carico di lavoro per eseguire 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. Il training distribuito può essere usato per i modelli di Machine Learning tradizionali, ma è più adatto per le attività di calcolo e a elevato utilizzo di tempo, come il deep learning per il training di reti neurali profonde.

Training distribuito e Deep Learning

Esistono due tipi principali di training distribuito: parallelismo dei dati e parallelismo dei modelli. Per il training distribuito sui modelli di Deep Learning, Azure Machine Learning SDK in Python supporta le integrazioni con PyTorch e TensorFlow. Entrambi sono framework famosi che usano il parallelismo dei dati per il training distribuito e possono usare Horovod per ottimizzare le velocità di calcolo.

Per i modelli di Machine Learning che non richiedono il training distribuito, vedere Eseguire il training di modelli con Azure Machine Learning per conoscere i diversi modi per eseguire il training dei modelli con Python SDK.

Parallelismo dei dati

Il parallelismo dei dati è l'approccio di training distribuito più semplice da implementare ed è sufficiente per la maggior parte dei casi d'uso.

In questo approccio, i dati vengono suddivisi in partizioni, in cui il numero di partizioni è uguale al numero totale di nodi disponibili, nel cluster di elaborazione o nell'elaborazione serverless. Il modello viene copiato in ognuno di questi nodi di lavoro e ogni nodo opera sul proprio subset di dati. Tenere presente che ogni nodo deve avere la capacità di supportare il modello sottoposto a training, ovvero il modello intero deve adattarsi interamente a ogni nodo.

Il diagramma seguente illustra questo approccio.

Diagramma del parrallelismo dei dati che mostra il modello copiato nei nodi di lavoro.

Ogni nodo calcola in modo indipendente gli errori tra le stime per i campioni di training e gli output etichettati. A sua volta, ogni nodo aggiorna il modello in base agli errori e deve comunicare tutte le modifiche apportate agli altri nodi per aggiornare i modelli corrispondenti. I nodi di lavoro devono sincronizzare i parametri del modello o le sfumature alla fine del calcolo batch per assicurarsi che eseguano il training di un modello coerente.

Parallelismo dei modelli

Nel parallelismo dei modelli, noto anche come parallelismo di rete, il modello viene segmentato in parti diverse che possono essere eseguite simultaneamente in nodi diversi e ognuno viene eseguito sugli stessi dati. La scalabilità di questo metodo dipende dal grado di parallelizzazione delle attività dell'algoritmo ed è più complesso da implementare rispetto al parallelismo dei dati.

Nel parallelismo dei modelli, i nodi di lavoro devono sincronizzare solo i parametri condivisi, in genere una volta per ogni passaggio di propagazione avanti o indietro. Inoltre, i modelli di dimensioni maggiori non sono un problema perché ogni nodo opera su una sottosezione del modello sugli stessi dati di training.