Keras con el backend TensorFlow sin GPU
Construí la versión de gpu de la imagen del acopladorhttps://github.com/floydhub/dl-docker con keras versión 2.0.0 y tensorflow versión 0.12.1. Luego ejecuté el tutorial mnisthttps://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py pero me di cuenta de que keras no está usando GPU. A continuación se muestra la salida que tengo
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.
¿Alguien puede decirme si hay algunas configuraciones que deben realizarse antes de que Keras use la GPU? Soy muy nuevo en todo esto, así que avíseme si necesito proporcionar más información.
He instalado los requisitos previos como se menciona en elpágina
Instale Docker siguiendo la guía de instalación para su plataforma:https://docs.docker.com/engine/installation/Puedo iniciar la imagen del acoplador
docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash
Solo versión GPU: instale los controladores de Nvidia en su máquina directamente desde Nvidia o siga las instruccionesaquí. Tenga en cuenta que no tiene que instalar CUDA o cuDNN. Estos están incluidos en el contenedor Docker.Soy capaz de ejecutar el último paso.
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)
Solo versión GPU: Instale nvidia-docker:https://github.com/NVIDIA/nvidia-docker, siguiendo las instrucciones aquí. Esto instalará un reemplazo para la CLI de Docker. Se encarga de configurar el entorno del controlador del host Nvidia dentro de los contenedores Docker y algunas otras cosas.Soy capaz de correr el pasoaquí
# 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 |
+-----------------------------------------------------------------------------+
También puedo ejecutar el comando nvidia-docker para iniciar una imagen compatible con gpu.
Lo que he intentado
He probado las siguientes sugerencias a continuación
Compruebe si ha completado el paso 9 de este tutorial (https://github.com/ignaciorlando/skinner/wiki/Keras-and-TensorFlow-installation ) Nota: las rutas de sus archivos pueden ser completamente diferentes dentro de la imagen de la ventana acoplable, tendrá que ubicarlas de alguna manera.Agregué las líneas sugeridas a mi bashrc y verifiqué que el archivo bashrc esté actualizado.
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
Para importar los siguientes comandos en mi archivo python
import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"]="0"
Desafortunadamente, ambos pasos, realizados por separado o juntos, no resolvieron el problema. Keras todavía se está ejecutando con la versión de CPU de tensorflow como back-end. Sin embargo, podría haber encontrado el posible problema. Verifiqué la versión de mi tensorflow a través de los siguientes comandos y encontré dos de ellos.
Esta es la versión de la CPU
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
Y esta es la versión de 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
Curiosamente, el resultado muestra que Keras está utilizando la versión 1.3.0 de tensorflow, que es la versión de la CPU y no 0.12.1, la versión de la GPU
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__)
Salida
root@08b5fff06800:~/sharedfolder# python test.py
Using TensorFlow backend.
Tensorflow: 1.3.0
Supongo que ahora necesito descubrir cómo hacer que los keras usen la versión de gpu de tensorflow.