2016-06-02 27 views
6

Sono abbastanza nuovo a tensorflow. Ho usato theano per lo sviluppo dell'apprendimento profondo. Noto una differenza tra questi due, cioè dove i dati di input possono essere memorizzati.dati di allenamento del negozio a carico di tensorflow sulla memoria GPU

In Theano, supporta la variabile condivisa per memorizzare i dati di input sulla memoria GPU per ridurre il trasferimento di dati tra CPU e GPU.

In tensorflow, è necessario alimentare i dati in segnaposto ei dati possono provenire dalla memoria o dai file della CPU.

La mia domanda è: è possibile memorizzare i dati di input sulla memoria GPU per tensorflow? o lo fa già in qualche modo magico?

Grazie.

+1

Ecco un esempio completo di che - [mnist fully_connected_preloaded.py] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/how_tos/reading_data/fully_connected_preloaded.py) –

+0

@YaroslavBulatov Grazie ! – xyd

+0

@YaroslavBulatov non sei sicuro di esserne a conoscenza, ma il codice che hai fornito esegue un'epoca a 28 secondi, il che è terribile. (Btw è su GPU). Inoltre, non riesco a trovare nemmeno un singolo esempio di tensorflow di buona esecuzione su Internet, che è molto strano rispetto ad altri framework di deep learning come theano e torcia. È perché tensorflow è molto più lento degli altri? Altrimenti, perché nessuno dei creatori tenta di risolvere questo problema mentre tutti i nuovi utenti di tensorflow si complimentano per questo? – zwlayer

risposta

12

Se i dati si adattano alla GPU, è possibile caricarli in una costante su GPU, ad es. una matrice NumPy:

with tf.device('/gpu:0'): 
    tensorflow_dataset = tf.constant(numpy_dataset) 

Un modo per estrarre minibatches sarebbe tagliare tale array ad ogni passo invece di alimentare utilizzando tf.slice:

batch = tf.slice(tensorflow_dataset, [index, 0], [batch_size, -1]) 

Ci sono molte possibili variazioni intorno questo tema, compreso l'uso code per precaricare dinamicamente i dati in GPU.

+0

Grazie mille! Lo esaminerò. – xyd

1

È possibile, come è stato indicato, ma accertarsi che sia effettivamente utile prima di dedicare troppi sforzi ad esso. Almeno al momento, non tutte le operazioni supportano la GPU e l'elenco delle operazioni senza tale supporto include alcune operazioni di batch e shuffling comuni. Non ci può essere alcun vantaggio nel mettere i tuoi dati sulla GPU se la prima fase dell'elaborazione è spostarla nella CPU.

Prima di tentare di refactoring del codice per utilizzare l'archiviazione on-GPU, provare almeno una delle seguenti:

1) iniziare la sessione con la registrazione posizionamento del dispositivo a registrare i ops vengono eseguiti su quali dispositivi:

config = tf.ConfigProto(log_device_placement=True) 
sess = tf.Session(config=config) 

2) Provare a posizionare manualmente il grafico su GPU inserendo la sua definizione in un blocco with tf.device('/gpu:0'):. Questo genererà eccezioni se le operazioni non sono supportate dalla GPU.

Problemi correlati