Building an ML Accelerator using CFU Playground (Part 2)

Luffcaでは、CFU Playgroundを用いて、Arty A7-35T上にTinyML(Tiny Machine Learning)アクセラレータを作成しました。
パート2では、CFU Playgroundにおいてkws
と呼ばれているKeyword Spottingモデルの推論を高速化しました。
なお、CFUはCustom Function Unitの略語であり、LiteX/VexRiscvにおいてRISC-Vのカスタム命令用ハードウェアを追加する仕組みです。
CFU Playground
CFU Playgroundは、GoogleのTFLM(TensorFlow Lite for Microcontrollers)のMLモデルを高速化するために、ハードウェア(実際には、FPGAのゲートウェア)とソフトウェアをチューニングするためのフレームワークです。
詳細は、こちらの記事をご覧ください。
Keyword Spotting Model
kws
モデルは、MLPerf Tiny Deep Learning BenchmarksからのTFLMのモデルの一つです。
下図に示すように、このモデルは、5層のCONV_2D
、4層のDEPTHWISE_CONV_2D
(以下dw_conv
)等から構成される全13層のモデルです。
このモデルの第3層以降のCONV_2D
は、1×1 convolution(以下1x1_conv
)として動作します。
multimodel_accel project

Result of golden tests for kws model
multimodel_accelプロジェクトは、CFU Playgroundのほとんどのプロジェクトが一つのMLモデルに限定して高速化するモデル特化を行っているのに対し、複数のMLモデルを高速化することを目標とする社内プロジェクトです。
上記の背景として、CFU Playgroundのkws_micro_accelプロジェクトでは、kws
モデルに特化されているため、以前の記事で紹介したPerson Detection int8(以下pdti8
)モデル等の他モデルに対しては、高速化の効果がありません。
先に結果を紹介すると、アイキャッチ画像と下の表に示すようにkws
モデルの全サイクル数が86.7Mから15.7Mに減少し、5.5倍の高速化を達成しました。
Keyword Spotting Model | Cycles | Speedup factor |
|
---|---|---|---|
Before | After | ||
CONV_2D |
67.8M | 8.7M | 7.8 |
DEPTHWISE_CONV_2D |
18.6M | 6.9M | 2.7 |
Total | 86.7M | 15.7M | 5.5 |
Arty A7-35T用ゲートウェアの動作周波数は100MHzのため、レイテンシは157msとなります。
MLPerf Tiny v0.5 inference benchmarksにおける動作周波数120MHzのArm Cortex-M4のレイテンシが181.92msなので、上記の結果は単純比較でも16%高速であり、動作周波数を正規化すると39%高速ということになります。
なお、pdti8
モデルの全サイクル数は50.3Mです。以前の記事で紹介したpdti8
モデルに特化した全サイクル数は48.0Mなので、少しサイクル数が増加しています。
Software Specialization & CFU Optimization
multimodel_accelプロジェクトでは、kws
モデルとpdti8
モデルの両方に適用できるように特化・最適化した1x1_conv
とdw_conv
を使用しています。
但し、他の層の高速化に伴いkws
モデルの第1層の処理時間の比率が高くなってきたため、kws
モデルの第1層に特化したkws_conv
を追加しています。
全31層のpdti8
モデルでは、第1層は特化も最適化も行っていないのですが、全13層のkws
モデルでは、第1層の影響が強く出る傾向にあります。
まとめ
Luffcaでは、CFU Playgroundを用いて、Arty A7-35T上にTinyMLアクセラレータを作成しました。
作成したTinyMLアクセラレータは、CFU Playgroundにおいてkws
モデルと呼ばれているKeyword Spottingモデルの推論を5.5倍高速化し、15.7Mサイクルで実行できます。