Comment dire si tensorflow utilise l'accélération gpu depuis l'intérieur de Python shell?

j'ai installé tensorflow dans mon ubuntu 16.04 en utilisant la deuxième réponse ici avec l'installation Cuda apt de Ubuntu.

maintenant, ma question Est de savoir comment je peux tester si tensorflow utilise vraiment gpu? J'ai un gpu gtx 960 M. Quand je import tensorflow c'est 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 gpu ?

126
demandé sur Tamim Addari 2016-06-24 12:14:23

11 réponses

Non, Je ne pense pas que "open CUDA library" soit suffisant pour le dire, parce que différents noeuds du graphe peuvent être sur différents appareils.

pour savoir quel appareil est utilisé, vous pouvez activer le log device placement comme ceci:

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

vérifiez sur votre console ce type de sortie.

143
répondu Yao Zhang 2018-08-29 02:24:19

en dehors de l'utilisation de sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) qui est décrit dans d'autres réponses ainsi que dans le TF officiel documentation , vous pouvez essayer d'assigner un calcul à la 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

  • "/cpu:0": le CPU de votre machine.
  • "/ gpu:0": le GPU de votre machine, si vous en avez un.

si vous avez un gpu et pouvez l'utiliser, vous verrez le résultat. Sinon, vous verrez une erreur avec une longue stacktrace. À la fin vous aurez quelque chose comme ceci:

ne peut pas assigner un périphérique au noeud "MatMul": ne peut pas satisfaire aux exigences explicites spécification de l'appareil "/device:GPU:0 " parce qu'il n'y a pas de dispositifs correspondant à cette spécification spécification sont enregistrés dans ce processus

130
répondu Salvador Dali 2017-05-10 21:51:06

suivant morceau de code devrait vous donner tous les appareils disponibles à tensorflow.

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Sortie De L'Échantillon

[nom: "/ cpu: 0" device_type: "CPU" memory_limit: 268435456 localité { } incarnation: 4402277519343584096,

nom: "/gpu:0" device_type: "GPU" memory_limit: 6772842168 localité { bus_id: 1 } incarnation: 7471795903849088328 physical_device_desc: "périphérique: 0, Nom: GeForce GTX 1070, bus pci id: 0000: 05:00.0" ]

44
répondu Sheraz 2018-01-23 04:27:36

cela confirmera que tensorflow utilisant GPU tout en s'entraînant aussi ?

Code

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
25
répondu himanshurobo 2016-12-06 08:24:35

je pense qu'il y a un moyen plus facile d'y parvenir.

import tensorflow as tf
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

il imprime habituellement comme

Default GPU Device: /device:GPU:0

cela me semble plus facile que ces logs verbeux.

21
répondu Ishan Bhatt 2018-03-24 09:55:35

cette rubrique doit donner la liste des dispositifs disponibles pour le Tensorflow (sous Py-3.6):

tf = tf.Session(config=tf.ConfigProto(log_device_placement=True))
tf.list_devices()
# _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456)
11
répondu f0nzie 2017-12-19 22:59:48

je préfère utiliser nvidia-smi pour surveiller L'utilisation du GPU. s'il augmente de manière significative lorsque vous commencez votre programme, c'est un signe fort que votre tensorflow utilise GPU.

10
répondu scott huang 2017-09-13 03:38:00

en plus des autres réponses, ce qui suit devrait vous aider à vous assurer que votre version de tensorflow inclut le support GPU.

import tensorflow as tf
print(tf.test.is_built_with_cuda())
8
répondu karaspd 2018-06-05 22:07:51

je trouve qu'il est plus facile d'interroger le gpu depuis la ligne de commande:

nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.98                 Driver Version: 384.98                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980 Ti  Off  | 00000000:02:00.0  On |                  N/A |
| 22%   33C    P8    13W / 250W |   5817MiB /  6075MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1060      G   /usr/lib/xorg/Xorg                            53MiB |
|    0     25177      C   python                                      5751MiB |
+-----------------------------------------------------------------------------+

si votre apprentissage est un processus de fond le pid de jobs -p doit correspondre au pid de nvidia-smi

7
répondu Tim 2017-12-26 17:07:20

Ok, premier lancement d'un ipython shell depuis le terminal et import TensorFlow

$ ipython --pylab
Python 3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: Qt5Agg

In [1]: import tensorflow as tf

maintenant, nous pouvons regarder L'utilisation de la mémoire GPU en utilisant la commande:

# realtime update for every 2s
$ watch -n 2 nvidia-smi

puisque nous n'avons que import ed TensorFlow mais n'avons pas encore utilisé de GPU, les statistiques d'utilisation seront:

tf non-gpu usage

observez comment le GPU l'utilisation de la mémoire est très moindre (~200 Mo).



maintenant, chargeons le GPU dans notre code. Comme indiqué dans tf documentation , n':

In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

maintenant, les statistiques watch devraient afficher la mémoire D'utilisation GPU mise à jour comme ci-dessous:

tf gpu-watch

observez comment notre Python processus depuis le shell ipython utilise 7,7 Go de la mémoire GPU.


P.S. vous pouvez continuer en regardant ces statistiques alors que le code est en cours d'exécution, pour voir l'intensité de L'utilisation du GPU.

6
répondu kmario23 2018-05-26 02:58:55

Exécuter la ligne suivante dans Jupyter,

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

si vous avez configuré votre environnement correctement, vous obtiendrez la sortie suivante dans le terminal où vous avez lancé "Jupyter notebook " ,

"
2017-10-05 14:51:46.335323: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro K620, pci bus id: 0000:02:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0
2017-10-05 14:51:46.337418: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\tensorflow\core\common_runtime\direct_session.cc:265] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0

vous pouvez voir ici que j'utilise TensorFlow avec un Quodo Nvidia K620.

4
répondu wafflecat 2017-10-05 06:53:38