J'ai installé tensorflow dans mon ubuntu 16.04 en utilisant la deuxième réponse [ici][1] avec l'installation intégrée d'ubuntu apt cuda.
Maintenant ma question est comment puis-je tester si tensorflow utilise vraiment le gpu ? J'ai un gtx 960m gpu. Quand je import tensorflow
, voici la sortie
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
Est-ce que cette sortie est suffisante pour vérifier si tensorflow utilise le gpu ? [1] : https://devtalk.nvidia.com/default/topic/936429/-solved-tensorflow-with-gpu-in-anaconda-env-ubuntu-16-04-cuda-7-5-cudnn-/
Non, je ne pense pas que l'expression " bibliothèque CUDA ouverte " soit suffisante pour le savoir, car les différents nœuds du graphe peuvent se trouver sur des appareils différents.
Pour savoir quel périphérique est utilisé, vous pouvez activer l'enregistrement du placement des périphériques comme ceci :
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Vérifiez votre console pour ce type de sortie.
[ ![][1]][1]
En dehors de l'utilisation de sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
qui est décrite dans d'autres réponses ainsi que dans la [documentation][1] officielle de TensorFlow, vous pouvez essayer d'assigner un calcul au gpu et voir si vous avez une erreur.
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))
Ici
Si vous avez un GPU et que vous pouvez l'utiliser, vous verrez le résultat. Sinon, vous verrez une erreur avec un long suivi de pile. A la fin, vous aurez quelque chose comme ceci :
Impossible d'affecter un périphérique au nœud 'MatMul' : Could not satisfy explicit spécification de périphérique '/dispositif:GPU:0' ; car aucun périphérique correspondant à cette spécification n'est enregistré dans ce processus
Récemment, quelques fonctions utiles sont apparues dans TF :
Vous pouvez également vérifier si des périphériques sont disponibles dans la session :
with tf.Session() as sess:
devices = sess.list_devices()
devices
vous retournera quelque chose comme
[_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)
[1] : https://www.tensorflow.org/tutorials/using_gpu [2] : https://www.tensorflow.org/api_docs/python/tf/test/is_gpu_available [3] : https://www.tensorflow.org/api_docs/python/tf/test/gpu_device_name
Cela confirmera que tensorflow utilise le GPU lors de la formation également ?
Codes
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Sortie
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