TensorFlow 1.0にアップグレードしてみた

by ysawa

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 になっていくんでしょうか。

この記事を読んだあとに

ysawa

エヌ次元株式会社代表取締役
東京工業大学工学部計算工学専攻卒業
符号理論の応用に関する研究
在学中よりフリーランスエンジニアとして活動
「持続可能な設計」を得意領域とする
会社設立後も設計からアプリ制作や
Webサイトのコーディングまでを幅広く担当
セキュリティスペシャリスト

 このブログについて

このブログは、プログラマやエンジニアのためになる情報を垂れ流しています。
ちょっと異端的なものも含まれているかもしれません。