ホーム > カテゴリ > Python・人工知能・Django >

TensorFlow(GPU版)/KerasのインストールからHello World [Ubuntu/Dockerコンテナ]

Python/TensorFlowの使い方(目次)

前提条件

ディープラーニングの事実上の標準OSである「Ubuntu16.04」にDocker/nvidia-docker2で「TensorFlow専用のコンテナ(環境)」を作成してAnacondaをインストールしている状態にします。

お済ではない方はDocker/nvidia-docker2のコンテナ上にAnacondaをインストールするを先にご覧ください。

ホストOSとコンテナの「共有フォルダ」は次のようにします。

[ホストOS側]
/home/ユーザー名/tensor

[コンテナ側]
/foo

TensorFlowの必要環境

現時点で最新版のTensorFlow1.9.0(GPU版)の必要環境。

種類備考
CUDA Toolkit 9.0
(開発環境)
前提条件で準備済み。
cuDNN v7.0
(ディープラーニング用ライブラリ)
前提条件で準備済み。
NVIDIA CUDA Profile Tools Interface
(libcupti-devライブラリ)
今回インストールします。

※詳細は公式をご覧ください。

1. NVIDIA CUDA Profiling Tools Interface(libcupti-devライブラリ)のインストール

コンテナ上にlibcupti-devライブラリをインストールします。

apt -y install libcupti-dev

2. TensorFlowのインストール

コンテナ上に最新版のTensorFlowをインストールします。

pip install --upgrade tensorflow-gpu

次はバージョンを指定する場合。(Python 3.6/TensorFlow_GPU 1.9.0)

pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.9.0-cp36-cp36m-linux_x86_64.whl

※詳細は公式を参照してください。

3. cuDNNのダウングレード

コンテナ上で「apt -y upgrade」を実行した方は、2018/7/17時点ではcuDNNが7.0から7.1になるので、7.0系に下げます。

※upgradeコマンドを未実行の方はこの章は飛ばしてください。

apt-get install --allow-downgrades libcudnn7=7.0.5.15-1+cuda9.0

このダウングレードを行わないと、後述する「mnist_cnn.py」のテストで次のようなエラーが発生します。

ツール
Jupyter NotebookThe kernel appears to have died. It will restart automatically.
(カーネルが死亡したようです。 自動的に再起動します。)
pythonコマンドE tensorflow/stream_executor/cuda/cuda_dnn.cc:332] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
(cudnnハンドルが作れないよ。)
E tensorflow/stream_executor/cuda/cuda_dnn.cc:340] possibly insufficient driver version: 390.67.0
(恐らくドライバのバージョンが不十分だよ。)

4.Kerasのインストール

pip install keras

5. TensorFlowのテスト

5-1. Hello World

import tensorflow as tf

hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))
sess.close()

5-2. 行列演算(加算)

次の行列演算をTensorFlowで実行します。

import tensorflow as tf
import numpy as np

with tf.Session():
    input1 = tf.constant(1.0, shape=[2, 3])
    input2 = tf.constant(np.reshape(np.arange(1.0, 7.0, dtype=np.float32), (2, 3)))
    output = tf.add(input1, input2)
    result = output.eval()
result

※GoogleのColaboratoryのコードです。

5-3. バージョンの確認

import tensorflow as tf
print(tf.__version__)

5-4. その他(コマンド)

TensorFlowのインストール場所を確認できます。(コンテナのターミナル用)

pip show tensorflow-gpu

6. KerasとGPUのテスト

Kerasのexamplesのmnist_cnn.pyを使用してGPUをテストします。

6.1 Jupyter Notebook版

Jupyter Notebookにmnist_cnn.pyのコードをコピペします。その後、処理時間を計測する為に先頭行に

を追記して実行してください。

[実行結果]

x_train shape: (60000, 28, 28, 1)
60000 train samples
10000 test samples
Train on 60000 samples, validate on 10000 samples
Epoch 1/12
60000/60000 [==============================] - 4s 67us/step - loss: 0.2725 - acc: 0.9163 - val_loss: 0.0603 - val_acc: 0.9803
Epoch 2/12
60000/d0000 [==============================] - 3s 57us/step - loss: 0.0883 - acc: 0.9737 - val_loss: 0.0404 - val_acc: 0.9868
Epoch 3/12
60000/60000 [==============================] - 3s 51us/step - loss: 0.0674 - acc: 0.9797 - val_loss: 0.0369 - val_acc: 0.9881
Epoch 4/12
60000/60000 [==============================] - 3s 54us/step - loss: 0.0567 - acc: 0.9835 - val_loss: 0.0319 - val_acc: 0.9893
Epoch 5/12
60000/60000 [==============================] - 3s 55us/step - loss: 0.0478 - acc: 0.9856 - val_loss: 0.0317 - val_acc: 0.9895
Epoch 6/12
60000/60000 [==============================] - 3s 56us/step - loss: 0.0421 - acc: 0.9869 - val_loss: 0.0290 - val_acc: 0.9900
Epoch 7/12
60000/60000 [==============================] - 3s 55us/step - loss: 0.0386 - acc: 0.9881 - val_loss: 0.0304 - val_acc: 0.9901
Epoch 8/12
60000/60000 [==============================] - 4s 60us/step - loss: 0.0347 - acc: 0.9890 - val_loss: 0.0293 - val_acc: 0.9907
Epoch 9/12
60000/60000 [==============================] - 3s 54us/step - loss: 0.0315 - acc: 0.9904 - val_loss: 0.0270 - val_acc: 0.9919
Epoch 10/12
60000/60000 [==============================] - 3s 57us/step - loss: 0.0325 - acc: 0.9901 - val_loss: 0.0274 - val_acc: 0.9917
Epoch 11/12
60000/60000 [==============================] - 3s 54us/step - loss: 0.0296 - acc: 0.9910 - val_loss: 0.0257 - val_acc: 0.9918
Epoch 12/12
60000/60000 [==============================] - 3s 53us/step - loss: 0.0284 - acc: 0.9915 - val_loss: 0.0248 - val_acc: 0.9920
Test loss: 0.024774683424527395
Test accuracy: 0.992
CPU times: user 52.7 s, sys: 7.9 s, total: 1min
Wall time: 41.7 s

このmnist_cnn.pyはCPUでは20分ぐらいの処理時間がかかるそうです。今回はGPUを使用しているので1分で処理が完了しています。

6.2 pythonコマンド版

今度はコンテナ上のターミナルで実行してみます。

mnist_cnn.pyのファイルを作成してコンテナの「/foo」(ホストOS上では/home/ユーザー名/tensor)に移動します。

次のコマンドを実行します。

time python /foo/mnist_cnn.py

[実行結果]

root@xxx:/# time python /foo/mnist_cnn.py
...
省略
...
Test loss: 0.026504793879033785
Test accuracy: 0.9917

real	0m44.962s
user	0m58.252s
sys	0m9.216s

処理中のGPUの最大温度は57度でした。(2回連続実行)

※私のGPUは60度を超えないとファンが回転しない仕様です。

2018/7/22 追記

素のTensorFlowで同様のテストを行いたい方は「TensorFlowではじめる DeepLearning実装入門」の本に掲載されている「畳み込みニューラルネットワーク」(CNN)を使用したmnist.pyを試すと良いです。





関連記事



公開日:2018年07月15日 最終更新日:2018年08月24日
記事NO:02703