CentOS6.7にTensorFlowをインストールする


初投稿

初めての投稿ですが、今回からTensorFlowを使ってみようと思っていて、
備忘録的な意味も込めて、まとめていこうと思います。

TensorFlow

DeepLearningのフレームワークといえばBVLCのCaffeやChainerなどありますが、今回はGoogleのTensorFlowを使ってみることにしました。

まずはインストール

基本的に、TensorFlowで Hello Worldを動かしてみた&その解説
を参考に進めていくのですが、自分の場合割と面倒だったので改めてまとめます。

1. pythonの更新

$ python -V
Python 2.6.6

TensorFlowでは2.7以上が必要なので、まずはpythonの更新から始めます。

$ cd /usr/local/src/
$ wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz
$ tar zxf Python-2.7.6.tgz
$ cd Python-2.7.6/
$ ./configure
$ make && make altinstall
$ mv /usr/bin/python /usr/bin/python2.6.6
$ cp /usr/local/src/Python-2.7.6/python /usr/bin/python
$ python -V
Python 2.7.6

2. pipのインストール

$ wget https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
ImportError: cannot import name HTTPSHandler

HTTPSHandlerがimportできないと怒られる…
これはopensslに含まれるもので、openssl-develをインストールして、再度makeします。

$ yum install openssl-devel
$ make clean
$ make && make altinstall
$ cp /usr/local/src/Python-2.7.6/python /usr/bin/python
$ python get-pip.py
$ pip --version
pip 8.0.3 from /usr/local/lib/python2.7/site-packages (python 2.7)

3. virtualenvのインストールと環境構築

$ pip install virtualenv
$ cd ~
$ mkdir tensorflow && cd tensorflow
$ virtualenv --system-site-packages ~/tensorflow
$ source bin/activate

4. TensorFlowのインストール

(tensorflow)$ pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl

テストスクリプトの実行

$ python hello-tf.py 

(hello-tf.pyの詳細は上記のリンク先を参照して下さい。)
すると以下のように怒られました。

ImportError: /lib64/libc.so.6: version `GLIBC_2.17' not found

とりあえずglibcのバージョンを見てみます。

$ yum info glibc
名前       : glibc
アーキテクチャ  : x86_64
バージョン    : 2.12

なるほど確かに足りていない…
glibcはかなりいろいろな箇所で使われているものなので、安易に更新するというのは割と危険
だと思いますので、glibcの2.17をどっかから取ってきてLD_LIBRARY_PATHでパスを通すことを考えます。

とりあえずパッケージを取ってきて展開します。

$ wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7.0/x86_64/updates/security/glibc-devel-2.17-55.el7_0.5.x86_64.rpm
$ wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7.0/x86_64/updates/security/glibc-2.17-55.el7_0.5.x86_64.rpm
$ mkdir libc2.17 && cd libc2.17
$ rpm2cpio ../glibc-devel-2.17-55.el7_0.5.x86_64.rpm | cpio -id
$ rpm2cpio ../glibc-2.17-55.el7_0.5.x86_64.rpm | cpio -id

例えば/tmpに置いておいて、パスを通して再び実行しみます。

$ LD_LIBRARY_PATH=/tmp/libc6_2.17/lib64/ /tmp/libc6_2.17/lib64/ld-2.17.so bin/python ~/tensorflow/hello-tf.py

ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found

まぁ、そうですよね…
バージョンを見てみる

$ strings /usr/lib64/libstdc++.so.6.0.13 | grep GLIBCXX

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

おしい…
さっきと似たようなことをします。

$ wget http://mirrors.kernel.org/centos/7.2.1511/os/x86_64/Packages/libstdc++-devel-4.8.5-4.el7.x86_64.rpm
$ wget http://mirrors.kernel.org/centos/7.2.1511/os/x86_64/Packages/libstdc++-4.8.5-4.el7.x86_64.rpm
$ rpm2cpio libstdc++-devel-4.8.5-4.el7.x86_64.rpm | cpio -id
$ rpm2cpio libstdc++-4.8.5-4.el7.x86_64.rpm | cpio -id

展開したものを/tmpに置きパスを通して再び実行します。

$ LD_LIBRARY_PATH=/tmp/libc6_2.17/lib64/:/tmp/libstdc++4.8.5/usr/lib64 /tmp/libc6_2.17/lib64/ld-2.17.so bin/python ~/tensorflow/hello-tf.py

I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 32
I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 32
hello, tensorflow
30

わーいわーい

次回?

さて、今回はインストールしてテストスクリプトを動かすまでをまとめました。
次回(もしあれば)は実際に何かやってみたいと思ってます。