web-dev-qa-db-ja.com

GPUを使用しないTensorFlowバックエンドを備えたKeras

Dockerイメージのgpuバージョン https://github.com/floydhub/dl-docker をkerasバージョン2.0.0およびtensorflowバージョン0.12.1で作成しました。次に、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イメージを起動できます

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 Hostドライバー環境のセットアップとその他のいくつかの処理を行います。

ステップを実行できます 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がサポートするイメージを起動することもできます。

私が試したこと

私は以下の提案を試しました

  1. このチュートリアルのステップ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
  1. My pythonファイルに次のコマンドをインポートするには

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

残念ながら、別々にまたは一緒に行われた両方のステップは、問題を解決しませんでした。 Kerasは、引き続きCPUバージョンのtensorflowをバックエンドとして実行しています。ただし、考えられる問題を見つけた可能性があります。次のコマンドでテンソルフローのバージョンを確認し、そのうちの2つを見つけました。

これは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

そして、これは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

興味深いことに、出力はkerasがCPUバージョンでありGPUバージョンである0.12.1ではないtensorflowバージョン1.3.0を使用していることを示しています

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

ケラスにgensorバージョンのテンソルフローを使用させる方法を理解する必要があると思います。

10
Kong

nevertensorflowtensorflow-gpuの両方のパッケージを並べてインストールするのは良い考えです(偶然に1回だけ、KerasはCPUバージョンを使用していました) )。

ケラスにgensorバージョンのtensorflowを使用させる方法を理解する必要があると思います。

システムから両方のパッケージを削除し、tensorflow-gpu [コメントの後に更新]を再インストールする必要があります。

pip uninstall tensorflow tensorflow-gpu
pip install tensorflow-gpu

さらに、floydhub/dl-docker:cpuコンテナを使用しているように見えるのは不可解ですが、指示に従ってfloydhub/dl-docker:gpuコンテナを使用する必要があります...

22
desertnaut

将来的には、仮想環境を使用してテンソルフローのCPUとGPUを分離することができます。例:

conda create --name tensorflow python=3.5
activate tensorflow
pip install tensorflow

そして

conda create --name tensorflow-gpu python=3.5
activate tensorflow-gpu
pip install tensorflow-gpu
4
juicygranpa

同様の問題がありました-ケラスはGPUを使用しませんでした。 condaへの指示に従ってtensorflow-gpuをインストールしましたが、kerasのインストール後、利用可能なデバイスとしてGPUがリストされていません。 kerasをインストールすると、テンソルフローパッケージが追加されることに気付きました!そのため、tensorflowパッケージとtensorflow-gpuパッケージの両方がありました。 keras-gpuパッケージが利用可能であることがわかりました。 keras、tensorflow、tensorflow-gpuの完全なアンインストールと、tensorflow-gpu、keras-gpuのインストール後、問題は解決しました。

4
Deemah