このページを参考に、Ubuntu 18.04 LTS Bionic BeaverにTensorFlowをインストールした。インストール方式は、これまでdockerとnvidia-docker2をインストールした目的のとおり、dockerのイメージをプルする。
(1)GPU版のTensorFlowのdockerイメージをプル(インストール)
インストールは以下の通り。
$ sudo docker run --runtime=nvidia -it tensorflow/tensorflow:latest-gpu bash
手順としては、たったこれだけ。ただし、runtimeオプションを忘れないこと。
(2)TensorFlowをインポート
dockerコンテナで以下の手順でTensorFlowを起動する。
# python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Illegal instruction (core dumped)
#
(3)原因と対処
dockerイメージを起動したのに、何でコアダンプするのだろう?
何か必要なものが足りないのか?でもコンテナの仕組みからそれはないような気もするが・・・、と悩みながらネットを検索した。
要は、プリ・ビルトしたTensorFlowはAVX instructionsを使用しており、古いCPUでは、Illegal Instructionとなるようだ。
確かに、あけんじの使っているワークステーションは、10年以上も前の(ThinkStation S10)ものだし、CPUの以下の通りで確かに新しくはない。
Intel® Xeon(R) CPU W3550 @ 3.07GHz × 4
それにしても、新しいCPUでしか使えないCPU命令を使うとは、高速化を意識してのことだろうか。
対処は、(i)1.5より前のバージョンを使う、(ii)ソースからビルドする、の2通りあるとのことだが、あけんじは、次の通り、TensorFlow 1.5を使うことにした。
・TensorFlowのコンテナを起動
$ sudo docker run --runtime=nvidia -it tensorflow/tensorflow:latest-gpu bash
・コンテナ上での操作
# pip uninstall tensorflow
# pip install tensorflow==1.5
Collecting tensorflow==1.5
・・・(メッセージがずらずらと)・・・
Installing collected packages: tensorflow-tensorboard, tensorflow
Successfully installed tensorflow-1.5.0 tensorflow-tensorboard-1.5.1
#
(4)確認
# python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>>
ようやく、TensorFlowが使える環境が構築できた。