Building an ML Processor using CFU Playground (Part 3)

cfu-playground-part3

Luffcaでは、CFU Playgroundを用いて、Arty A7-35T上にML(Machine Learning)プロセッサを作成しました。パート3では、MobileNetV2モデルの推論を5.5倍高速化しました。

なお、CFUはCustom Function Unitの略語であり、LiteX-VexRiscvにおいてRISC-Vのカスタム命令用ハードウェアを追加する仕組みです。

関連記事は、こちら。

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_inverted_residual

MobileNetV2の詳細は、arxivの論文をご覧ください。

multimodel_accel project

mobilenetv2-golden-tests

Result of golden tests for MobileNetV2 model

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