TensorFlow が1.0にアップデートされ、興味なさそうな日本のメディアにもどんどん取り上げられるようになってきました。
なぜ、TensorFlow のバージョン1.0がこれだけ取り沙汰されるかというと、バージョンの1.0ということももちろんありますが、それよりも、GPUの個数による速度向上がほぼ線形におこなえるようになったということが大きいと思います。
例えば Inception v3 に対して 8 GPU を用いた学習で 7.3 倍、64 GPU で 58 倍の高速化が可能になるモデルを提供します。
(引用元: https://developers-jp.googleblog.com/2017/02/announcing-tensorflow-10..html)
要するに、お金を掛ければ掛けるほど、Deep Learningの学習が速くなるということであります。極論すると、個人レベルでは全く勝ち目がないということを突きつけたのがこのバージョンアップということであります。
では、そんな期待の1.0をうちのサーバにもインストールしていこうと思います。
インストールできる環境
まず、 TensorFlow をインストールできる環境は、
- Python 2.7
- Python 3.4
- Python 3.5
のどれかです。Python 3.6とかにはインストールできないので注意して下さい。
そして、GPUを使用する場合は、
- CUDA toolkit 7.0 or greater
- cuDNN v3 or greater
- GPU card with CUDA Compute Capability 3.0 or higher.
が必要なので注意して下さい。これらのインストールは、こちらなどを参考にしてください。
pip によるインストール
pip でインストールするには、まず、Pythonバージョン、GPUを使用するか否かを選択して
https://www.tensorflow.org/install/install_linux#TF_PYTHON_URL
から、適切なURLをコピーしてきてください。そして、以下のコマンドをターミナル上で打ち込みます。
$ pip install --ignore-installed --upgrade {コピーしてきたURL}
初回インストールの人は、こっちだと思います。
$ pip install {コピーしてきたURL}
Keras のアップデート
Keras もアップデートしないといけないみたい。
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/keras/models.py", line 589, in compile
**kwargs)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/keras/engine/training.py", line 619, in compile
sample_weight, mask)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/keras/engine/training.py", line 307, in weighted
score_array = fn(y_true, y_pred)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/keras/objectives.py", line 49, in binary_crossentropy
return K.mean(K.binary_crossentropy(y_pred, y_true), axis=-1)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 2008, in binary_crossentropy
return tf.nn.sigmoid_cross_entropy_with_logits(output, target)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/tensorflow/python/ops/nn_impl.py", line 146, in sigmoid_cross_entropy_with_logits
_sentinel, labels, logits)
File "/home/ysawa/.pyenv/versions/3.5.2/lib/python3.5/site-packages/tensorflow/python/ops/nn_ops.py", line 1533, in _ensure_xent_args
"named arguments (labels=..., logits=..., ...)" % name)
ValueError: Only call `sigmoid_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)
みたいになって落ちます。以下のコマンドでちゃちゃっとやっちゃいましょう。
$ pip install --upgrade keras
動作確認
これで、適当なプログラムを動かしてみます。
$ python tekitou_na_program.py
Using TensorFlow backend.
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
X_train shape: (2700, 180, 320, 3)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: Quadro P5000
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:02:00.0
Total memory: 15.89GiB
Free memory: 15.78GiB
W tensorflow/stream_executor/cuda/cuda_driver.cc:590] creating context when one is currently active; existing: 0x4717900
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 1 with properties:
name: Quadro P5000
major: 6 minor: 1 memoryClockRate (GHz) 1.7335
pciBusID 0000:01:00.0
Total memory: 15.89GiB
Free memory: 15.78GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 1
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0: Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 1: Y Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro P5000, pci bus id: 0000:02:00.0)
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:1) -> (device: 1, name: Quadro P5000, pci bus id: 0000:01:00.0)
900/900 [==============================] - 4s
loss 1.61283520381
accuracy 0.864814859496
できました。
なんか、上には載せなかったけど、
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
みたいな警告出ているので今度調べてみます。
感想
こういった大型のライブラリのバージョンアップは、罠が多いのでどうしても躊躇しがちです。しかし、さすがのGoogle。特に問題もなく、バージョンアップすることができました。
簡単にできるので、ぜひ、この機会にアップデートして遊んでみましょう!
どうもありがとうございました。
より良く知りたい人向け
Java および Go の API が実装されたようです。いよいよ時代は Go になっていくんでしょうか。
この記事を読んだあとに
- 書いた人のツイッター – Follow me!
- 『売上を3年連続20%成長させた18の秘訣』
- 運営しているアクションゲーム