初投稿
初めての投稿ですが、今回から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
わーいわーい
次回?
さて、今回はインストールしてテストスクリプトを動かすまでをまとめました。
次回(もしあれば)は実際に何かやってみたいと思ってます。