Lo stochastic gradient descent (SGD) è una delle tecniche di maggior successo mai ideate per l’apprendimento automatico e l’ottimizzazione matematica. Lokad ha sfruttato ampiamente lo SGD per anni per scopi legati alla supply chain, principalmente attraverso la programmazione differenziabile. La maggior parte dei nostri clienti ha almeno uno SGD da qualche parte nel proprio flusso di dati.

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

Reproducible Parallel Stochastic Gradient Descent per dati ad alta dimensionalità

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

In breve, otteniamo un aumento di velocità di 5 volte con un costo di calcolo 6 volte superiore rispetto a un SGD di base. Oltre a ciò, il collo di bottiglia - nell’architettura Lokad - diventa il caricamento dei dati. L’ottimizzazione delle prestazioni è un Whac-A-Mole senza fine: appena viene affrontato un collo di bottiglia, ne emerge uno nuovo. Risolvere questo problema di I/O è il prossimo passo ovvio per noi. Restate sintonizzati!


Titolo: Reproducible Parallel Stochastic Gradient Descent per dati ad alta dimensionalità

Autore: Ziyad Benomar, École polytechnique

Abstract: Siamo interessati allo studio degli algoritmi distribuiti di stochastic gradient descent e alla loro implementazione su una macchina con diversi processori. Affrontiamo il problema da un punto di vista delle prestazioni e della velocità di calcolo, e imporremo anche alle nostre soluzioni di essere riproducibili, ossia di dare gli stessi risultati se eseguiti sullo stesso set di dati. Ci concentreremo principalmente sull’algoritmo PR-SGD e forniremo alcune modifiche che migliorano la velocità di esecuzione quando il tempo necessario per caricare i dati nella RAM del computer è molto lungo. Per ciascun algoritmo proposto, forniamo una prova di convergenza e una stima del tempo di esecuzione. Infine, confrontiamo i nostri algoritmi utilizzando una nozione di ε-performance che definiamo.

Scarica il PDF