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
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)
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
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
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.
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 ...
À 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
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.