ubuntu %matplotlib - Comment savoir si tensorflow utilise l'accélération gpu depuis l'intérieur de python shell?




inline interactive (10)

J'ai installé tensorflow dans mon Ubuntu 16.04 en utilisant la deuxième réponse here avec l'installation intégrée d'ubuntu apt cuda.

Maintenant, ma question est comment puis-je tester si tensorflow utilise vraiment gpu? J'ai un gpu gtx 960m. Quand import tensorflow c'est l'outp

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

Cette sortie est-elle suffisante pour vérifier si tensorflow utilise gpu?


Answers

Non, je ne pense pas que "open CUDA library" suffise à le dire, car différents nœuds du graphe peuvent être sur des périphériques différents.

Pour savoir quel périphérique est utilisé, vous pouvez activer le placement de périphériques de journal comme suit:

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

Je trouve que l'interrogation du GPU à partir de la ligne de commande est la plus simple:

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 d'arrière-plan, le pid des jobs -p doit correspondre au pid de nvidia-smi


Cela devrait donner la liste des périphériques disponibles pour 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)

Je pense qu'il existe un moyen plus simple 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 journaux verbeux.


En plus d'utiliser sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) qui est décrit dans d'autres réponses ainsi que dans la documentation officielle de TF, vous pouvez essayer d'assigner un calcul au GPU et voir si vous avez un 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 que vous pouvez l'utiliser, vous verrez le résultat. Sinon, vous verrez une erreur avec une longue pile. En fin de compte, vous aurez quelque chose comme ceci:

Impossible d'affecter un périphérique au noeud 'MatMul': Impossible de satisfaire la spécification de périphérique explicite '/ device: GPU: 0' car aucun périphérique correspondant à cette spécification n'est enregistré dans ce processus


Ok, lancez d'abord 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 avons seulement import TensorFlow mais que nous n'avons pas encore utilisé de GPU, les statistiques d'utilisation seront:

Observez comment l'utilisation de la mémoire GPU est très inférieure (~ 200 Mo).

Maintenant, chargeons le GPU dans notre code. Comme indiqué dans la tf documentation , faites:

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

Maintenant, les statistiques de surveillance doivent afficher la mémoire d'utilisation du GPU mise à jour comme ci-dessous:

Observez comment notre processus Python du shell ipython utilise 7,7 Go de la mémoire du GPU.

PS Vous pouvez continuer à regarder ces statistiques pendant que le code est en cours d'exécution, pour voir à quel point l'utilisation du GPU est intense.


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())

Je préfère utiliser nvidia-smi pour surveiller l'utilisation du GPU. Si elle augmente de façon significative lorsque vous démarrez votre programme, c'est un signe fort que votre tensorflow utilise GPU.


Le morceau de code suivant devrait vous donner tous les dispositifs disponibles pour tensorflow.

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

Sortie d'échantillon

[name: "/ cpu: 0" device_type: "CPU" limite de mémoire: 268435456 localité {} incarnation: 4402277519343584096,

nom: "/ gpu: 0" type_périphérique: "GPU" memory_limit: 6772842168 localité {bus_id: 1} incarnation: 7471795903849088328 physical_device_desc: "périphérique: 0, nom: GeForce GTX 1070, code d'accès PCI: 0000: 05: 00.0"]


Eh bien, ce serait un moyen

q = request.GET.get('q')
if q:
    print q

Un briefer (mais pas supérieur, en raison de l'appel à imprimer de rien) façon serait

print request.GET.get('q') or '',




python ubuntu tensorflow