FPGAでのAIと機械学習
ニューラルネットワークがFPGA上でどう動くか、データフロー型とオーバーレイ型アクセラレータの違い、主なベンダーとオープンソースのフロー、そしてFPGAがGPUやNPUに勝つのはどんな場合かを解説します。
概要
FPGAはニューラルネットワークを、他のあらゆるものと同じ方法で実行します。つまり、固定のメモリスケジュールで供給される固定の演算としてです。そのため、ワークロードが数週間ごとに変わる学習には向きません。一方、エッジでの推論には向いています。ひとつのモデルが何年も動き続け、入力はセンサーストリームで、ピークスループットよりもレイテンシ、電力、決定性が重視されるからです。このハブは、モデルをそもそもFPGAに載せるべきかどうか、載せるとすれば大きく異なる2つのアクセラレータ構築法のどちらを使うかを判断するエンジニアのためのページです。
本稿執筆時点での率直な要約はこうです。大規模言語モデルや、バッチサイズをもった密な行列乗算が支配的なものについては、GPUと専用NPUがワット当たりスループットとソフトウェアの成熟度で勝ります。FPGAが勝つのは、変わったデータ型を使うレイテンシ重視の小さなモデル、センサーやネットワークのパイプラインに直接組み込まれるモデル、そして別の理由ですでに選ばれているデバイス上で動かさなければならないものです。
重要な考え方
量子化がすべて
浮動小数点はFPGAにとって高くつきます。32ビットの積和演算にはDSPスライスに加えて多くのロジックが必要ですが、8ビットの乗算はほとんどのファミリーでDSP 1個に2つ詰め込め、2ビットまたはバイナリのネットワークはDSPをまったく必要とせずLUTだけで済みます。したがって量子化は最適化ではなく、最初の設計ステップです。チャネルごとのスケーリングを伴うINT8は、ほとんどの畳み込みネットワークで精度低下が1%未満です。8ビット未満では量子化を考慮した学習が必要で、FINNとhls4mlのフローはBrevitasとQKerasを通じてこれをサポートしています。見返りは比例的です。ビット幅を半分にすると、収容できる演算量はおよそ2倍になり、メモリ帯域幅は半分になります。そして通常、本当の限界はメモリ帯域幅です。
データフロー型対オーバーレイ型
アーキテクチャは2種類あり、それぞれ異なる問題に適しています。
データフロー型アクセラレータは、ネットワークをハードウェアにコンパイルします。各層がその層の演算量に合わせたサイズの独自ブロックになり、FIFOで接続され、全層が同時に動作します。hls4mlとFINNはこれを構築します。レイテンシはマイクロ秒以下、スループットは設計時に固定され、モデル全体の重みは通常チップ上に置かれます。代償は、1つのビットストリームが1つのモデルにしか対応せず、モデルが収まらなければならないことです。トリガーレベルの物理実験、リンク上の異常検知、キーワード検出、小さな分類器に適した形です。
オーバーレイ型アクセラレータは、固定のプロセッサ的エンジン(独自の命令ストリームをもつシストリックアレイやベクトルユニット)で、ツールがモデルごとにプログラムします。Vitis AI配下のAMDのDPU、Altera FPGA AI Suite、Microchip VectorBlox、Lattice sensAI CNNアクセラレータはすべてオーバーレイ型です。サポートされるモデルならビットストリームを再構築せずに動作し、重みはDDRからストリーミングされ、スケジューリングはコンパイラが処理します。代償は、スパース性や特殊な層の種類を活用できない固定アーキテクチャであり、汎用データパスを通してデータを動かすのにエネルギーを費やすことです。モデルが変わり解像度が高い、カメラ解析に適した形です。
FPGAが勝つ場合、勝たない場合
FPGAが優れた選択になるのは、モデルがデータフロー型に収まるほど小さくレイテンシが仕様そのものである場合、ネットワークがすでにFPGA内にあるデータパス(レーダー受信機、カメラISP、パケット分類器)の中に置かれる場合、データ型が特殊な場合(4ビット、三値、独自の活性化関数)、あるいは製品に10年から15年の供給期間が必要な場合です。間違った選択になるのは、モデルが数十億パラメータのトランスフォーマーである場合、チームにハードウェアエンジニアがいない場合、モデルが毎月変わる場合、あるいは10米ドルのNPU搭載マイクロコントローラで目標を満たせる場合です。電力比較はベンダーに都合のよい動作点で示されることが多いので、決める前に開発ボードで自分のモデルを測定してください。
どこから始めるか
あらゆるアクセラレータの土台にある演算はパイプライン化された積和演算なので、/learn/beginner/03-combinational-logic-and-luts/と/learn/beginner/04-registers-clocks-and-state/から始め、次に重みと活性化の格納のために/learn/beginner/09-memories-block-ram-and-fifos/に進んでください。/topics/dsp/ハブは固定小数点演算を扱っており、これも同じスキルです。最初のアクセラレータとしては、小さなKerasモデルでhls4mlのチュートリアルを実行して生成されたHLSを眺めるか、Kria KV260でVitis AIのサンプルを動かしてみてください。HLSとアクセラレータに関する中級トラックは準備中です。
ツールとベンダー
| フロー | 種類 | 提供元 | 対象 | 備考 |
|---|---|---|---|---|
| hls4ml | データフロー型、HLS | Fast Machine Learningコミュニティ(オープンソース) | AMD、Altera、Catapult | Keras、PyTorch、ONNXを入力。小さなMLPとCNNに最適 |
| FINN | データフロー型、RTL/HLS | AMDリサーチ(オープンソース) | AMD | Brevitasで量子化したモデル、1ビットまで対応 |
| Vitis AIとDPU | オーバーレイ型 | AMD | Zynq UltraScale+、Versal、Alveo | 最大のモデルズー、INT8 |
| FPGA AI Suite | オーバーレイ型 | Altera | Agilex、Arria 10、Cyclone 10 GX | OpenVINOフロントエンド |
| VectorBlox | オーバーレイ型 | Microchip | PolarFire、PolarFire SoC | オープンなSDK、低電力向け |
| sensAI | オーバーレイ型およびコンパイル型 | Lattice | iCE40 UltraPlus、CrossLink-NX、Certus-NX | ミリワット級の常時稼働タスク |
| EfinityとTinyML | コンパイル型、RISC-Vとアクセラレータ | Efinix | Trion、Titanium | TensorFlow Lite Microベース |
Achronixはデータセンター向けに機械学習プロセッサブロックを備えたSpeedster7t部品を販売しており、/topics/data-centre-and-acceleration/で扱っています。
よくある間違い
- 浮動小数点モデルから始めて、精度の問題はツールが解決してくれると期待する。まず量子化し、次に精度を測定し、それから構築してください。
- TOPSの数値を比較する。ベンダーのピークTOPSはすべてのMACが毎サイクル稼働する前提で、実際のモデルでは達成できません。自分の解像度での実測フレームレートを比較してください。
- 重みがチップ上に収まるか確認せずに、データフロー型設計をデバイスに載せる。
- 前処理と後処理を無視する。リサイズ、正規化、非極大値抑制は、ソフトプロセッサに任せたままだとネットワーク本体より時間がかかることがよくあります。
- アクセラレータを製品そのものと見なす。ソフトウェア統合、モデル更新、ツールのライセンスがライフタイムコストの大半を占めます。
さらに深く
- hls4mlドキュメント。チュートリアルのリポジトリを含みます。
- FINNドキュメントと原論文、Umuroglu et al., FINN: A Framework for Fast, Scalable Binarized Neural Network Inference, 2016。
- Duarte et al., Fast inference of deep neural networks in FPGAs for particle physics, 2018。hls4mlの元になった論文です。
- GitHubのVitis AI。モデルズーとDPUドキュメントがあります。
- GitHubのVectorBlox SDK。
- Lattice sensAI。低電力スタックのランディングページです。
姉妹サイト
学習ループから量子化、サービングまで、この分野のソフトウェア側は当サイトの姉妹サイトで扱っています: AI/ML Field Guideのハードウェアとアクセラレーション。