Building an ML Accelerator using CFU Playground (Part 2)

cfu-playground-part2

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)として動作します。

kws

multimodel_accel project

kws-golden-tests

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_convdw_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サイクルで実行できます。