NNgen

NNgenをやってみる1(インストールとテストコード実行編)
ディープ・ニューラル・ネットワーク用の完全にカスタマイズ可能なハードウェア合成コンパイラ の NNgen をやってみようと思う。
NNgenをやってみる 2(hello_nngen)
前回は、NNgen をインストールして、テストコードを実行したが、テストコードは完走できなかった。今回は、NNgen/nngen の Getting started の hello_nngen.py を実行してみた。
NNgenをやってみる 3(NNgen オペレーターで表す DNNのデータフロー)
前回は、NNgen/nngen の Getting started の hello_nngen.py を実行した。今回は、 hello_nngen.py の Python コードの内の DNN のデータフローの NNgen オペレーターでの表し方を見ていこう。

NNgen を再度やってみる1
”第3回ACRiウェビナー:Softwareエンジニアにも使って欲しいFPGAの実力”で NNgen の講演をみて再度 NNgen をやってみようということでやって見ることにした。
以前やっていた NNgen は消去して、1 から始めてみよう。
NNgen の Github を見て、環境を整えよう。
NNgen を再度やってみる2(hello_nngen.py)
前回は NNgen をインストールする準備を行って、NNgen をインストールした。今回はサンプルの hello_nngen.py をやってみよう。
NNgen を再度やってみる3(hello_nngen.pyその2)
前回は、サンプルの hello_nngen.py をやってみて、IP-XACT の hello_nngen_v1_0 IP を作成した。今回は、hello_nngen_v1_0 IP を Vivado で実装してみよう。

「ゼロから作るDeep Learning」の2層ニューラルネットワークをNNgenでハードウェア化する1
2017年の 6 月にやってみたオライリー出版社の”「ゼロから作るDeep Learning」”の deep-learning-from-scratch/ch05/ を使用した MNIST の 全結合層2層のニューラルネットワークをやってみたことがある。(”「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化1”参照) 今回、それを NNgen でハードウェア化してみたい。
「ゼロから作るDeep Learning」の2層ニューラルネットワークをNNgenでハードウェア化する2
前回は、以前の”「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化1”の 2 層全結合ニューラルネットワークを再びやってみた。今回は、”「ゼロから作るDeep Learning」の2層ニューラルネットワークのハードウェア化1”の 2 層全結合ニューラルネットワークをNNgenのオペレータを使ってMNISTの2層全結合ニューラルネットワークの実装を行った。まだ進捗が少ないが書いておく。

「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する1
前回の”「ゼロから作るDeep Learning」の2層ニューラルネットワークをNNgenでハードウェア化する2”の全結合層 2 層のニューラルネットワークの NNgen での書き方がよく分からないので、今回は CNN でやってみることにした。
「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する2
前回は、”「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化1”の量子化ビット数を変更して MNIST CNN を学習した。今回は、NNgen の hello_nngen.py の CNN を参考に、前回学習した MNIST CNN を NNgen のデータフローを使用した CNN として書き直した。そして、「ゼロから作るDeep Learning」のMNIST CNNの重みやバイアスの配列の形状を見て、reshapeでNNgenに合わせた。
「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する3
前回は、NNgen のデータフローを使用した CNN として書き直した MNIST CNN を示した。しかし、これを NNgenデータフローをソフトウェアとして実行して、DNNモデルの動作を確認すると出力データが同じになってしまった。よって今回はそれを書き換えた。そして、「ゼロ から作るDeep Learning」のCNN の重みとバイアスを与えて、 NNgenデータフローをソフトウェアとして実行して、DNNモデルの動作を確認したが、データがおかしい。
「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する5
前回は、オライリー出版社の”「ゼロから作るDeep Learning」”の deep-learning-from-scratch/ch07/ の畳み込みニューラルネットワーク(CNN)に NNgen での整数(と同等)の重みとバイアスにして推論してみたが、うまく行った。今回は、Jupyter Notebook の今までの記述をまとめて貼っておこうと思う。
次やるときは、Keras の MNIST の実装を ONNX のモデルに変換してから NNgen に取り込んでみようと思う。

ONNX と keras2onnx をインストールする
オライリー出版社の”「ゼロから作るDeep Learning」”の CNN から NNgen を使って CNN のハードウェアを生成する試みはとりあえず成功しなかった。今度は、ONNX モデルから NNgen に変換してみよう。ということで、自分の Ubuntu 18.04 LTS に tensorflow, keras, onnx, keras2onnx, onnxruntiome をインストールした。

私の nngen の現在の状況
「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する企画では、nngen での推論がうまく行かなかった。たぶん、「ゼロから作るDeep Learning」のCNNと NNgen はネットワークの構造の定義が何処か違うのではないかな?(”「ゼロから作るDeep Learning」のCNNをNNgenでハードウェア化する3”)
そこで onnx モデルから NNgen のモデルに実行しようとしたのだが、 onnx を動かそうとしているうちに NNgen も動作しなくなってしまった。やはり、Docker で構築したほうが良いかも知れない? Docker を使うとハードディスク容量が食われてしまうので、余り使いたくないのだが。。。



inserted by FC2 system