【发布时间】:2018-02-15 06:20:41
【问题描述】:
我使用 keras 版本 2.0.0 和 tensorflow 版本 0.12.1 构建了 docker 镜像 https://github.com/floydhub/dl-docker 的 gpu 版本。然后我运行了 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 之前是否需要进行一些设置?我对所有这些都很陌生,所以如果我需要提供更多信息,请告诉我。
我已经安装了page中提到的先决条件
- 按照您平台的安装指南安装 Docker:https://docs.docker.com/engine/installation/
我可以启动 docker 镜像
docker run -it -p 8888:8888 -p 6006:6006 -v /sharedfolder:/root/sharedfolder floydhub/dl-docker:cpu bash
- 仅限 GPU 版本:直接从 Nvidia 或按照说明 here 在您的计算机上安装 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 主机驱动程序环境以及其他一些事情。
我可以运行步骤here
# 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 的映像。
我的尝试
我尝试了以下建议
- 检查您是否已完成本教程的第 9 步 (https://github.com/ignaciorlando/skinner/wiki/Keras-and-TensorFlow-installation)。注意:您的文件路径在该 docker 映像中可能完全不同,您必须以某种方式找到它们。
我将建议的行附加到我的 bashrc 并已验证 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
-
在我的python文件中导入以下命令
import os os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # see issue #152 os.environ["CUDA_VISIBLE_DEVICES"]="0"
不幸的是,这两个步骤单独或一起完成并没有解决问题。 Keras 仍然以 CPU 版本的 tensorflow 作为其后端运行。但是,我可能已经发现了可能的问题。我通过以下命令检查了我的 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 使用 gpu 版本的 tensorflow。
【问题讨论】:
-
如果您遵循适用于您的操作系统的 Tensorflow 安装指南 (tensorflow.org/install),它将告诉您所需的一切。您很可能缺少 CUDA 和 CUDAnn 库。
-
@KDecker 但它在github.com/floydhub/dl-docker 上说 gpu 版本带有 CUDA 8.0 和 cuDNN v5
-
哦,这是 Docker 镜像。抱歉,我看了一眼。我不知道该告诉你什么,除了,你是否遵循图像的附加条件? (安装 NVidia 驱动和 nvidia-docker)
-
嗨,是的,我已经遵循了先决条件(更新了我的帖子)
-
检查您是否已完成本教程的第 9 步 (github.com/ignaciorlando/skinner/wiki/…)。注意:您的文件路径在该 docker 映像中可能完全不同,您必须以某种方式找到它们。
标签: docker tensorflow keras tensorflow-gpu