web-dev-qa-db-fra.com

Keras avec le backend TensorFlow n'utilisant pas de GPU

J'ai construit la version gpu de l'image du menu fixe https://github.com/floydhub/dl-docker avec keras version 2.0.0 et tensorflow version 0.12.1. J'ai ensuite lancé le tutoriel mnist https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py mais je me suis rendu compte que keras n'utilise pas de GPU. Ci-dessous la sortie que j'ai

root@b79b8a57fb1f:~/sharedfolder# python test.py
Using TensorFlow backend.
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz
x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
2017-09-06 16:26:54.866833: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
2017-09-06 16:26:54.866855: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
2017-09-06 16:26:54.866863: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
2017-09-06 16:26:54.866870: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
2017-09-06 16:26:54.866876: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.

Quelqu'un peut-il me faire savoir si certains paramètres doivent être définis avant l'utilisation de GPU par keras? Je suis très nouveau dans tous ces domaines alors faites-le moi savoir si j'ai besoin de fournir plus d'informations. 

J'ai installé les prérequis mentionnés sur la page

Je suis capable de lancer l'image du docker 

docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash
  • Version GPU uniquement: Installez les pilotes Nvidia sur votre ordinateur directement depuis Nvidia ou suivez les instructions ici . Notez qu'il n'est pas nécessaire d'installer CUDA ou cuDNN. Ceux-ci sont inclus dans le conteneur Docker. 

Je suis capable de faire la dernière étape 

cv@cv-P15SM:~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  375.66  Mon May  1 15:29:16 PDT 2017
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
  • Version GPU uniquement: Installez nvidia-docker: https://github.com/NVIDIA/nvidia-docker en suivant les instructions fournies ici. Cela installera un remplacement pour la CLI de docker. Il s’occupe de la configuration de l’environnement du pilote Nvidia Host dans les conteneurs Docker et de quelques autres choses.

Je suis capable de courir le pas ici

# Test nvidia-smi
cv@cv-P15SM:~$ nvidia-docker run --rm nvidia/cuda nvidia-smi

Thu Sep  7 00:33:06 2017       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.66                 Driver Version: 375.66                    |
|-------------------------------+----------------------+----------------------+
| 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 780M    Off  | 0000:01:00.0     N/A |                  N/A |
| N/A   55C    P0    N/A /  N/A |    310MiB /  4036MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
+-----------------------------------------------------------------------------+

Je peux également exécuter la commande nvidia-docker pour lancer une image prise en charge par le gpu.

Ce que j'ai essayé

J'ai essayé les suggestions suivantes ci-dessous 

  1. Vérifiez si vous avez terminé l’étape 9 de ce didacticiel ( https://github.com/ignaciorlando/skinner/wiki/Keras-and-TensorFlow-installation ). Remarque: vos chemins de fichiers peuvent être complètement différents dans cette image de menu fixe, vous devrez les localiser d'une manière ou d'une autre. 

J'ai ajouté les lignes suggérées à mon bashrc et j'ai vérifié que le fichier bashrc était mis à jour.

echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-8.0/lib64:/usr/local/cuda-8.0/extras/CUPTI/lib64' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda-8.0' >> ~/.bashrc
  1. Pour importer les commandes suivantes dans mon fichier python

    import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"]="0"

Les deux étapes, effectuées séparément ou ensemble, n'ont malheureusement pas résolu le problème. Keras est toujours en cours d'exécution avec la version CPU de tensorflow comme back-end. Cependant, j'ai peut-être trouvé le problème possible. J'ai vérifié la version de mon tensorflow via les commandes suivantes et en ai trouvé deux.

Ceci est la version du processeur

root@08b5fff06800:~# pip show tensorflow
Name: tensorflow
Version: 1.3.0
Summary: TensorFlow helps the tensors flow
Home-page: http://tensorflow.org/
Author: Google Inc.
Author-email: [email protected]
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: tensorflow-tensorboard, six, protobuf, mock, numpy, backports.weakref, wheel

Et ceci est la version GPU

root@08b5fff06800:~# pip show tensorflow-gpu
Name: tensorflow-gpu
Version: 0.12.1
Summary: TensorFlow helps the tensors flow
Home-page: http://tensorflow.org/
Author: Google Inc.
Author-email: [email protected]
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: mock, numpy, protobuf, wheel, six

Fait intéressant, la sortie montre que keras utilise la version 1.3.0 de tensorflow, qui est la version du processeur et non la version 0.12.1, la version du processeur graphique.

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

import tensorflow as tf
print('Tensorflow: ', tf.__version__)

Sortie

root@08b5fff06800:~/sharedfolder# python test.py
Using TensorFlow backend.
Tensorflow:  1.3.0

Je suppose que je dois maintenant comprendre comment faire en sorte que keras utilise la version gpu de tensorflow.

8
Kong

C'est jamais une bonne idée d'avoir les deux paquets tensorflow et tensorflow-gpu installés côte à côte (la seule fois où cela m'est arrivé accidentellement, Keras utilisait la version CPU). 

Je suppose que je dois maintenant comprendre comment faire en sorte que keras utilise la version gpu de tensorflow.

Vous devriez simplement supprimer les deux paquets de votre système, puis réinstaller tensorflow-gpu [MIS À JOUR après le commentaire]:

pip uninstall tensorflow tensorflow-gpu
pip install tensorflow-gpu

En outre, il est difficile de comprendre pourquoi vous semblez utiliser le conteneur floydhub/dl-docker:cpu, alors que, conformément aux instructions, vous devriez utiliser le floydhub/dl-docker:gpu un ...

17
desertnaut

À l'avenir, vous pourrez essayer d'utiliser des environnements virtuels pour séparer le processeur et le GPU de tensorflow, par exemple:

conda create --name tensorflow python=3.5
activate tensorflow
pip install tensorflow

ET

conda create --name tensorflow-gpu python=3.5
activate tensorflow-gpu
pip install tensorflow-gpu
2
juicygranpa

J'ai eu le même genre de problème - keras n'a pas utilisé mon GPU. J'ai eu tensorflow-gpu installé conformément aux instructions de conda, mais après l'installation de keras, il n'est tout simplement pas répertorié comme GPU comme périphérique disponible. J'ai réalisé que l'installation de keras ajoute le paquet tensorflow! J'ai donc eu les paquets tensorflow et tensorflow-gpu. J'ai trouvé que le paquet keras-gpu est disponible. Après la désinstallation complète de keras, tensorflow, tensorflow-gpu et installation de tensorflow-gpu, keras-gpu, le problème a été résolu.

1
Deemah