はじめに
ワケあって今まで使っていたサーバー上に環境を立てなくちゃいけなくなってハマり,相当な時間を無駄にしたので,自分への戒めと今後のためにメモ.(こういうハマり方する度に最上流に行きたくなる.)
ゴールは,サーバーのjupyter notebookをlocalのブラウザで開き,その上でtensorflowがきちんと動く環境を作ること.
今回やったことは,
- virtualenvで仮想環境構築
- numpyのversion上げ
- pyenvでpython2.7.9導入
- jupyter notebook起動時のoption付け
環境
色々試した後の環境(試す前の環境をメモするの忘れた)
ubuntu 14.04
python 2.7.6
tensorflow-gpu 1.2.1
numpy 1.15.4
本題
import tensorflow
したら以下のエラーが出た.
`RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9`
`ImportError: Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow.py", line 41, in <module>
from tensorflow.python.pywrap_tensorflow_internal import *
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 28, in <module>
_pywrap_tensorflow_internal = swig_import_helper()
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/pywrap_tensorflow_internal.py", line 24, in swig_import_helper
_mod = imp.load_module('_pywrap_tensorflow_internal', fp, pathname, description)
ImportError: numpy.core.multiarray failed to import
Failed to load the native TensorFlow runtime.
See https://www.tensorflow.org/install/install_sources#common_installation_problems
for some common reasons and solutions. Include the entire stack trace
above this error message when asking for help.`
URLが書いてあるが,ここ見てもよくわからない.
どうやらtensorflowが古いversionのnumpyを見に行ってるらしい.numpyなんかそう何個も入れないんだけどなぁ...
numpyのversionあげないとだが,OS管理下のnumpyをいじるのは怖いし,そもそも自分はこのサーバーのsudoer権限を持っていないので,virtualenvで仮想環境を立ててnumpyを更新することにした.
pyenvでpython2.7.9を入れる
早速virtualenvで仮想環境作ってnumpyのversionをあげたいところだが,python2.7.9以降でないとjupyter notebookが入らないので,まずはpyenvでpython2.7.9の環境を作る.
そもそもpyenvが入ってなかった(笑)ので,
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
でpyenvをインストールする.
あとはpyenv install 2.7.9
でpython 2.7.9を入れて,pyenv local 2.7.9
をすればpython 2.7.9の環境に入れる.
virtualenvで仮想環境構築
pythonの環境が整ったので,ようやく仮想環境作りに入る.
なんのことはないが,
virtualenv ENVNAME --no-site-package --python=PYTHON_PATH
で仮想環境を構築した.
この時指定するPYTHON_PATHだが,前述したように2.7.9以降でないとjupyter notebookがpip install
できないので,それ以前の場合はまずpyenvで2.7.9以上のpythonを入れて,そのPATHである~/.pyenv/versions/2.7.9/bin/python
を指定する.
直下に./ENVNAME
ディレクトリが作成されているはずなので,source ./ENVNAME/bin/activate
で仮想環境に入る.
あとはpip install tensorflow
すればnumpyは一緒にインストールされるし,pip install jupyter
も問題なく動くはず.
サーバーのjupyter notebookに,localからアクセス
jupyter notebook起動時にちょっとしたオプションを付けないとうまく動いてくれなかった.
以前,ここ(分析サーバーでjupyter notebookを起動してローカルからアクセス)を参考にポートフォワーディングの設定をしたので,
サーバー上でjupyter notebook --ip localhost --port 8888
をして,localhostの自分が設定したportにアクセスすれば,jupyter notebookを触れる.
port番号は適宜書き換える.
おわりに
すんなり環境構築できたみたいに見えるが,実際はいろんなページ飛び回ったり,仮想環境作った後で古いpythonだとjupyterが入らないことに気づいてやり直したりで,丸一日かかってしまった.
なんとか動くようにはなったが,最初のエラーがいきなり出た原因は不明なままなのでどうも腑に落ちない.
きちんと仮想環境整えなきゃなぁ思いつつ,バグが出る予感しかしないので,できれば一生やりたくない.
でもこのままだと,いずれ今回のような不具合が出るし,思い切ってやってしまおうか...