Keras com back-end do TensorFlow sem GPU
Criei a versão gpu da imagem do dockerhttps://github.com/floydhub/dl-docker com keras versão 2.0.0 e tensorflow versão 0.12.1. Eu executei o tutorial mnisthttps://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py mas percebi que o keras não está usando GPU. Abaixo está a saída que eu tenho
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.
Alguém pode me informar se há algumas configurações que precisam ser feitas antes do keras usar a GPU? Sou muito novo em tudo isso; por isso, deixe-me saber se preciso fornecer mais informações.
Eu instalei os pré-requisitos, conforme mencionado nopágina
Instale o Docker seguindo o guia de instalação da sua plataforma:https://docs.docker.com/engine/installation/Sou capaz de iniciar a imagem do docker
docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash
Somente versão da GPU: instale os drivers Nvidia na sua máquina diretamente da Nvidia ou siga as instruçõesaqui. Observe que você não precisa instalar o CUDA ou o cuDNN. Eles estão incluídos no contêiner do Docker.Eu sou capaz de executar o último passo
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)
Somente versão da GPU: Instale a nvidia-docker:https://github.com/NVIDIA/nvidia-docker, seguindo as instruções aqui. Isso instalará uma substituição para a janela de encaixe CLI. Ele cuida da configuração do ambiente do driver host da Nvidia dentro dos contêineres do Docker e de algumas outras coisas.Eu sou capaz de executar o passoaqui
# 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 |
+-----------------------------------------------------------------------------+
Também sou capaz de executar o comando nvidia-docker para iniciar uma imagem suportada por gpu.
O que eu tentei
Eu tentei as seguintes sugestões abaixo
Verifique se você concluiu a etapa 9 deste tutorial (https://github.com/ignaciorlando/skinner/wiki/Keras-and-TensorFlow-installation ) Nota: Seus caminhos de arquivo podem ser completamente diferentes dentro da imagem da janela de encaixe, você precisará localizá-los de alguma forma.Anexei as linhas sugeridas ao meu bashrc e verifiquei se o arquivo bashrc está atualizado.
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 os seguintes comandos no meu arquivo python
import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"]="0"
Ambas as etapas, realizadas separadamente ou juntas, infelizmente não resolveram o problema. Keras ainda está sendo executado com a versão da CPU do tensorflow como back-end. No entanto, eu posso ter encontrado o possível problema. Eu verifiquei a versão do meu tensorflow através dos seguintes comandos e encontrei dois deles.
Esta é a versão da 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: opensource@google.com
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: tensorflow-tensorboard, six, protobuf, mock, numpy, backports.weakref, wheel
E esta é a versão da 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: opensource@google.com
License: Apache 2.0
Location: /usr/local/lib/python2.7/dist-packages
Requires: mock, numpy, protobuf, wheel, six
Curiosamente, a saída mostra que keras está usando o tensorflow versão 1.3.0, que é a versão da CPU e não 0.12.1, a versão da 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__)
Resultado
root@08b5fff06800:~/sharedfolder# python test.py
Using TensorFlow backend.
Tensorflow: 1.3.0
Acho que agora preciso descobrir como os keras usam a versão gpu do tensorflow.