ども、遠藤です。
RTLのお陰でソフトウェアとハードウェアの垣根がふわっとしているということで、 ソフトウェアエンジニアといえどもハードがわからないとダメだ という気持ちを持っています。 今回、ハードウェア寄りのセミナーを受けてみようということで、 Design Solution Forum にいってきました!
今回の講演では Deep Learning の推論を組込み環境で動かそう、という発表が多く、 図らずも最近の業務に近い話が聞けました。
クラウドコンピューティングが流行ってなんでもかんでもクラウドで動かそうという機運がありますが、 一方エッジ側でもある程度計算処理を動かす需要があると前から感じていました。
エッジ側でヘビーな計算処理を動かすためには、なるべく低電力で低コストなハードウェアが必要になりますし、 ソフトウェアも様々な制約条件が課せられるため、簡単ではないと思われます。 そんな状況で、ソフトウェアとハードウェア両方がわかる人間として、うまく橋渡しできる人間になりたいと思った 就活時代の私を思い出させる、いい時間を過ごすことができました。
講演内容ざっくりまとめ
下の方に各公演の内容をまとめていますが、全体を通してざっくりまとめました。
- 話題の大半は Deep Learning と RISC-V
- Deep の話は正直似通ったのが多かったので、RISCのセッションも聞きに行けばよかった
- AI(Deep Learning) 技術を活用するには、エッジ側での計算がある程度必要
- エッジヘビーコンピューティングの需要は高そう
- 必要なのはストレージではなく、計算資源と、限られた計算資源で効率的に問題を解くアルゴリズムだと思われる
- Deep Learning では量子化(2値化、対数量子化)など、またその条件下で効率よく学習するアルゴリズムが必要
- エッジ側の計算資源としては、組込みGPU or HWA (includes FPGA)
- RasPi の GPU では、情報公開が進み誰でもアセンブラをかける環境になった
- 組込みこそ、ヘテロジニアス・マルチコア構成となる時代へ
- 大規模になればなるほど自動生成のアプローチが重要
- Deep Learning 等移り変わりの激しい状況下で、FPGAは有効
- エッジヘビーコンピューティングの需要は高そう
- 日本が世界と戦うためには依然モノづくり、AIを組込んだ製品で差別化したい
- 自動生成の話が複数
- Keras/Chainerモデルから組込み環境向けC/RTLの生成など
- マルチコア向けとして、ドイツの Silexica が興味深い
受講メモ
各講演のポイントをざっくりまとめました。 流し読みがおすすめです。
基調講演: 自動運転的な話
- Google は人間の介入なしに 8000km 走行可能なまでに進んでいる
- 各社 Level3 はスキップして、Level4 に進もうとしている
- Mobillity as a Service の時代がやってくる
Session C-1: RasPi でディープの推論
- Idein さん: モバイル向け組込みGPUを用いたエッジコンピューティングのベンチャー企業
- RasPi 搭載 GPU の仕様が Broadcom より2014年に公開され、下記のツールを作った
- PyVideoCore: GPU用アセンブラ、実行基盤
- QMKL: 数値計算ライブラリ
- QDNN: DNNライブラリ
- NN計算グラフコンパイラ・最適化
- MLIR: 計算グラフを表現する中間言語 (?)
- RasPi3 / RasPi zero でリアルタイムな推論ができた
- GoogLeNet: 280ms on Pi3 / 670 on Pi zero
- ResNet50: 728ms on Pi3
- SqueezeNet: 180ms on Pi3
- YOLO tiny: 580ms on Pi3
- 認識ネットワークの進化は、同じ精度を小さいネットワークで実現する方向に進んだ
- MobileNet 2017
- DenseNet 2016
- 所感
- VideoCore 向けの OpenCL 環境作ったらちょっとは流行るかな?
Session C-2: 検証IP
- インドの SmartDV の宣伝
- ドキュメントが揃っている、1000ページ級
- ヘルプデスクでは、質問が来るとドキュメントに対するポインタを返すだけで済んでいる
- 日常業務でも、積極的なドキュメント化は有用と感じた
- 合成可能なVIPによって、検証が加速する
- シミュレーション/FPGA同じAPIでVIPが使える
- RTLシミュレーションに比べ830倍高速
- 通信系のエラーインジェクション等、通信系ではVIPによる検証が必須
Session C-4: コキュートス (KerasモデルをCに自動変換)
- 市場動向について
- 携帯電話向け SoC でディープラーニングの推論が動く時代に
- 各社組込み向けディープラーニングフレームワークを開発
- 日本でも官民一体で組込み向けDLを推進中
- Kerasのモデル(JSON & HDF5)を読み込んで、C言語のコードを生成
- グラフの最適化等はやらない
- 生成したCソースファイルを、人間が手動で最適化可能
- CPU + NEON での動作を想定、FPGA w/ HLS はうまく動いていない
- 組込み向けの特徴
- メモリ動的確保やファイルシステム不要
- メモリの使用量が事前にわかる
- 依存ライブラリを少なくしている
Session C-5: CEVA DSP
- DSPコア数やCNN HWAの有無をコンフィグ可能なIPを提供
- HW構成が変わっても、ソフトウェア側は単一のライブラリ経由で使用可能
- cuDNNとかもそうだが、アプリ側の再利用性を確保することが重要
Session C-6: 2値化CNN on FPGA for 歩行者検出
- DLを組込み環境で動かすなら、FPGAが適している
- GPU(Jetsonを想定)は、電力食いすぎて使えない
- アルゴリズムの高速な進歩、アプリごとのカスタム構成に対応できる
- FPGA化するためには2値化は必須
- 乗算がXNORで書ける
- 重みのデータ量が大幅に削減 -> block RAM に乗る 外付けDRAMはオンチップメモリの200倍電力を食う
- 使用するネットワークの選定が重要
- 複数のモデルを比較したとき、ラベル数の大小によって性能が逆転する場合がある
- HLS(SDSoC)がなかなか使い物になる
Session D-7: FPGAボードの宣伝
- Amazon F1インスタンスと同じ石を積んだボードなど、多種多様なラインナップ
Session C-8: アルゴリズム・ハードウェアの協調設計
- CNNを専用チップで解きたい
- アルゴリズムを検討する時に、ハードウェアの特性を意識することで、高精度でいい感じに動くシステムを構築できた
- ハードウェア側の工夫
- 数値表現の工夫(FloatingPoint -> FixedPoint -> Binary)
- BRein Memory を提案
- 初の Processing in Memory (メモリセル内での演算) アーキテクチャ
- 重みを読む時に同時に積を計算する(XNORする)
- CPUより100倍速く、27k倍電力効率が良い
- アルゴリズム側の工夫
- 学習時に量子化誤差を考慮して loss を計算する
- 量子化でビット数を削減しても、精度を出すことができる
Session D-9: マルチコアソフトウェアの自動生成
- ドイツの Silexica の紹介
- 創立2-3年のベンチャー企業、50人ほどのメンバー
- $8Mの投資を受けたらしい
- 大学院の研究をもとに起業したとかなんとか
- 一般的にマルチコア開発は職人の勘で作られている
- コア間通信のコスト見積もりを誤り、マルチコア化で遅くなる事例多数
- タスク数が増加するとともに、難易度が爆発的に増加
- コード解析から、並列化(タスク並列・データ並列・パイプライン化)可能な部分を検出
- 動的解析もやる
- キャッシュミスの測定
- バスの占有率・通信遅延
- 解析結果をもとに、動作アーキテクチャに合わせた最適化を実施する
- 無料のトライアルがあるので、ぜひやったほうがいいと思う
Session C-10: AI x 組込み
- 組込み協会でAI研究会的なものを立ち上げた宣伝がメイン
- これまでの技術動向
- CNNでコンピュータが目を手に入れた
- ROSの発展で足や翼を手に入れた
- ロボット制御が誰でもできるようになったという意味らしい
- 周囲の状況を見てロボットを制御できるようになった
- 人間は周囲の状況だけでなく、知識をもとにして動作を決定している
- 知識を計算機でどう表現するかが、まだ未解決
- どのようにルールを獲得させるかが問題
- Semantic Web でやっているオントロジーといった技術を使いたい?