tkato’s blog

ブログ名は暫定。

BNN-PYNQをリビルドする

本日3/7、XilinxがPYNQで動くBinarized Neural Network (BNN)の実装を公開しました。 DeepLearnigのアルゴリズムFPGAにオフロードしたい人にとっては、とても良い勉強材料になると思います。

リポジトリ公開当初は、Pythonで共有ライブラリをキックする部分とビルド済みの共有ライブラリしか公開されておらず、ドライバとアクセラレータのソースは非公開でした。

github.com

中身を詳しく追う前に、とりあえずビルドしてみました。

ビルド環境

  • Ubuntu14.04
  • SDSoC 2016.1

ビルド用のスクリプトが付属しているので、それを実行するだけでできました。 SDSoCそのものは使いません。付属のVivadoとVivado HLSを使います。 最初Windowsで試してみましたが、うまくいかず…*1

ビルド手順(ハードウェア)

以下に記載があります

BNN-PYNQ/README.md at master · Xilinx/BNN-PYNQ · GitHub

ハードウェアのビルドは「Hardware design rebuilt」に記載がある通り。

環境変数XILINX_BNN_ROOTは/BNN_PYNQ/bnn/src/network/では動かなかった。/BNN_PYNQ/bnn/src/が正しそう。*2

BNNのアーキテクチャはCNVとLFCがあります。 今回LFCを試したところ、実行開始から10分程度でbitstream生成まで終わりました。

./make-hw.sh lfc-pynq pynq a

f:id:tkat0:20170307231518j:plain

f:id:tkat0:20170307231514j:plain

ビルド手順(ソフトウェア)

Pythonとハードウェアの間にあるCのドライバのビルド方法。こちらは、PYNQ上でビルドする必要があるようです。上記READMEの「Quick Start」に記載ありますね。

その他

自前で書いていたBNNはビルドに少なくとも20分はかかる上、性能もソフトより遅かったので、BNN-PYNQのコードが公開されたことは勉強する上で非常に嬉しい。ソースを見ていると、hls_streamがデータフローの基本になっているよう。

*1:今回Git Bashをつかってスクリプトを叩いた。ちゃんと環境構築すればWindowsでもできるかも?

*2:追記(03/10):公式に修正されたようですね