See: Using GPUs
dispositivo manuale posizionamento
Se desiderate una particolare operazione per l'esecuzione su un dispositivo di vostra scelta invece di ciò che viene selezionato automaticamente per te, puoi usare con tf.device
per creare un contesto di dispositivo in modo che tutte le operazioni all'interno di quel contesto abbiano la stessa assegnazione di dispositivo.
# Creates a graph.
with tf.device('/cpu:0'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))
Vedrete che ora a e b sono assegnati a cpu:0
. Poiché un dispositivo non è stato esplicitamente specificato per l'operazione MatMul
, il runtime TensorFlow ne sceglierà uno in base all'operazione e ai dispositivi disponibili (gpu: 0 in questo esempio) e copia automaticamente i tensori tra i dispositivi, se necessario.
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Tesla K40c, pci bus
id: 0000:05:00.0
b: /job:localhost/replica:0/task:0/cpu:0
a: /job:localhost/replica:0/task:0/cpu:0
MatMul: /job:localhost/replica:0/task:0/gpu:0
[[ 22. 28.]
[ 49. 64.]]
All'inizio Risposta 2.
See: Using GPUs
Utilizzando una singola GPU su un sistema multi-GPU
Se si dispone di più di una GPU nel vostro sistema, la GPU con l'ID più basso verrà selezionata per impostazione predefinita. Se si desidera eseguire su una GPU diverso, sarà necessario specificare la preferenza in modo esplicito:
# Creates a graph.
with tf.device('/gpu:2'):
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print sess.run(c)
All'inizio di risposta 1.
Da CUDA_VISIBLE_DEVICES – Masking GPUs
La vostra applicazione CUDA devi indirizzare una GPU specifica? Se si è in cui è stato scritto codice GPU abilitato, in genere si utilizza una query dispositivo su selezionando le GPU desiderate. Tuttavia, una soluzione rapida e semplice per il test consiste nell'utilizzare la variabile di ambiente CUDA_VISIBLE_DEVICES su per limitare i dispositivi rilevati dall'applicazione CUDA. Questo può essere utile se si sta tentando di condividere risorse su un nodo o si desidera che esegua la GPU abilitata per il targeting di una GPU specifica.
ambiente sintassi variabile
Risultati
CUDA_VISIBLE_DEVICES = 1 solo dispositivo 1 sarà visto CUDA_VISIBLE_DEVICES = 0,1 Devices 0 e 1 saranno visibili CUDA_VISIBLE_DEVICES =”0,1” Idem come sopra, le virgolette sono opzionali CUDA_VISIBLE_DEVICES = 0,2,3 I dispositivi 0, 2, 3 saranno visibili; dispositivo 1 mascherato
CUDA enumera i dispositivi visibili a partire da zero. Nell'ultimo caso , i dispositivi 0, 2, 3 appariranno come dispositivi 0, 1, 2. Se si modifica dall'ordine della stringa a "2,3,0", i dispositivi 2,3,0 verranno enumerati come 0,1,2 rispettivamente. Se CUDA_VISIBLE_DEVICES è impostato su un dispositivo che non esiste , tutti i dispositivi verranno mascherati. È possibile specificare un mix di numeri di dispositivo validi e non validi. Tutti i dispositivi prima del valore non valido verranno enumerati, mentre tutti i dispositivi dopo il valore non valido saranno mascherati.
Per determinare l'ID del dispositivo per l'hardware disponibile nel sistema, è possibile eseguire l'eseguibile di deviceQuery NVIDIA incluso nell'SDK CUDA. Buona programmazione!
Chris Mason
Trovato [un modo per forzare TF non occupare risorse di interi? (riguardo multi-gpu)] (https://groups.google.com/a/tensorflow.org/forum/#!searchin/discuss/gpu/discuss/QmMqfikKxlU/BC5P4XrDEgAJ) che porta a [CUDA_VISIBLE_DEVICES - Masking GPUs] (http : //acceleware.com/blog/cudavisibledevices-masking-gpus) –
Ciò aiuta davvero. Ma perché TensorFlow dovrebbe inizializzarsi automaticamente per tutti i dispositivi sulla macchina? Tra una risposta e l'altra accetterò. – Zk1001
TensorFlow è destinato alla "ricerca per la produzione". Sembra che l'impostazione predefinita per utilizzare tutta la potenza di calcolo soddisfi le aspettative di ottenere il suo lavoro fatto al più presto. Grande che può essere sintonizzato, in realtà. Ma hai menzionato 3 GPU e solo 2 mostrano nei tuoi log. Perché quel? –