root権限を持っていない環境でtensorflowを使おうと思った時に詰まるポイントのメモ。
環境はCentOS 6.7ですが、どこでもいっしょだと思います。CUDAは使っていません。
Pythonのバージョン
2.7系列が入っていないと動きません。pyenvを使いました。こちらを見てください。ただしその時、こちらにあるようにオプションを指定する必要があります。ちなみにオプション無しのpipで入れてしまった場合は、ライブラリを入れなおす必要があります。numpy,sympy,tensorflowを入れなおしました。
glibc, libstdc++のバージョンについて
コンパイル済みバイナリを使っているので、libcのバージョンが合わないと使えません。そこで、rpmをダウンロードして差し替えます。CentOSではpackages.debian.org的なものはないらしいので、レポジトリから直接抜いてきます。例えば理研ならここで、
$ mkdir ~/tflib
$ cd ~/tflib
$ wget http://ftp.riken.jp/Linux/centos/7/os/x86_64/Packages/glibc-2.17-78.el7.x86_64.rpm
$ rpm2cpio glibc-2.17-78.el7.x86_64.rpm|cpio -idv
$ wget http://ftp.riken.jp/Linux/centos/7/os/x86_64/Packages/libstdc++-4.8.3-9.el7.x86_64.rpm
$ rpm2cpio libstdc++-4.8.3-9.el7.x86_64.rpm|cpio -idv
としておきます。Debian/Ubuntuなら適当に探してきて解凍すればいいと思います。1
$ LD_LIBRARY_PATH=~/tflib/lib64/:~/tflib/usr/lib64/ ~/tflib/lib64/ld-2.17.so ~/.pyenv/versions/2.7.10/bin/python tutorial1.py
とかするとようやく起動できます。面倒なので私は
alias tfpy='LD_LIBRARY_PATH=~/tflib/lib64/:~/tflib/usr/lib64/ ~/tflib/lib64/ld-2.17.so ~/.pyenv/versions/2.7.10/bin/python'
としておきました。
$ tfpy tutorial1.py
補足
本当は多分numpyとかPython自体も新しいlibcでコンパイルし直さないといけないような気がします。。
今のところエラーは出ていませんが。
-
もしかしたら依存関係があるかもしれませんが、この他に特に何も入れなくても動きました。Debian/Ubuntuならpackages.debian.org的なところで依存関係も見られると思うので、適宜入れてください。
これでいよいよ全部揃ったわけですがld-linux.soのバージョンも合わないとあぼーんなので、 ↩