TensorFlow™ su Databricks
Calcolo distribuito con TensorFlow
TensorFlow supporta il calcolo distribuito, consentendo di elaborare porzioni del grafo su diversi processi che possono essere localizzati su server diversi. Inoltre, il calcolo può essere distribuito su server con GPU potenti, mentre altri calcoli possono essere effettuati su server con più memoria, e così via. L'interfaccia è però un po' complicata, pertanto partiamo dall'inizio.
Ecco il nostro primo script, che eseguiremo su un singolo processo, per poi passare a processi multipli:
Per ora questo script non ci dovrebbe spaventare troppo. Abbiamo una costante e tre equazioni elementari. Alla fine viene stampato il risultato (238).
TensorFlow funziona in modo simile a un modello client-server. L'idea è creare un gruppo di "worker" che eseguiranno il lavoro pesante. Successivamente si crea una sessione su uno di questi worker, che a sua volta elaborerà il grafo, eventualmente distribuendone alcune parti ad altri cluster sul server.
Per fare questo, il worker principale, detto "master", deve essere a conoscenza degli altri worker. Questa condizione viene soddisfatta creando un ClusterSpec, che deve essere passato a tutti i worker. Il ClusterSpec viene costruito utilizzando un dizionario, dove la chiave è un "job name" e ogni job contiene molti worker.
Il processo è illustrato nello schema successivo.

Il codice seguente crea un ClusterSpec con job name "local" e due processi worker.
Bisogna notare come i processi non vengano avviati da questo codice, semplicemente viene creato un riferimento al loro avvio futuro.
Il passo successivo è avviare il processo. Per farlo, creiamo un grafo di uno di questi worker e avviamolo:
Il codice precedente avvia il worker “localhost:2223” sotto il job “local”.
Qui sotto riportiamo uno script che può essere eseguito dalla riga di comando per avviare i due processi. Salva il codice sul computer come create_worker.py ed eseguilo con python create_worker.py 0 e poi python create_worker.py 1. Per farlo serviranno terminali separati, poiché gli script non terminano in maniera autonoma (restano in attesa di istruzioni).