La discesa del gradiente stocastico (SGD) è una delle tecniche di maggior successo mai ideate sia per l"apprendimento automatico che per l’ottimizzazione matematica. Lokad ha sfruttato ampiamente lo SGD per anni a fini di supply chain, principalmente attraverso la programmazione differenziabile. La maggior parte dei nostri clienti possiede almeno uno SGD da qualche parte nella loro pipeline di estrazione dati.

Nel software, la velocità è una caratteristica. Volevamo rendere la nostra implementazione dello SGD più veloce - ma senza sacrificare il suo comportamento deterministico. Infatti, il determinismo è essenziale per fornire configurazioni di supply chain a livello di produzione. In breve, eseguire lo SGD due volte dovrebbe dare esattamente lo stesso risultato.

Discesa del gradiente stocastico parallelo riproducibile per dati ad altissima dimensione

Questa estate abbiamo avuto il piacere di ospitare Ziyad Benomar per uno stage dedicato all’accelerazione riproducibile della nostra implementazione dello SGD. Ziyad Benomar ha realizzato un lavoro notevole che condividiamo di seguito.

La versione breve è che abbiamo ottenuto un’accelerazione 5 volte superiore a fronte di un costo computazionale 6 volte maggiore rispetto a uno SGD di base. Oltre a ciò, il collo di bottiglia - nell’architettura Lokad - diventa il caricamento dei dati. L’ottimizzazione delle prestazioni è un interminabile Whac-A-Mole: appena un collo di bottiglia viene risolto, ne emerge un altro. Risolvere questo problema di I/O è il prossimo passo ovvio per noi. Restate sintonizzati!


Titolo: Discesa del gradiente stocastico parallelo riproducibile per dati ad altissima dimensione

Autore: Ziyad Benomar, École polytechnique

Abstract: Siamo interessati allo studio degli algoritmi di discesa del gradiente stocastico distribuiti e della loro implementazione su una macchina con più processori. Affrontiamo il problema dal punto di vista delle prestazioni e della velocità computazionale, e imponiamo anche alle nostre soluzioni di essere riproducibili, cioè di dare gli stessi risultati se eseguite sullo stesso insieme di dati. Ci concentreremo principalmente sull’algoritmo PR-SGD, e presenteremo alcuni adattamenti che migliorano la velocità di esecuzione quando il tempo necessario per caricare i dati nella RAM del computer è molto lungo. Per ogni algoritmo proposto, forniamo una dimostrazione di convergenza e una stima del suo tempo di esecuzione. Infine, confrontiamo i nostri algoritmi utilizzando una nozione di prestazioni ε che definiamo.

Scarica il PDF