2016-06-09 42 views

risposta

23

Dipende un po 'dalla prospettiva da cui lo si guarda. In qualsiasi configurazione multi-*, multi-GPU o multi-macchina, è necessario decidere come suddividere il calcolo tra le risorse parallele. In una configurazione a un nodo singolo, multi-GPU, ci sono due scelte molto ragionevoli:

(1) Parallelismo intra-modello. Se un modello ha percorsi di calcolo lunghi e indipendenti, è possibile dividere il modello su più GPU e ciascuno di essi calcola una parte di esso. Ciò richiede un'attenta comprensione del modello e delle dipendenze computazionali.

(2) Formazione ripetuta. Avviare più copie del modello, addestrarle e quindi sincronizzare il loro apprendimento (i gradienti applicati ai loro pesi, & bias).

Il nostro released Inception model ha alcuni buoni diagrammi nel readme che mostrano come funzionano sia la multi-GPU che la formazione distribuita.

Ma a tl; dr tale fonte: in una configurazione multi-GPU, è spesso meglio aggiornare in modo sincrono il modello memorizzando i pesi sulla CPU (beh, nella sua DRAM allegata). Ma in una configurazione multi-macchina, usiamo spesso un "server dei parametri" separato che memorizza e propaga gli aggiornamenti di peso. Per ridimensionarlo su un numero elevato di repliche, è possibile suddividere i parametri su più server parametri.

Con le GPU e server di parametri multipli, vi troverete di essere più attenti a posizionamento dispositivo utilizzando costrutti quali with tf.device('/gpu:1'), o l'immissione pesi sui server dei parametri usando tf.train.replica_device_setter assegnare su /job:ps o /job:worker.

In generale, l'allenamento su un gruppo di GPU in una singola macchina è molto più efficiente: ci vogliono più di 16 GPU distribuite per eguagliare le prestazioni di 8 GPU in una singola macchina, ma la formazione distribuita consente di scalare numeri ancora più grandi e sfruttare più CPU.

+0

Grazie mille per la spiegazione! – xyd

+0

Il collegamento iniziale è rotto. [Qui] (https://github.com/tensorflow/models/blob/16e4679834e1bf3e805703b197d377e35504fa09/tutorials/image/cifar10/cifar10_multi_gpu_train.py) è un altro esempio. – Albert

0

Bene fino a poco tempo fa non esisteva una versione cluster open source del flusso tensoriale, solo una singola macchina con zero o più GPU. La nuova versione v0.9 può o non può aver cambiato le cose. L'articolo nella documentazione di rilascio originale (ottobre 2015) ha mostrato che Google ha soluzioni basate su cluster, ma non le hanno aperte.

Ecco cosa whitepaper dice:

3,2 Multi-dispositivo di esecuzione Una volta che un sistema ha più dispositivi, ci sono due complicazioni principali: decidere quale dispositivo per posizionare il calcolo per ciascun nodo nel grafico, e quindi gestendo la necessaria comunicazione di dati attraverso i limiti del dispositivo implicita da queste decisioni di posizionamento . Questa sottosezione tratta questi due numeri

+0

Grazie per la risposta!Tuttavia, hanno annunciato di aver rilasciato tensorflow distribuito con la loro v0.8, e hanno una pagina di tutorial per questo: https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html. Non è questo il vero flusso di tensione distribuito? – xyd

+0

questa è una grande notizia! - speriamo che qualcuno intervenga su chi è "pronto a fare" su questo. – GavinBrelstaff

Problemi correlati