FC2カウンター FPGAの部屋 2019年07月06日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

hls4mlをやってみた7(自分で学習したネットワークをhls4mlでハードウェア化2)

hls4mlをやってみた6(自分で学習したネットワークをhls4mlでハードウェア化1)”の続き。

前回は、白線追従ロボットカーの学習データ keras_curve_cnn2_line を hls4ml でVivado HLS 2019.1 のプロジェクトにしようということで、白線追従ロボットカーの学習データのネットワーク構造と重みのファイルを出力した。今回は、それをhls4ml でVivado HLS のプロジェクトにしてみよう。

keras_curve_cnn2_line.json と keras_curve_cnn2_line_weights.h5 をhls4ml/keras-to-hls/example-keras-model-files/ ディレクトリにコピーした。
hls4ml_28_190704.png

hls4ml/keras-to-hls/ ディレクトリに keras_curve_cnn2_line.yml を作成した。
hls4ml_29_190704.png

keras_curve_cnn2_line.yml の内容を示す。
hls4ml_30_190704.png

KerasJson: example-keras-model-files/keras_curve_cnn2_line.json
KerasH5:   example-keras-model-files/keras_curve_cnn2_line_weights.h5
OutputDir: keras_curve_cnn2_line
ProjectName: keras_curve_cnn2_line
XilinxPart: xcku5p-sfvb784-1-e
ClockPeriod: 5

IOType: io_parallel # options: io_serial/io_parallel
HLSConfig:
  Model:
    Precision: ap_fixed<16,6>
    ReuseFactor: 1



hls4ml でVivado HLS の tcl ファイルを作成する。
python keras-to-hls.py -c keras_curve_cnn2_line.yml
hls4ml_31_190704.png

hls4ml/keras-to-hls/keras_curve_cnn2_line/ ディレクトリができて、その下に build_prj.tcl が生成されている。
hls4ml_32_190704.png

Vivado HLS で build_prj.tcl を実行したところエラーが出てしまった。
cd keras_curve_cnn2_line
vivado_hls -f build_prj.tcl

hls4ml_33_190704.png

ERROR: [XFORM 203-504] Stop unrolling loop 'Product1' (/home/masaaki/DNN/hls4ml/nnet_utils/nnet_dense.h:97) in function 'nnet::dense, ap_fixed<16, 6, (ap_q_mode)5, (ap_o_mode)3, 0>, config6>' because it may cause large runtime and excessive memory usage due to increase in code size. Please avoid unrolling the loop or form sub-functions for code in the loop body.
ERROR: [HLS 200-70] Pre-synthesis failed.
command 'ap_source' returned error code
while executing
"source build_prj.tcl"
("uplevel" body line 1)
invoked from within
"uplevel \#0 [list source $arg] "


large runtime and excessive memory usage エラーだった。このエラー、何とかならないものだろうか?何時間、何日かかっても良いので、続けて欲しい。Xilinx さん、よろしくお願いします。

一応、Vivado HLS 2019.1を立ち上げて、もう一度、C コードの合成をやってみたが結果は同じだった。
hls4ml_34_190705.png

hls4ml は小さいネットワークの時のみ、使えるみたいだ。
  1. 2019年07月06日 04:34 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0