[PYTHON] Durch die C ++ - Implementierung von Protobuf wird das Caffe-Modell von Chainer zehnmal schneller geladen

** Unterstützt von Chainer v.1.16.0 **

Das lang erwartete protobuf 3.0.0 wurde veröffentlicht. Insbesondere bis zu 2 Serien funktionierten nicht mit Python 3, und die offizielle Veröffentlichung von 3 Serien, die Python 3 unterstützen, wurde lange erwartet.

Wie Sie vielleicht nicht wissen, verfügt die Python-Oberfläche von protobuf über zwei interne Implementierungen, eine Python-Implementierung und eine C ++ - Implementierung, wobei letztere überwiegend schneller ist. Das Lesen der Modelzoo-Datei von Caffe mit Chainer ist ungewöhnlich langsam, da die frühere Python-Implementierung verwendet wird. Das Laden von Alexnet-Modelldateien dauerte beispielsweise in der Python-Implementierung etwa 120 Sekunden, in der C ++ - Implementierung etwa 10 Sekunden, was zehnmal schneller ist. Aufgrund der Größenbeschränkung für gelesene Dateien (es gab eine Größenbeschränkung für Puffer) war es einige Zeit nicht möglich, große Dateien wie die auf modelzoo veröffentlichten zu lesen, und es scheint, dass kürzlich eine Methode eingeführt wurde, um dies zu vermeiden.

Wie installiert man

Um die C ++ - Implementierung von protobuf verwenden zu können, müssen Sie sie aus dem Quellcode beziehen. Dies kann sich in Zukunft ändern. Holen Sie sich zuerst die C ++ - Quelle von protobuf, entpacken Sie sie und installieren Sie sie.

$ 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

Als nächstes folgt das Herunterladen und Erstellen des Python-Pakets. Arbeiten Sie im selben Verzeichnis wie zuvor. Wenn Sie hier "--cpp_implementation" angeben, wird die C ++ - Implementierung verwendet.

$ 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

Das ist alles.

Vorsichtsmaßnahmen für die Installation

Stellen Sie sicher, dass Sie sowohl C ++ - als auch Python-Quellen im selben Verzeichnis entpacken. Bitte installieren Sie auch zuerst C ++. Es scheint, dass die C ++ - Bibliothek in setup.py als relatives Verzeichnis angegeben ist. In Zukunft kann die Installation möglicherweise auch von "pip" aus erfolgen.

Bemerkungen

Es wurde an verschiedenen Stellen darauf hingewiesen, dass Gurke das Laden beschleunigt. Dies kann vorerst in Ordnung sein. Bitte beachten Sie, dass pickle nicht zwischen Versionen kompatibel ist (z. B. python2 und python3).

Recommended Posts

Durch die C ++ - Implementierung von Protobuf wird das Caffe-Modell von Chainer zehnmal schneller geladen
Implementierung von c / c ++> RingBuffer (N Ränder)