[PYTHON] L'implémentation C ++ de protobuf accélère le chargement du modèle Caffe de Chainer 10 fois

** Pris en charge depuis le chainer v.1.16.0 **

Le très attendu protobuf 3.0.0 a été publié. En particulier, jusqu'à 2 séries ne fonctionnaient pas avec Python 3, et la sortie officielle de 3 séries prenant en charge Python 3 était attendue depuis longtemps.

Comme vous ne le savez peut-être pas, l'interface Python de protobuf a deux implémentations internes, une implémentation Python et une implémentation C ++, cette dernière étant extrêmement plus rapide. La lecture du fichier modelzoo de Caffe avec Chainer est inhabituellement lente car elle utilise l'ancienne implémentation Python. Par exemple, le chargement des fichiers de modèle alexnet a pris environ 120 secondes dans l'implémentation Python, mais cela a pris environ 10 secondes, ce qui est 10 fois plus rapide dans l'implémentation C ++. Pendant un certain temps, en raison de la limite de taille des fichiers de lecture (il y avait une limite de taille de tampon), il n'était pas possible de lire des fichiers volumineux tels que ceux publiés sur modelzoo, et il semble qu'une méthode pour éviter cela ait été récemment introduite.

Comment installer

Pour utiliser l'implémentation C ++ de protobuf, vous devez l'obtenir à partir des sources. Cela peut changer à l'avenir. Tout d'abord, récupérez la source C ++ de protobuf, décompressez-la et installez-la.

$ 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

Vient ensuite le téléchargement et la construction du package python. Travaillez dans le même répertoire que précédemment. Si vous spécifiez --cpp_implementation ici, l'implémentation C ++ sera utilisée.

$ 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'est tout.

Précautions d'installation

Assurez-vous de décompresser les sources C ++ et Python dans le même répertoire. Veuillez également installer d'abord C ++. Il semble que la bibliothèque C ++ soit spécifiée comme répertoire relatif dans setup.py. À l'avenir, il sera peut-être possible d'installer également à partir de pip.

Remarques

Il a été souligné à divers endroits que le cornichon accélère le chargement. Cela peut être bien pour le moment. Veuillez noter que pickle n'est pas compatible entre les versions (par exemple python2 et python3).

Recommended Posts

L'implémentation C ++ de protobuf accélère le chargement du modèle Caffe de Chainer 10 fois
implémentation de c / c ++> RingBuffer (N marges)