JetsonTX2にCaffe2を入れる

JetPack3.2が正式リリースされたとのことなので、開発PCをUbuntu16.04、TX2をJetPack3.2に入れなおした。
Chainerはデータごと死んだ環境がまっさらに戻ったので、せっかくなので他のDLフレームワークでも入れて遊ぼうということでTensorFlowはJetsonだとインストール面倒そうなのでぱっと見た感じ入れるのが楽そうだったCaffe2を入れてみた。

環境

Eigenのヘッダファイル詐称書き換え

CaffeのソースコードがEigen v3.0.0以上を前提としているらしく、バージョンが古いと #error でコンパイルエラーを吐いてしまう。JetPack3.2のlibeigen3はv3.3 beta1-2という微妙なバージョンになっている。しかもヘッダファイル上ではv3.2.92扱いになっている。これではビルドが通らない。

$ dpkg -s libeigen3-dev
(中略)
3.3~beta1-2

えいっ

$ sudo vi /usr/include/eigen3/Eigen/src/Core/util/Macros.h
- #define EIGEN_MAJOR_VERSION 2
- #define EIGEN_MINOR_VERSION 92
+ #define EIGEN_MAJOR_VERSION 3
+ #define EIGEN_MINOR_VERSION 0

これで無事ビルドは通った。何も見なかった。良いね?

依存パッケージのインストール

基本的にはソース一式に入っているcripts/build_tegra_x1.shの通りなんだけどvenv環境で動かしたので少し変更した。

$ sudo apt-get install python3-dev python3-venv
$ sudo apt-get install cmake libgflags-dev libgoogle-glog-dev libprotobuf-dev protobuf-compiler
$ sudo apt-get install libleveldb-dev liblmdb-dev libpython-dev libsnappy-dev
$ python3 -m venv py352env
$ source py352env/bin/activate
(py352env) :~$ pip install --upgrade pip
(py352env) :~$ pip install numpy
(py352env) :~$ pip install protobuf
(py352env) :~$ pip install hypothesis
(py352env) :~$ pip install six

ソースのダウンロード、ビルド

gitからソースを入手する。結構時間がかかる。ビルドも長いのでjetson_clockとnvpmodelを叩いておくと良さげ。

(py352env) :~$ git clone --recursive https://github.com/caffe2/caffe2.git
(py352env) :~$ cd caffe2
(py352env) :~/caffe2$ mkdir build
(py352env) :~/caffe2$ cd build
(py352env) :~/caffe2/build$ cmake -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF ..
(py352env) :~/caffe2/build$ make -j 4

足りないパッケージ、jupyter notebookの追加、環境構築

futureは入ってないと「from caffe2.python import core」した時に

~/caffe2/build/caffe2/python/core.py in ()

      • > 24 from past.builtins import basestring

ImportError: No module named 'past'

とかって怒られる。

(py352env) :~$ pip install future
(py352env) :~$ sudo apt-get install libfreetype6-dev libpng12-dev
(py352env) :~$ pip install matplotlib
(py352env) :~$ pip install jupyter
(py352env) :~$ jupyter notebook --generate-config
(py352env) :~$ ipython
(py352env) :~$ vi ~/.jupyter/jupyter_notebook_config.py
(py352env) :~$ cd caffe2/build
(py352env) :~/caffe2/build$ jupyter notebook

Jupyter Notebookは以前*1環境構築を記事にしたのでそちらもどうぞ。

caffe2のpythonモジュールはbuild/caffe2とかに入っているので、jupyterコマンドはbuildディレクトリで打つと「from caffe2」した時に良い感じになった。一応これで「python/tutorials/Basics.ipynb」の冒頭を実行できることは確認した。このまま少し遊んでみようと思う。

そういえば、caffe2をビルドはしたけどインストールしてないような気がする。ま、いいか


[2018/03/21 追記]
Basics.ipynbを試してたら可視化するところでパッケージが足りずエラーになってしまった。以下を追加して解決した。

$ sudo apt-get install graphviz
(py352env) :~$ pip install pydot