こんにちは。
ディープラーニングお兄さんの”はやぶさ”@Cpp_Learningです。
以前 “Neural Network Libraries(NNabla)” をインストールする方法について記事を書きました。
この記事では、NNablaのPython APIを使うための環境構築について説明しています。
本記事では、NNablaのC++ APIを使うための環境構築について説明します。
Contents
Neural Network Libraries(NNabla)の特徴
“Neural Network Libraries”のコア部分がC++で実装されており、Python APIだけでなくC++ APIも用意してあります。
Python APIを使うためのPythonパッケージはpipで簡単にインストールできますが…
C++ APIを使うためにはC++ライブラリをインストールする必要があり、pipに比べると少し難しいです。
なので、本記事で丁寧にインストール方法を説明したいと思います。
Windows Subsystem for Linux(WSL)にインストールしました。WSLの使い方については以下の記事をご参照ください。
Install NNabla C++ utility library
Build C++ utility libraries|公式を参照しながらC++ APIの環境構築を行います。
WSLを起動して、以下の手順通りにコマンドを打ち込んでみて下さい。
【準備】パッケージのアップデート
最初に以下のコマンドでインストール済みパッケージの更新をしておくと良いと思います。
sudo apt update
sudo apt upgrade
(マメに更新している人は不要かも)
Requirements
次に以下のものをインストールします。
- G++:
sudo apt-get install build-essential
- CMake>=3.1:
sudo apt-get install cmake
- Python:
sudo apt-get install python python-pip
(Used by code generator) - Python packages: PyYAML and MAKO:
sudo -H pip install pyyaml mako
- LibArchive:
sudo apt-get install libarchive-dev
- HDF5 (Optional):
sudo apt-get install libhdf5-dev
- Protobuf >=3: See below.
事前に以下のコマンドでインストール済みのパッケージを確認しておくと良いでしょう。
dpkg -l [package]
今回の場合は以下のコマンドで確認します。
dpkg -l build-essential cmake python python-pip libarchive-dev libhdf5-dev
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii build-essentia 12.4ubuntu1 amd64 Informational list of build-essen
ii cmake 3.10.2-1ubun amd64 cross-platform, open-source make
ii python 2.7.15~rc1-1 amd64 interactive high-level object-ori
ii python-pip 9.0.1-2.3~ub all Python package installer
dpkg-query: no packages found matching libarchive-dev
dpkg-query: no packages found matching libhdf5-dev
私の場合は↑のような表示がでました。つまり、libarchive-devとlibhdf5-devがないようなので、以下のコマンドでインストールします。
sudo apt-get install libarchive-dev libhdf5-dev
pipの場合は以下のコマンドでインストール済みパッケージを確認できます。
pip show pyyaml mako
Name: PyYAML
Version: 3.13
Summary: YAML parser and emitter for Python
Home-page: http://pyyaml.org/wiki/PyYAML
Author: Kirill Simonov
Author-email: xi@resolvent.net
License: MIT
Location: /mnt/c/Users/hayab/Ubuntu/envs/sony/lib/python3.6/site-packages
Requires:
私の場合は↑のようなにPyYAMLの情報のみが表示されました。つまり、makoがないようなので、以下のコマンドでインストールします。
pip install mako
念のため、以下のコマンドでインストールできたことを確認します(しなくても良い)。
pip show mako
Name: Mako
Version: 1.0.7
Summary: A super-fast templating language that borrows the best ideas from the existing templating languages.
Home-page: http://www.makotemplates.org/
Author: Mike Bayer
Author-email: mike@zzzcomputing.com
License: MIT
Location: /mnt/c/Users/hayab/Ubuntu/envs/sony/lib/python3.6/site-packages
Requires: MarkupSafe
今度は↑のようなにMakoの情報が表示されるはずです。
人によってインストール済みのパッケージが異なるため、必要に応じてlibarchive-dev・libhdf5-dev・Mako以外もインストールしてくださいね。
Installing protobuf3 C++ libraries and tools
protobufも必要なので、以下のコマンドでインストールします。
curl -L https://github.com/google/protobuf/archive/v3.1.0.tar.gz -o protobuf-v3.1.0.tar.gz
tar xvf protobuf-v3.1.0.tar.gz
cd protobuf-3.1.0
mkdir build && cd build
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_BUILD_TESTS=OFF ../cmake
make
sudo make install
先に適当なディレクトリ”nnabla_workspace”を作り、そこで作業するのが良いと思います。
mkdir nnabla_workspace && cd nnabla_workspace
Build
最後に以下のコマンドでビルドします。
git clone https://github.com/sony/nnabla
cd nnabla
mkdir build && cd build
cmake .. -DBUILD_CPP_UTILS=ON -DBUILD_PYTHON_PACKAGE=OFF -DNNABLA_UTILS_WITH_HDF5=ON
make
sudo make install
Some optional arguments for cmake:
CMakeオプションについては以下の通りなので、自由に”ON/OFF”を変更して下さい。
- -DNNABLA_UTILS_WITH_HDF5=OFF to turn off HDF5 feature if you stacked in HDF5 installation.
- -DBUILD_PYTHON_PACKAGE=ON to build Python package too.
以上でNNablaのC++ APIを使用する環境が整いました。
あとはsony/nnabla/examples/cpp|GithubなどでC++ APIを実践してみてください。
まとめ
以前“Neural Network Libraries(NNabla)” のPython APIを使うための環境構築について説明しましたが、今回はC++ APIを使うための環境構築について説明しました。
これでPythonだけでなくC++でも深層学習が楽しめるようになりました。
また、↑のようにPythonとC++の連携もできるため、「学習」はPython・「推論」はC++なんてことも実現できます。
NNablaで深層学習を楽しんで下さいね。