fpgax（FPGAエクストリーム・コンピューティング）#12 聴講メモ

# FPGAエクストリーム・コンピューティング#12　のメモ
[FPGAX(FPGAエクストリーム・コンピューティング)とは](https://fpgax.connpass.com/)
>もうCPUに縛られたコンピューティングは飽きた！FPGAの新しい遊び方を考える会です。

今回はその第12回目となり、以下のテーマで行われた。
>今回のfpgaxは、HPC向けの大規模FPGAクラスタの話、Elixirで高位合成の話、そして金融向け最適化のリアルタイム実装などなど。

https://fpgax.connpass.com/event/152964/

[当日のTogetter](https://togetter.com/li/1429854)

# ElixirでFPGAを設計する
6:00pm: 高瀬 英希さん（京都大学／JSTさきがけ）
>日本人はナゼか高位合成が大好きらしいです。そして巷では好きなプログラミング言語で高位合成系を自作しちゃうのが大好きクラスタが居ます。私は関数型言語Elixirが（HP/MP全回復できて）大好きなので、Cockatriceという高位合成系を作っています。Elixirをハードウェア設計言語だと捉えるとどんなメリットがあるのか、Elixirコードからどんな回路をどうやって合成するのか、ざっと概説します。

[発表スライド](https://www.slideshare.net/takasehideki/elixirfpga-192691604?ref=https://fpgax.connpass.com/event/152964/presentation/)

## 自己紹介
・京都大学、JSTさきがけ兼任研究者
・ROS、関数型言語、IoT関連のコミュニティに参加
・11月に准教授

## Elixir（エリクサー）とは
・Zenである‼
・2012年に登場した新たな関数型言語
・Erlang VM上で動作
・Rubyを基にした言語設計
・WebフレームワークPhoenixを持つ

## Elixir Zen Style
・Enum:データ加工ライブラリ
・Flow：並列処理を記述
・プログラムの本質であるデータと並列処理の流れをEnum Flow |>　で直感的に記述

## Elixirよさ
・オブジェクトの不変性
・バイナリ操作とパターンマッチ
・軽量かつ堅牢なプロセスモデル

## IoTむけ
・Nerves
・ブートローダ＋rootf＋Erlang OTP＋Elixirアプリを一括書き込み
・IoT関連のライブラリ：GPIO、I2C など
・NervesJPというコミュニティ

## FPGA　高位合成
・HLS(High Level Synthesis)
・Xilinx Vivado
・Intel FPGA SDK for OpenCL
・C++ができればいいかというとそうでない
・C++じゃだめじゃないかという派閥：Chisel、C*aSHなどなど
・高位合成のポリシー2種類
　①C++にpragmaとかライブラリ拡張でハードウェアを意識して設計させる
　②ソフトウェアの言語でハードウェアを組ませる
・高位合成友の会
・なお"Vivado HLS"の検索は日本が一位

## Cockatrice
・ネーミングはエリクサー、フェニックスのFF感を意識？
　エリクサーをコカトリスが石化
・ソフトウェアとハードウェアのインターフェース回路を提供
・CockatriceはElixirの書き方をそのまま活かす
・通信インタフェースはElixir->Erlang VM->NIF->DMA->FPGA
・現状は通信が重い

## Cockatriceの今後
・現在、プロトタイプ
・適用範囲をHPC、AI/MLへ
・Nervesを組みわせる

Q:インタプリタ言語の場合二つのやり方。どのようにしている？
　タイプインファレンスレンス必要と思うが。
A:タイプには強い制約。数値のデータで3次元のリストまではやる。

Q:Erlang詳しくないが、不定長のビットストリームは書ける？
A:少なくともElixirはバイナリ操作とパターンマッチで書ける。不定長をそのままHW化するのは厳しいので、なにかちゃんと考えないといけない。

# シミュレーテッド分岐アルゴリズムのアクセラレータとその応用
6:30pm: 辰村 光介さん（東芝 研究開発センター）
>シミュレーテッド分岐（SB）は量子断熱最適化に基づく量子計算機の古典対応物として導出される組合せ最適化アルゴリズムです。SBのFPGAベース超並列アクセラレータと、それを応用した低遅延・最良機会の金融取引マシンについて講演します。

[発表スライド](https://drive.google.com/file/d/1E--xMPxTk1I6KMJVrOLrOpHN27zcmXFy/view)

## 概要
・東芝独自の量子コンピュータを対象
・並列度の高いアルゴリズム
・デザインと評価、実例を示す

## 
・組み合わせ最適化は昔からあるが計算して解くのが難しいもの
・金融では、有利な資産、取引コストを最小化、リスク最小・利益最大
・どれもNP-hard
　従来はどれもシミュレーテッドアニーテッドが良いとされている
・イジング問題にマッピングして解く
・イジング問題はNP-hard&NP-complete
・ポイントは変数がバイナリまたはアップダウン
・エネルギー最小なスピン配置を求める問題となる
・NTT/Stanford/U-TOkyoがSoTA

## Simulated Bifurcation(SB)
・SBがすぐれていることを発見的に示した
・うまく並列化できる実装をすれば極めて速くなる
・動的に探索：原点にローカルミニマムを持っている状態で開始
・断熱探索：ローカルミニマルを追いかけるように動く
・Ergodic Search：ふらふらと良い解を探すような動き
・全体としておさまりのいいところを探す
・SBはMany-body interactionとTime evolutionで構成
・Many-body interactionは大量の行列積

・Max-Cut Bench
・Arria FPGAで269MHｚ
・NTTのCoherent Ising Machinより14倍速く、エネルギー効率は200倍
　CIM:1000W
　FPGA-SB:49W

・Tesla実装よりFPGAの方が11倍速い
　Tesla:126W, FPGA:51W

## 金融応用
・arbitrage system：為替の変換レートの組み合わせで利益率最大になるものを探す
・すべての処理を30ms以内に完了できるシステムを構築
・実験結果：1msしかチャンスの無いレートもとらえている
・0以上の利益の出る取引は90%以上

# まとめ
・量子コンピュータのような冷却不要
・柔軟に構築できる
・高い精度

Q:ボルツマンマシンを瞬時に学習できるのでは？
A:バックプロップをダイナミックにという論文はある（Google？）。


# 柔軟な資源割当てを可能とするFPGAクラスタシステムとそのネットワーク
7:00pm: 佐野 健太郎さん（理化学研究所 計算科学研究センター）
>現在研究開発を進めているFPGAクラスタシステムを紹介します。本システムには、既存の高性能計算機に対しFPGAクラスタ部を容易に拡張でき、かつ、任意のCPUノードにシステム内のFPGAリソースを柔軟に割当てて使用可能な特徴があります。システムの仕様や実装の詳細に加え、例えばクラウドにおけるFPGAリソース利用といった応用への期待や産学連携の可能性について、お話します。

## 自己紹介
・東北大で計算機アーキテクチャ
・最近理研に異動、客員で東北大
・最近密結合FPGAクラスタ
・理研の紹介：京はグラフ処理では最後まで1位だった。
　後継の「富岳」の由来はさまざまなアプリケーションに裾野が広がるイメージ
　富岳はArmアーキテクチャ
　富岳の10ラックで京相当
　富岳は全部で150万ノード
・来年、理研のR-CSS国際シンポジウムで富岳の見学ツアー予定

## 
・今までは0.7掛けでトランジスタが集積度が小さくなったが、いまやナンバリングとなった 
・チップは小さくならない。3次元で大きくするしかない
・チップを増やすしかない？チップ間の伝送遅延が課題？
・たくさんのチップを相対的に大きな通信・同期するアーキテクチャが必要
・システムワイドにデータフローを計算してはどうか→どうすればいいか

## FPGAクラスタのアーキテクチャ
・CPUとFPGAを密結合：FPGA間の通信に課題
・FPGAのように柔軟性の高い構成
・既存システムに拡張できる
・InifinibandでCPUServerとFPGAを接続
・FPGAはIntel Startix10
・独自のコンパイラを使ってFPGA内を構築
・FPGAのドライバ：Intel OPAE
・拡張してRemote-OPAEを開発：ソフトウェアブリッジで接続
　空いているFPGAがあれば使える
・FPGA間のネットワーク：リング接続、しかし資源割り当てに柔軟性がない
・検討中：Ethernet、2D torus
　産業向けにはEtherがおすすめ、仮想回線交換網を構築する

## ポストムーアに向けて
・新アーキテクチャ、アプリケーション特化
　すでにスマフォがそう。例：Apple A11

Q:メカニカルな接続がネック。無線はどうか？
A:ブロードキャストでうまく使えれば。Tofuのネットワークは同期が大変。

C:GoogleのクラウドでアクセラレータはGPU。CPUはコンテナ化で仮想化できてるが、GPUは仮想化できてない。1クラスタ1万台が目安。


# LTタイム
7:30pm: 

## ROS+FPGAを使ったロボット開発
（京大、新田さん）
### Zytlebot
・FPGAデザインコンテスト（昨年からロボット）
・初の海外チームも来る？
・ZytlebotはZynq+TurtleBot：FPGA上のROSでコントロール
・今後：SDSおCとの連携、DNNDKためしたが電力がネック

## FPGAとGPUの性能比較ベンチマークをやってみた時にそこそこ苦労した話
（安藤潤、ザイリンクスジャパン） 
>NVIDIA GPUとXilinx FPGAの両環境で、モンテカルロシュミレーションを活用して円周率計算のベンチマークを実施しました。その際のちょっとした苦労話と経験から得たノウハウを皆様にシェアします。
 
・モンテカルロ法による円周率計算：乱数生成時間でベンチマーク
・FPGAはAlveo U200
・ハードウェアをHLS、ホストアプリはOpenCL、あとは
・比較対象のGPUはNVIDIAのライブラリを使用
・パイプライン構造を大きなものではなく、小さなものをたくさんに変更
　おっきなFor文を分割
・最終的にはGPUの11倍の性能
・AWS　S1で試せる

## FPGAを使ったAIエッジコンテストのお知らせ＋α
（nkhrさん） 
>１１月中旬〜下旬に開催予定のUltra96V2 FPGAを使ったAIエッジコンテストの紹介をします。あと、何かデモします！

・東工大　中原先生
　中国人コミュニティにいたが彼らは英語名で呼び合っていてナックを名乗ったが使ってもらえなかった。

・AIエッジコンテスト　詳細は後日
　Ultra96V2、学習データ、賞金
　Ultra96を80名くらいにばらまく。
・他業界の人をFPGAに引き込みたい
・GoogleColab + Keras
・実施期間　2019年11月～翌3月
・デモ：自腹で買ったUltra96V2
・YOLOv2 Pynqデモ
・演算時間37.1ms
・コンテストでは畳み込み演算を早くするのがポイント

Q:モデルはYOLOのみ？
A:ルールはこれから。なんでもいいと思っている。

Q:DNNDKは使える？
A:設計じゃなくパラメータ競争になるのでやめてください

## Google Colaboratoryで始めるFPGA開発入門
（aster_ismさん）

[発表内容のブログ](http://aster-ism.hatenablog.com/entry/2019/11/17/223002)

・某自動車部品会社の研究開発職
・FPGA開発したいけど時間と金がない：スマホでやりたい
・Vivadoがデカい：うまくやる
・WebInstaller：100MGでもうまくいったりいかなかったり。
・インストーラ（20GB）でやる？
・セットアップ後のイメージをDriveに置いておくやり方。3分くらいで立ち上がる。
　CUIの難易度高い
・CUIインターフェイスにVivadoMagicを作っているところ


## FPGAを用いたDeep? Learningのデモ
（SAKURAIさん）

[発表スライド](https://www.slideshare.net/atsushiSAKURAI2/deep-learning-demonstration-using-fpga?ref=https://fpgax.connpass.com/event/152964/presentation/)

[Qiita記事](https://qiita.com/mocapapa/items/f92dd112cceba7c229b3)

・機能安全コンサルタント
・30年間マイコン設計者
・本業でADAS/ADの応用に携わる
・~Deep~ Cheeap Learning
・40周年のSpace Invadersをフルハードウェア実装：世界初かと思いきや世界に5人くらい
・Ultra96でインターフェイスは別ボード
・得られた知見
　FPGAはマイコンソフトウェアとあまり変わらない
　ツール無償（Vivado、Eagle）
　基板発注安い
　強化学習につなげたい
・実機デモ

https://www.youtube.com/embed/MiLI1Gk0IlI


Q:レイテンシ―も再現できている。
A:中にTicがある。バグも再現


## Intel社 OpenCLを用いた単眼での深度推定について
（東工大、佐田さん） 
>Intel社 OpenCLを用いたMonocular Depth EstimationのFPGA実装について話します．OpenVINO Starter Kitを用いたデモをお見せします．

・InnovateFPGAコンテスト
・NYU Depth v2
・OpenVINO starter kit
・Cyclone V GX
・MobileNetベースのモデル
・52FPSで動作
・コンテストでAPJ　Silver Award

Q:スパースとは？
A:重みが０のところはスキップ

## DNNのモデル特化ハードウェアを生成するオープンソースコンパイラNNgenのデモ
（東大、高前田さん）＋コニカミノルタ 藤崎さん

[発表スライド](https://www.slideshare.net/shtaxxx/2019-1112-fpgax-nngen?ref=https://fpgax.connpass.com/event/152964/presentation/)

[GitHub](https://github.com/NNgen/nngen)

・最近東工大へ
・北大のラボでバイナリネット
　DitherNN、DeltaNet
・NNgenというコンパイラ：コニカミノルタと共同
### NNgen
・Define And Run（ハードウェアのため）
・TensorFlowのような入力
・ベンダーのツールに依存しない
・最近
　ONNX対応
　学習済みモデルの量子化

・今、NNgenをオープンソースにしました

・TinyYOLOv3のデモ
　12~13FPS
・OSSカンファレンスでディープに話します