Chainer
Menoh

Menoh を試してみる

Chainer4、Chainer4+iDeep、Menohでざっくりと性能比較してみました。

Menohは、PFNが発表した、C++推論エンジンです。

https://research.preferred.jp/2018/06/menoh-release/


必要なものをインストール

$ sudo apt install cmake libopencv-dev

$ sudo apt install autoconf automake libtool curl make g++ unzip


protobuf をインストール

aptで入るprotobufは古いので、コードからインストール。

$ git clone https://github.com/google/protobuf.git

$ cd protobuf
$ git submodule update --init --recursive
$ ./autogen.sh && ./configure && make && make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.


mklをインストール



  1. https://software.intel.com/en-us/mkl から、"Intel Math Kernel Library"をダウンロード

  2. MKLに必要なものをインストール $ apt install -qq cpio g++


  3. $ tar xvzf downloads/l_mkl_2018.3.222.tgz && cd l_mkl_2018.3.222 && sudo ./install.sh 画面に従いインストール


  4. $ export LD_LIBRARY_PATH="/opt/intel/mkl/lib/intel64:/opt/intel/lib/intel64:$LD_LIBRARY_PATH" (必要ならば、~/.bashrc などに書く)

参考:Chainer 4.0 + iDeep がすごい


mkl-dnnをインストール

$ git clone https://github.com/intel/mkl-dnn.git

$ cd mkl-dnn/scripts && ./prepare_mkl.sh && cd ../
$ mkdir -p build && cd build && cmake .. && make
$ sudo make install


menoh をインストール

$ git clone https://github.com/pfnet-research/menoh.git

$ cd menoh
$ mkdir data
$ python3 retrieve_data.py
$ mkdir build && cd build
$ cmake ..
$ make
$ sudo make install


評価

GCEのf1-microで試そうかと思いましたが、メモリーが足らなかったので、手元のPCで、nvidia-docker2上での動作です。

env
msec

Chainer4(CPU)
604msec

Chainer4 + iDeep
98msec

menoh(mkl)
103.9 msec


Chainer 4 の場合

604 msec

https://github.com/peisuke/DeepLearningSpeedComparison/blob/master/chainer/vgg16/predict.py を利用

$ predict.py

mxnet-vgg-16 : 0.604022 (sd 0.003342)


Chainer 4 + ideep の場合

98 msec

https://gist.github.com/ikeyasu/971ece2e32ddf36bcc40a71762f68cd9#file-predict_ideep-py

$ python3 predict_ideep.py

mxnet-vgg-16 : 0.097915


menohの場合

103.9 msec

menoh のサンプルを20回実行し、1回当たりの実行時間を求めるように修正

https://gist.github.com/ikeyasu/bfb4d5cd6f636cdcbc16e41cf8f95347

実行するモデルは、 https://gist.github.com/ikeyasu/971ece2e32ddf36bcc40a71762f68cd9#file-convert_to_onnx-py で変換した onnx で、Chainer4 で実行したものと同じ。

$ example/vgg16_example_in_cpp --model ../../DeepLearningSpeedComparison/chainer/vgg16/vgg16.onnx

vgg16 example
103.9


まとめ

ざっくりとした評価ですが、menohと、chainer4 がだいたい同じでした。

(とくに、Pythonだからといってオーバーヘッドがある様なタスクではないので、当然ですね)