LoginSignup
14
13

More than 5 years have passed since last update.

protobufのC++実装でChainerのCaffeモデルの読み込みを10倍早くする

Last updated at Posted at 2016-08-01

chainer v.1.16.0から対応しました

待望のprotobuf 3.0.0がリリースされました。特に2系までPython 3では動作せず、Python 3がサポートされている3系の正式リリースが待望されていました。

余り知られていないと思いますが、protobufのPythonインターフェースには、内部的にPython実装とC++実装の2つの実装を持っており、後者のほうが圧倒的に早いのです。ChainerでCaffeのmodelzooファイルを読むと異様に遅いのは、前者のPython実装を使っているためです。例えばalexnetのモデルファイルの読み込みは、Python実装では120秒位かかっていたのが、C++実装では10倍速の10秒ほどですみました。かねてより、読み込みファイルサイズ上限(バッファサイズ上限があった)のせいで、modelzooで公開されているような巨大なファイルは読めず、これを回避する方法も最近取り込まれたようです。

インストール方法

protobufのC++実装を使うには、ソースから入れる必要があります。これは、将来的に変わるかもしれません。
まず、protobufのC++のソースをとってきて解凍し、インストールします。

$ wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-cpp-3.0.0.tar.gz
$ tar -xzf protobuf-cpp-3.0.0.tar.gz
$ cd protobuf-3.0.0 && ./configure && make && make install && ldconfig

次に、pythonパッケージのダウンロードとビルドです。先ほどと同じディレクトリで作業してください。ここで、--cpp_implementationを指定するとC++実装が使われます。

$ wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-python-3.0.0.tar.gz
$ tar -xzf protobuf-python-3.0.0.tar.gz
$ cd protobuf-3.0.0/python && python setup.py install --cpp_implementation

これで終わりです。

インストール時の注意点

必ずC++とPythonの両方のソースを同じディレクトリで解凍してください。また、C++を先にインストールしてください。これは、setup.pyの中でC++のライブラリを相対ディレクトリで指定しているようです。将来的にはpipからもインストールできるようになるかもしれません。

備考

pickleすると読み込みが早くなるという指摘を色んな所で受けています。当面はこれでいいかもしれません。pickleはバージョン間で互換性が取れないので(例えばpython2とpython3)、その点だけご注意を。

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13