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
を使うとハードディスク容量が食われてしまうので、余り使いたくないのだが。。。