2015-12-23 24 views
6

Nel tutorial CIFAR-10, ho notato che le variabili sono collocate nella memoria della CPU, ma è indicato in cifar10-train.py che è stato addestrato con una singola GPU.Variabili su CPU, allenamento/gradienti su GPU

Sono abbastanza confuso .. sono lo strato/attivazioni immagazzinate nella GPU? O in alternativa, i gradienti sono memorizzati nella GPU? Altrimenti, sembrerebbe che la memorizzazione di variabili sulla CPU non faccia alcun uso della GPU - tutto è memorizzato nella memoria della CPU, quindi solo la CPU viene usata per la propagazione avanti/indietro.

Se la GPU è stata utilizzata per la propagazione f/b, non sarebbe uno spreco dovuto a dati di shuffling di latenza CPU < -> GPU?

risposta

5

Infatti, in cifar10-treno le attivazioni e gradienti sono su GPU, solo i parametri sono CPU. Hai ragione che questo non è ottimale per l'allenamento con una sola GPU a causa del costo della copia dei parametri tra CPU e GPU. Ho il sospetto che il motivo è fatto in questo modo è quello di avere una singola libreria per i modelli a singola GPU e multi-GPU, come nel caso multi-GPU, è probabilmente più veloce di avere parametri sulla CPU. È possibile verificare facilmente ciò SpeedUp si può ottenere spostando tutte le variabili di GPU, è sufficiente rimuovere la "con tf.device ('/ cpu: 0')" in "_variable_on_cpu" in cifar10.py.

Problemi correlati