Training distribuito con Azure Machine Learning

Questo articolo illustra il training distribuito e il modo in cui Azure Machine Learning lo supporta per i modelli di Deep Learning.

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. 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, ad esempio deep learning per il training di reti neurali profonde.

Apprendimento avanzato e formazione distribuita

Esistono due tipi principali di training distribuito: parallelismo dei dati e parallelismo del modello. 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 diffusi 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 diversi modi per eseguire il training dei modelli con Python SDK.

Parallelismo dei dati

Il parallelismo dei dati è il più semplice da implementare dei due approcci di training distribuiti 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 calcolo o nel calcolo serverless. Il modello viene copiato in ognuno di questi nodi di lavoro e ogni nodo opera sul proprio subset dei dati. Tenere presente che ogni nodo deve avere la capacità di supportare il modello sottoposto a training, ovvero l'intero modello deve adattarsi 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 una consis modalità tenda l.

Parallelismo del modello

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

Nel parallelismo del modello, 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.