L'addestramento distribuito utilizza le tecniche di apprendimento automatico distribuite per diffondere l'addestramento dei modelli su tutti i dispositivi. Ad esempio, questa tecnica viene spesso utilizzata con grandi reti neurali. Quando la rete, il set di dati di addestramento o entrambi sono troppo grandi per un processore, l'addestramento distribuito invia il workload su più server, GPU o macchine.
La discesa stocastica del gradiente (SGD) è un algoritmo di apprendimento che divide il set di dati in mini-batch e calcola il gradiente della funzione di perdita dopo ogni batch. L'uso di mini-batch anziché del set di dati completo rende l'addestramento più efficiente.
La funzione di perdita misura l'errore nelle previsioni del modello e l'obiettivo dell'SGD è quello di abbassare il gradiente per ridurre al minimo il valore della funzione. Come per l'addestramento del modello standard, il processo di addestramento è considerato completo quando il modello raggiunge la convergenza: quando l'algoritmo SGD riduce con successo il valore della funzione.
I nodi elaborano le mini-batch in parallelo, il che è possibile perché ogni batch viene elaborata indipendentemente dalle altre all'interno di ogni iterazione. Ogni nodo calcola il proprio gradiente, quindi invia il valore del gradiente aggiornato agli altri nodi della rete. Gli altri nodi di lavoro implementano gli aggiornamenti che ricevono nei propri modelli, contribuendo a garantire che tutte le copie del modello rimangano identiche durante tutto il processo di addestramento.
La funzione AllReduce è un'operazione di comunicazione collettiva che consente a ciascun nodo di condividere i propri risultati e propagare i risultati aggregati attraverso la rete. AllReduce consente a tutti i nodi di sincronizzare gli aggiornamenti dei parametri del modello e mantenere la coerenza. Questa funzione, utilizzata a lungo nell'elaborazione ad alte prestazioni, è stata reso popolare in framework di apprendimento automatico come Horovod.
L'SGD può essere eseguita in modo sincrono o asincrono. L'SGD sincrono aggiorna tutti i nodi contemporaneamente, il che mantiene la coerenza a scapito di potenziali ritardi in caso di ritardo di alcuni nodi. L'SGD asincrono aggiorna i parametri non appena un aggiornamento è pronto, ma alcuni nodi potrebbero ricevere aggiornamenti che non includono i valori più recenti.
Riducendo le risorse computazionali necessarie per dispositivo, l'addestramento distribuito può accelerare i tempi. Poiché richiede così tante risorse di calcolo, l'addestramento è uno dei principali casi d'uso dell'apprendimento automatico distribuito.