ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

nnvmでSegmentation fault

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を実行する。

topi

エラーメッセージがこう変わった。あと少し。

ModuleNotFoundError: No module named 'topi'

tvmディレクトリの下にtopiディレクトリがあるので、そこに移動する。
同じようにsudo python3.6 setup.py installを実行すればOK。

これでエラーが無くなりました。