このページを参考に、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が使える環境が構築できた。