2018年4月24日火曜日

android上でkerasを動かす:CNTK編

[概要]
androidのArchLinux上でCNTKバックエンドのkerasを動作させる。

[詳細]
TermuxArch環境は準備しておく。OpenBLASなども。
詳細は下記の記事参照
http://oregaji.blogspot.jp/2018/04/androidkeras2018415.html?m=1

CNTKをビルドする。
ビルドは下記に従う。
https://docs.microsoft.com/en-us/cognitive-toolkit/Setup-CNTK-on-Linux#quick-test-of-cntk-build-functionality

pacmanでprotobufを入れても
libprotobuf.aは無かったので
configureの該当箇所ををlibprotobuf.soに修正

> pacman -S swig
> mkdir -p build/release
> cd build/release
> ../../configure --with-openblas=/usr/local --with-swig --with-py36-path

MakefileのSSE_FLAGS = -msse4.1 -mssse3はSSE_FLAGS = のように空にしとく。
sys/io.hが無いとかエラーが出たらsys/uio.hとかに書き換えてみる。
なぜかMultiversoが失敗したので、Multiversoだけ手動でcmake, make, make installして、cntkのMakefileからMultiversoの箇所をコメントアウトして進めた。

make instadellが無いのでビルドしたbin以下の
cntk
cntk.core.bs
を/usr/local/bin/にコピー。
ビルドしたlib以下を/usr/local/libにコピー。

実行時なぜかlibmpi.so.12が無いとエラーが出るので、下記のようにシンボリックリンクを作成する。
ln -s /usr/lib/openmpi/libmpi.so /usr/lib/openmpi/libmpi.so.12

> cd CNTK/bindins/python
> python setup.py install

~/.keras/keras.jsonを
"backend": "cntk"
に変更。

-kerasのサンプルで
> python mnist_cnn.py
が動いたら成功っぽいです。
手元のスマホ(年末のハイエンドスマホ)では1 epochは予測33分と出ました。mxnetバックエンドのほうが早い...

0 件のコメント:

コメントを投稿