带有TensorFlow后端的Keras不使用GPU

我用keras 2.0.0版和tensorflow 0.12.1版构build了Docker镜像的gpu版本https://github.com/floydhub/dl-docker 。 然后我运行了mnist教程https://github.com/fchollet/keras/blob/master/examples/mnist_cnn.py,但意识到keras没有使用GPU。 以下是我的输出

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. 

任何人都可以让我知道,如果有一些需要在keras使用GPU之前作出的设置? 我对这些都很陌生,所以如果我需要提供更多信息,请告诉我。

我已经安装了页面上提到的先决条件

  • 按照所用平台的安装指南安装Docker: https : //docs.docker.com/engine/installation/

我能够启动泊坞窗图像

 docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash 
  • 仅适用于GPU版本:直接在Nvidia上安装Nvidia驱动程序或按照说明操作。 请注意,您不必安装CUDA或cuDNN。 这些包含在Docker容器中。

我能够运行最后一步

 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) 
  • 仅限GPU版本: 请按照此处的说明安装nvidia-docker: https : //github.com/NVIDIA/nvidia-docker 。 这将安装Docker CLI的替代品。 它负责设置Docker容器内的Nvidia主机驱动程序环境以及其他一些内容。

我能够在这里跑步

 # 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 | +-----------------------------------------------------------------------------+ 

我也能够运行nvidia-docker命令来启动一个支持gpu的映像。

我曾经尝试过

我已经尝试了下面的build议

  1. 检查您是否完成了本教程的第9步( https://github.com/ignaciorlando/skinner/wiki/Keras-and-TensorFlow-installation )。 注意:你的文件path在docker镜像里可能完全不同,你必须以某种方式find它们。

我将build议的行附加到我的bashrc并validation了bashrc文件已更新。

 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. 在我的python文件中导入以下命令

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

两个步骤,单独或共同完成,不幸的是没有解决问题。 Keras仍然以tensorflow的CPU版本作为其后端运行。 但是,我可能已经find了可能的问题。 我通过下面的命令检查了我的tensorflow的版本,发现其中两个。

这是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 

这是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 

有趣的是,输出结果显示keras正在使用tensorflow版本1.3.0,这是CPU版本,而不是0.12.1,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__) 

产量

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

我想现在我需要弄清楚如何让keras使用tensorflow的gpu版本。

同时安装张量tensorflowtensorflow-gpu软件包并不是一个好主意(我们意外的发现了一次,Keras使用CPU版本)。

我想现在我需要弄清楚如何让keras使用tensorflow的gpu版本。

你应该完全删除tensorflow软件包,只留下tensorflow-gpu在你的系统[更新后评论]:

 pip uninstall tensorflow tensorflow-gpu pip install tensorflow-gpu 

此外,它令人费解,为什么你似乎使用floydhub/dl-docker:cpu容器,而根据说明,你应该使用floydhub/dl-docker:gpu one …