Chainer 1.7.1 を El Capitan にインストールするときにいくつか問題が生じたので、解決方法をメモしておく。
問題が生起した順のログなので、ストレートホーワードな手順にはなっていない。
pyenv で Python 2.7.11 をインストールして、システムの Python ではない Python に chainer をインストールしようとしている。
pyenv 等に関しては以前のエントリーの通り。
-> 機械学習フレームワーク Chainer を OS X にインストールするメモ
-> OS X 10.11 への pyenv による Python のインストールメモ
その後、
$sudo -H pip install chainer
でインストールできたように見えるのだが。
☆ matplotlib の問題
まず、実行したときに、chainer と直接関係ないが、matplotlib で問題が生じた。
>>> import matplotlib
としたときに、
....
ImportError: dlopen(/Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/numpy/core/multiarray.so, 2): Symbol not found: _PyUnicodeUCS2_AsASCIIString
Referenced from: /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/numpy/core/multiarray.so
Expected in: flat namespace
in /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/numpy/core/multiarray.so
というエラーが出た。
そこで、numpy の update をしようと
$sudo easy_install --upgrade numpy
を実行したが、実行できる fortran がないというコンパイルエラーが出たので、
$brew install gcc
で gcc をインストール。これにより gfortran が使用できるようになる。
再度 numpy の upgrade を実行すると今度は問題なく終了し、
>>> import matplotlib
も実行できたが、次に
>>> import matplotlib.pyplot
で同様に
...
ImportError: dlopen(/Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/matplotlib/_path.so, 2): Symbol not found: _PyUnicodeUCS2_AsASCIIString
Referenced from: /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/matplotlib/_path.so
Expected in: flat namespace
in /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/matplotlib/_path.so
というエラーが出た。
今度は matplotlib の upgrade を試みた
$sudo easy_install --upgrade matplotlib
が、pkg-config と freetype に関連するエラーが出た。
...
pkg-config is not installed.
The C/C++ header for freetype2 (ft2build.h) could not be found
...
そこで、それらをインストール。
$brew install pkgconfig
$brew install freetype
これにより
$sudo easy_install --upgrade matplotlib
は無事完了し、
>>> import matplotlib.pyplot
は実行できた。ここまで、matplotlib 関連のエラー対処。
☆ hdf5 serializers の問題
Chainer を実行して、次のエラーは、Chainer から hdf5 serializers を使ったときの Runtime エラー。
RuntimeError: h5py is not installed on your environment.
Please install h5py to activate hdf5 serializers.
とのこと。
$sudo -H pip install h5py
でインストール。そして、一旦 Chainer を uninstall して再インストールすることを試みた。
$sudo -H pip uninstall chainer
$sudo -H pip install chainer
すると、
...
ImportError: dlopen(/Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/Cython/Compiler/Scanning.so, 2): Symbol not found: _PyUnicodeUCS2_Compare
Referenced from: /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/Cython/Compiler/Scanning.so
Expected in: flat namespace
in /Users/asai/.pyenv/versions/2.7.11/lib/python2.7/site-packages/Cython/Compiler/Scanning.so
というさっきまで出ていたようなエラーがまた出た。
そこで Cython の upgrade。
$sudo easy_install --upgrade cython
を実行後
$sudo -H pip install chainer
をすると Chainer を再インストールできた。
しかし、再度 Chainer から hdf5 serializers を使うと同じエラーがまた出た。
確認してみると
>>> import h5py
...
ImportError: dlopen(/Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/h5py/_errors.so, 2): Symbol not found: _PyUnicodeUCS2_DecodeUTF8
Referenced from: /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/h5py/_errors.so
Expected in: flat namespace
in /Users/me/.pyenv/versions/2.7.11/lib/python2.7/site-packages/h5py/_errors.so
と同じようなエラーが出たので、h5py の upgrade。
$sudo easy_install --upgrade h5py
で upgrade を試みるも、
...
'hdf5.h' file not found
というエラーが発生。
$brew install homebrew/science/hdf5
で hdf5 をインストール。そして、再度
$sudo easy_install --upgrade h5py
を実行したところ問題なく完了した。
これで漸く、Chainer から hdf5 serializers を使えるようになり、学習した NN を Save することができるようになった。