« ゼロから作るDeep Learningをやってみた | トップページ | JTAGチャレンジ基板がほぼ完成 »

2018.07.29

Zynqberryでディープラーニングが動いた!

ZYNQ搭載のRaspberry Pi型ボードで「Zynqberry(ジンクベリー)」というのがあります。

Zb

このボードにはZynqberryスタータキットというのがあって、Ubuntu Linux 14とJupyter Notebookがすぐに動くように環境がセットアップされています。

Zynqberry上のJupyterで、オライリーのゼロから作るDeep Learningの本に書かれている推論や学習をやってみました。

まず、第3章のMNIST推論プログラムです。

Learning

文字の正答率は93%で、パソコンと比べて遜色はありません。Pythonとnumpyで動いているプログラムなのであたりまえといえば、あたりまえですが。

ここまではサクッとと動きました。MNISTデータ60000件の推論も1~2秒程度できているので、スピードも遅くありません。推論はね。

sun

ですが、学習させると遅くなります。

まず、第4章の学習プログラムを走らせようとすると、Memory errorと出て停止してしまうのです。numpyでは大きな行列計算を当たり前の記述できて実行できますが、大きな行列を作るにはそれなりにメモリが必要なようで、512MBのメモリでは不足してしまうようです。

そこで、Linuxのswaponコマンドを使って仮想メモリを有効にしたのですが、仮想メモリというのはSDカード上に造られるので、読み書きに時間がかかってしまうというのが理由のようです。

下の図は夜中に走らせたときの結果ですが、1時間程度かかっています。

PCで20秒の計算が1時間です。

Zb_learn

次の実行結果では2時間程度かかっています。2回目の実行で2時間かかったのは、デスクトップウィンドウマネージャとかを動かしていたから、さらにメモリが足りなくなっていたのかもしれません。

Zb_learn2

ですが、学習結果の認識精度についてはパソコンと同じです。

下の図はcat /proc/meminfoで学習している間のメモリの情報を表示したものです。MemFreeとSwapFreeが極度に減っているのがわかります。

Zb_learn3

TOPコマンドの結果をみても、python3.5のVIRTが715556になっていて、大きなメモリを使用しているのがわかります。

Top

sun

今回の実験はZynqberryのZYNQをARMマイコンとして使っているだけなのですが、メインメモリが512MBに限られている環境では、ディープラーニングの学習をPythonのプログラムで行うのはメモリ的にきついことがわかりました。

そもそも、組み込みのIoT端末に学習させることはあまりないかもしれませんが、不可能ではないことが示せました。

推論のほうは十分な速度が出ていますが、組み込みコンピューティングに特化して、Pythonを使わずにC/C++で軽量なニューラルネットワークを作ってもいいかもしれないと思えてきました。

誤差逆伝搬については原理を理解してしまえば、Pythonとnumpyを使わずにC言語で組むこともできるので、要望があれば組み込みマイコンに特化した軽量なディープラーニングというのも作っていきたいですね。

sun

ここで紹介したZynqberryは、日本国内の正規代理店(trenz.jp)から即日発送で購入できます。

https://www.trenz.jp/product/TE0726-03M/

Ubuntu Linux 14とJupyterと、SDSoCプラットフォームが整備されたスタータキットがおすすめですよ。

|

« ゼロから作るDeep Learningをやってみた | トップページ | JTAGチャレンジ基板がほぼ完成 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« ゼロから作るDeep Learningをやってみた | トップページ | JTAGチャレンジ基板がほぼ完成 »