Building an ML Processor using CFU Playground (Part 3)
Luffcaでは、CFU Playgroundを用いて、Arty A7-35T上にML(Machine Learning)プロセッサを作成しました。パート3では、MobileNetV2モデルの推論を5.5倍高速化しました。
なお、CFUはCustom Function Unitの略語であり、LiteX-VexRiscvにおいてRISC-Vのカスタム命令用ハードウェアを追加する仕組みです。
関連記事は、こちら。
- パート1: Person Detection int8モデル
- パート2: Keyword Spottingモデル
- パート3: MobileNetV2モデル(本記事)
CFU Playground
CFU Playgroundは、GoogleのTFLM(TensorFlow Lite for Microcontrollers, tflite-micro)のMLモデルを高速化するために、ハードウェア(実際には、FPGAのゲートウェア)とソフトウェアをチューニングするためのフレームワークです。
詳細は、パート1の記事をご覧ください。
MobileNetV2
MobileNetV2は、軽量モデルとして有名なMobileNetV1の後継モデルです。MobileNetV1のdepthwise separable convolutionを踏襲しながら、inverted residuals and linear bottlenecksという構造を取り入れたモデルです。
arxivの論文から引用した下図は、MobileNetV2のinverted residual blockを示しています。
MobileNetV2の詳細は、arxivの論文をご覧ください。
multimodel_accel project
multimodel_accelプロジェクトは、CFU Playgroundのほとんどのプロジェクトが一つのMLモデルに限定して高速化するモデル特化を行っているのに対し、複数のMLモデルを高速化することを目標とする社内プロジェクトです。
上のコンソール画像に示すように、CFU PlaygroundにおいてMobileNetV2はmnv2
モデルと呼ばれています。
先に結果を紹介すると、アイキャッチ画像と下の表に示すようにmnv2
モデルの全サイクル数が1079Mから197Mに減少し、5.5倍の高速化を達成しました。
なお、私達のプロジェクトは、mnv2
モデルの全サイクル数を397.5Mに高速化しているCFU Playgroundのmnv2_first
プロジェクトよりも更に2倍高速です。
MobileNetV2 | Cycles | Speedup factor |
|
---|---|---|---|
Before | After | ||
CONV_2D |
754M | 131M | 5.8 |
DEPTHWISE_CONV_2D |
301M | 43M | 7.0 |
Others | 24M | 23M | 1.0 |
Total | 1079M | 197M | 5.5 |
なお、複数のMLモデルの高速化を目標にしたmultimodel_accelプロジェクトなので、パート1のPerson Detection int8(以下pdti8
)モデルは、48Mから38.4Mに高速化し、パート2のKeyword Spotting(以下kws
)モデルは、15.7Mから9.8Mに高速化しています。
Software Specialization & CFU Optimization
multimodel_accelプロジェクトでは、mnv2
モデルの他にpdti8
モデルとkws
モデルに適用できるように特化・最適化した1×1 convolution(以下1x1_conv
)とdepthwise convolution(以下dw_conv
)を使用しています。
パート3では、パート1とパート2において1x1_conv
よりもspeedup factorが小さいdw_conv
の改良を行いました。具体的には、パート1でCFUに対応していたdw_conv
を、SIMD(single instruction, multiple data)にも対応させることによって高速化を実現しました。このため、ゲートウェアとソフトウェアの両方を変更しています。
また、他の層の高速化に伴い1x1_conv
ではない最初の2D convolutionの処理時間の比率が高くなってきたため、専用のカーネルを追加しています。
まとめ
Luffcaでは、CFU Playgroundを用いて、Arty A7-35T上にMLプロセッサを作成しました。作成したMLプロセッサは、MobileNetV2の推論を5.5倍高速化し、197Mサイクルで実行できます。