Perché l'addestramento di RNN non utilizza il 100% della GPU?


8

Mi chiedo perché l'addestramento di RNN in genere non utilizzi il 100% della GPU.

Ad esempio, se eseguo questo benchmark RNN su un Maxwell Titan X su Ubuntu 14.04.4 LTS x64, l'utilizzo della GPU è inferiore al 90%:

inserisci qui la descrizione dell'immagine

Il benchmark è stato lanciato usando il comando:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

Come posso diagnosticare il collo di bottiglia?

Risposte:


5

Ottengo lo stesso tasso di utilizzo quando alleno modelli usando Tensorflow. Il motivo è abbastanza chiaro nel mio caso, sto scegliendo manualmente un batch casuale di campioni e chiamando l'ottimizzazione per ciascun batch separatamente.

Ciò significa che ogni lotto di dati è nella memoria principale, quindi viene copiato nella memoria GPU dove si trova il resto del modello, quindi la propagazione avanti / indietro e l'aggiornamento vengono eseguiti in-gpu, quindi l'esecuzione viene restituita al mio codice dove prendo un altro batch e chiamare l'ottimizzazione su di esso.

Esiste un modo più veloce per farlo se impieghi qualche ora a configurare Tensorflow per eseguire il caricamento batch in parallelo da record TF pre-preparati.

Mi rendo conto che potresti usare o meno tensorflow sotto keras, ma poiché la mia esperienza tende a produrre numeri di utilizzo molto simili, sto andando fuori di testa suggerendo che esiste un collegamento causale ragionevolmente probabile da trarre da queste correlazioni. Se il framework sta caricando ciascun batch dalla memoria principale nella GPU senza l'ulteriore efficienza / complessità del caricamento asincrono (che la stessa GPU può gestire), questo sarebbe un risultato previsto.



Non posso dire di aver mai pensato di provare a monitorarlo, ma ora mi incuriosisci.
davidparks21,

Ottengo sempre circa il 90% anche con le fotocamere. Non ho mai controllato il suo codice sorgente, ma mi aspetto che un framework del genere fornisca i batch alla GPU in parallelo (almeno facoltativamente se puoi permetterti la memoria .. perché non dovrebbe?).
stmax,

1
Keras è un involucro attorno a Tensorflow o Theano. Ho solo esperienza in Tensorflow, quindi parlando da quel punto di vista il processo necessario per abilitare il caricamento asincrono dei dati richiede di preelaborare i dati in un formato binario specifico di Tensorflow. Presumo che Theano abbia un modo equivalente di farlo. La maggior parte dei modelli probabilmente inizia con il caricamento della memoria per batch (farlo funzionare prima dell'ottimizzazione per la velocità). E poiché la carta di Keras è "mantienila semplice", potrebbe non andare inaspettato che avrebbero adottato l'approccio più diretto / semplice solo per una perdita di efficienza del 10% circa.
davidparks21,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.