Ubuntuにnnvmをインストールしようとしたら意外にはまったので動くまでのメモ
症状
とりあえず、ドキュメントの通りにインストールしたがインタープリタを立ち上げてimport nnvmするとSegmentation faultが発生する。
natu@www3370uf:~$ python3 Python 3.5.2 (default, Nov 23 2017, 16:37:01) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import nnvm.compiler Segmentation fault (core dumped)
問題を追う
import nnvmだけのtest.pyを用意する。
import nnvm
python3 test.pyでSegmentation faultが発生することを確認したらデバッガで同じ事をする。
python3-dbg test.py
これで少し情報が手に入る。
Original exception was: Traceback (most recent call last): File "test.py", line 1, in <module> import nnvm File "/home/natu/gitproj/nnvm/python/nnvm/__init__.py", line 6, in <module> from . import _base File "/home/natu/gitproj/nnvm/python/nnvm/_base.py", line 9, in <module> import numpy as np File "/usr/local/lib/python3.5/dist-packages/numpy/__init__.py", line 142, in <module> from . import add_newdocs File "/usr/local/lib/python3.5/dist-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/usr/local/lib/python3.5/dist-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/usr/local/lib/python3.5/dist-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/usr/local/lib/python3.5/dist-packages/numpy/core/__init__.py", line 14, in <module> from . import multiarray ImportError: cannot import name 'multiarray'
multiarrayがimportできてない。
multiarrayが動くようにする。
numpyがnumpy-1.11.2だったので、numpy-1.14.1にしてみたが症状は変わらず。どうもPythonのバージョンを3.6にすれば直りそう。Ubuntuの16.04ではpython3.6はそのままインストールできない。普通のaptでPython3.5を入れるにはUbuntuのバージョンを16.10にするか17にすれば良いことが分かったがやり方がわからない。
結局このやりかたでPython3.6をインストール。
https://www.python.jp/install/ubuntu/index.html
を参考にしました。
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.6 wget https://bootstrap.pypa.io/get-pip.py sudo python3.6 get-pip.py
これで、Python3.6が起動する。新しいpipを使って、numpyやらscipyをインストールする。
OSError
Python3.6でtest.pyを起動すると、次はこんなエラーがでる。
OSError: /home/natu/gitproj/nnvm/python/nnvm/../../lib/libnnvm_compiler.so: undefined symbol: _ZTIN3tvm4NodeE
nnvmのドキュメントを見ると、先にtvmインストールしろと書いてある。
nnvmの下にtvmディレクトリがあるので、そこに移動。Makefileのpython3になっているところを、python3.6に書き換える。(python3だと3.5が起動するので)
makeした後、その直下になるpythonディレクトリへ移動。
cd python sudo python3.6 setup.py install
この後、nnvmディレクトリに戻り、makeと、cd python; sudo python3.6 setup.py installを実行する。