hls4ml はVivado HLS を使用して機械学習をハードウェア化するフレームワークだ。以前、FPGAの部屋でもやってみたが、ロボットカーの曲がる方向を示すニューラルネットワークを構築しようとして、large runtime and excessive memory usage エラーで止まっていた。(”hls4mlをやってみた7(自分で学習したネットワークをhls4mlでハードウェア化2)”参照)これを Vitis HLS 2021.1 でやり直してみようと思う。
現在の hls4ml は fastmachinelearning/hls4ml にあるようだ。
hls4ml-tutorial もある。Docker での構築もできるようだ。

さて、すでに keras_curve_cnn2_line_VitisH が作ってあったので、 Vitis HLS 2021.1 で 開いた。e5627680.png


重みやソースコード、テストベンチ・ファイルは firmware ディレクトリにある。
3d2b546c.png


このプロジェクトは Ultra96V2 ボード用だった。
d8e3be7b.png


C シミュレーションを行った。
222d35bf.png


C コードの合成を行ったが、エラーになってしまった。
4b53fac9.png


エラー内容を示す。

ERROR: [XFORM 203-103] Array 'mult.V.1' (/home/masaaki/DNN/hls4ml/nnet_utils/nnet_dense.h:56): partitioned elements number (15600) has exeeded the threshold (1024), which may cause long run-time.
ERROR: [HLS 200-1715] Encountered problem during source synthesis
ERROR: [HLS 200-70] Pre-synthesis failed.



このエラーは Vivado HLS の時の”” ARRAY_PARTITION COMPLETE has exceeded the threshold (1024)”の解決策”でやったはず。。。。

Vitis HLS 2021.1 の Solution メニューから Solution Settings... を選択して、 Solution Settings (solution1) を開いたが、 maximum_size の項目がなかった。。。 orz
3037349c.png


エラーの回避方法は無いのだろうか?