Ho installato tensorflow nella mia ubuntu 16.04 usando la seconda risposta qui con l'installazione di apt cuda integrata in ubuntu.
Ora la mia domanda è come posso testare se tensorflow sta davvero usando la gpu? Ho una gtx 960m gpu. Quando importo tensorflow, questo è l'output
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
Questo output è sufficiente per controllare se tensorflow sta usando la gpu?
No, non credo che "open CUDA library" sia sufficiente per dirlo, perché diversi nodi del grafico possono essere su dispositivi diversi.
Per scoprire quale dispositivo è usato, puoi abilitare il posizionamento dei dispositivi di log in questo modo:
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Controllate la vostra console per questo tipo di output.
Oltre a usare sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
che è delineato in altre risposte così come nella documentazione ufficiale di TensorFlow, puoi provare ad assegnare un calcolo alla gpu e vedere se hai un errore.
import tensorflow as tf
with tf.device('/gpu: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)
with tf.Session() as sess:
print (sess.run(c))
Qui
Se avete una gpu e potete usarla, vedrete il risultato. Altrimenti vedrete un errore con un lungo stacktrace. Alla fine avrete qualcosa come questo:
Impossibile assegnare un dispositivo al nodo 'MatMul': Could not satisfy explicit
specifica del dispositivo '/device:GPU:0' perché nessun dispositivo corrispondente a quella specifica sono registrati in questo processo
Recentemente sono apparse alcune utili funzioni in TF:
Si può anche controllare se ci sono dispositivi disponibili nella sessione:
with tf.Session() as sess:
devices = sess.list_devices()
devices
ti restituirà qualcosa come
[_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:CPU:0, CPU, -1, 4670268618893924978),
_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 6127825144471676437),
_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 16148453971365832732),
_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 10003582050679337480),
_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, 5678397037036584928)
Questo confermerà che tensorflow usando la GPU durante la formazione anche ?
{\an8}Codice
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Output
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GT 730
major: 3 minor: 5 memoryClockRate (GHz) 0.9015
pciBusID 0000:01:00.0
Total memory: 1.98GiB
Free memory: 1.72GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0