FC2カウンター FPGAの部屋 2017年05月31日
FC2ブログ

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

FPGAの部屋

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

Vivado HLSのCoSim がNorton Endpointの検疫に引っかかる

Vivado HLSのCoSim がNorton Endpointの検疫に引っかかってしまった。
Vivado HLS のバージョンは2017.1 だが、2016.4 も同様に引っかかっている。

あるVivado HLS のプロジェクトを作成した。
C-Simulation を行ったら通った。
Endpoint_Cosim_3_170531.png

けれどもC コードの合成を行って、CoSim を行ったらエラー発生。
Endpoint_Cosim_4_170531.png

同時にNorton Endpoint の検疫に引っかかっていた。
Endpoint_Cosim_1_170531.png

詳しいダイアログを表示した。
Endpoint_Cosim_2_170531.png

CoSim 時に自動生成されたcosim.pc.exe が検疫されているではないか。。。

このファイルはCoSim 時に自動生成されているので、これがウィルスということはないと思うのだが。。。怪しい動きをしていたのだろうか?
ちなみに検出結果は”SONAR.SuspScript!g3”ということだった。

Norton Endpoint を立ち上げて、「設定の変更」ボタンをクリックし、
「ウイルス対策とスパイウェアの設定」ダイアログの「グローバル設定(G)」タブで「例外:」の「リスト表示(L)」ボタンをクリックし、
「例外」ダイアログの「追加(A)...」ボタンをクリックして、「SONAR例外」→「フォルダ」を選択して、Vivado HLS のプロジェクトのあるフォルダを指定したところ、CoSim が通った。
Endpoint_Cosim_5_170531.png


  1. 2017年05月31日 15:00 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

ニューラルネットワークの推論のハードウェア化1(概要編)

ニューラルネットワークの推論のハードウェア化をやってみようと思う。
original_NN_1_170530.png

以前、ニューラルネットワークのハードウェア化をやっていたが、それは、2層のニューラルネットワークをその形のままFPGAにハードウェア化していた。ニューラルネットワークを画像フィルタとして使用していたが、パイプライン化されたニューラルネットワークから 1 クロックごとに出力することができていた。そして、積和演算をDSPで行ったのでは、DSPが足りなかった。そこで、ニューラルネットワークの形のまま実装するということは、重みは固定で良いので、乗算をシフト+加算の形に変換した。そして、シフト+加算の形でVHDLを書くのはとっても大変なので、重みの表からシフト+加算の形のVHDL を出力するRuby スクリプトを作成した。これによって、FPGAの使用リソースを削減することができた。また、DSPは使わずにロジックだけで実装することができた。

この方式の欠点は、演算器が片方の定数入力に対して最適化されていて重みが変更できないことだ。ディープなニューラルネットワークで、FPGAに入らない場合はどうするか?ということになる。この場合はFPGAのコンフィギャラブルという最大の利点を生かすソリューションを使うと良い。つまりパーシャルリコンフィギュレーションを使うのだ。パーシャルリコンフィギュレーションを使用すると、層単位または複数層でも良いが、適当な区切りで回路を入れ替えて実行することができる。
例えば、10層のニューラルネットワークだったら、2層ごとにパーシャルリコンフィギュレーションで回路を入れ替えながら、5回やれば良い。各層の重みは定数で良いので、DSPを使用する必要もなく、回路も削減できる。パーシャルリコンフィギュレーションを使えるのはFPGAだけの特権だと思う。ただし、パーシャルリコンフィギュレーションの速度が問題になると思うが、これから検証していこうと思う。

これから、オライリーの本「ゼロから作る Deep Learning」の「5章 誤差逆伝播法」のPython コードを元に、量子化をソフトウェアで行って、結果を確認しながらニューラルネットワークのハードウェア化を行っていきたいと思う。なお、「ゼロから作る Deep Learning」のPython コードはオライリー・ジャパンのoreilly-japan/deep-learning-from-scratch にあって、MITライセンスなので改変したものを公表することができる。
重みやバイアスの統計データを「「ゼロから作る Deep Learning」をやってみる4(4章 ニューラルネットワークの学習)」の「W1, W2, b1, b2の統計データ」に書いておいたが、適当な値に分布しているので、使いやすそうだった。
  1. 2017年05月31日 04:38 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0