RasPiでKeras/TensorFlowを動かすまでの試行錯誤をメモしておく。使った環境は以下の通り。

  • RaspberryPi 3 Model B
  • Raspbian August 2017
  • 16GB SD card(いろいろツールを入れたので8GBでは足りなくなった)

まずはTensorFlowを入れる

TensorFlow公式RasPiサンプルはビルドおそい

最初にTensorFlow公式のRasPiサンプルを試したのだけど、C++のコードをゼロからビルドするので、非力なRasPiでは何時間待っても終わらない...ってグチをつぶやいたら、TensorFlowチームのPete Wardenが絶妙のタイミングでブログ記事Cross-compiling TensorFlow for the Raspberry Piを書いていて、リンクをシェアしてくれた。この記事では、あらかじめビルド済みのパッケージを以下のコマンドでインストールする方法を紹介している。

sudo apt-get install libblas-dev liblapack-dev python-dev \
libatlas-base-dev gfortran python-setuptools
sudo ​pip2 install \
http://ci.tensorflow.org/view/Nightly/job/nightly-pi/lastSuccessfulBuild/artifact/bazel-out/pi/tensorflow-1.3.0-cp27-none-any.whl

このインストール方法も1〜2時間はかかる(途中で寝ちゃったので正確な時間はわからない)けど、公式サンプルより全然マシだ。ありがとうPete!!

ヒートシンクは必須

しかし、このスクリプトでインストールを開始して数10分経ったところで毎回RasPiが固まってしまう。熱暴走っぽいので、RasPi3用のヒートシンクを付け、横に小さなファンを置いて空気を流してみた。

これでTensorFlowのインストールはうまくいった。

つづいてKerasを入れる

Kerasはドキュメント手順どおりのpipコマンドですんなり入った。Kerasが使うh5pyも、

sudo apt-get install python-h5py

として入れておく。

メモリが足りないのでスワップ領域を増やす

しかしここでKerasを動かすと、メモリ不足に起因するエラーが発生。以下のコマンドでスワップ領域のサイズを編集した。

sudo vi /etc/dphys-swapfile

デフォルトのサイズが100MBくらいなので、CONF_SWAPSIZE=1024と編集して1GBくらい用意しておいた。

sudo /etc/init.d/dphys-swapfile restart
swapon -s

を実行して、スワップ領域が大きくなったことを確認。これでKerasが動いた。

GrovePi(オプション)

今回はDexter IndustriesのGrovePiというキットを組み合わせてRasPiにLEDや照度センサー等を付けた。

このキットにはi2cまわりのPythonドライバが付属するので、Arduinoっぽい簡単なPythonコードを2、3行書くだけで周辺デバイスを扱えてとても簡単。ただし、Raspbian August 2017との組み合わせではアナログI/Oがうまく動かない不具合に遭遇したので、このポストを参考に以下のパッチを当てる。

sudo rpi-update 52241088c1da59a359110d39c1875cda56496764
sudo reboot

以上。RasPi3でKeras/TensorFlowがうまく動いた。VGG16ベースのモデルで画像認識すると、1画像あたりおよそ2秒くらいかかる。

<9/22追記>

2秒という速さは素のARMより3倍くらい速い、って指摘をいただいたのでPeteに確認したら、デフォルトでNEONを使ってるとのことです。TensorFlowでGPU:0等の指定をしなくてもNEONが効く。NEON速い。


Disclaimer この記事は個人的なものです。ここで述べられていることは私の個人的な意見に基づくものであり、私の雇用者には関係はありません。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.