Running ResNet-50 on FPGA with Gemmini SoC

systolic-array

Luffcaでは、DNNアクセラレータのGemminiとRISC-V CPUのRocketを用いたDNNシステムをDigilent社のFPGAボード上に構築し、ResNet-50を実行することに成功しました。

Gemmini

Gemminiは、アジャイルRISC-V SoCデザインフレームワークのChipyardに含まれるRTLジェネレータの一つで、シストリックアレイ方式のDNNアクセラレータを生成することができます。

GemminiリポジトリのREADME.mdに下記の記載があるように、RISC-V CPUのRocketまたはBOOMとGemminiを組み合わせることによって、DNNハードウェアプラットフォームを構築できます。

The Gemmini project is developing a full-system, full-stack DNN hardware exploration and evaluation platform.

Gemmini SoC for Nexys Video

今回は、Digilent社のFPGAボードのNexys Video用に、GemminiとRocketを組み合わせたSoCを作成しました。

Gemminiリポジトリから引用した下図が、Gemmini SoCの概要を示しています。

gemmini-system

以前の記事で紹介したVerilatorを用いたサイクル・アキュレート・シミュレータでは、サイクル数の多いResNet-50等の実行が難しいのですが、FPGAボード上ではこれらを実行することができます。

Running Test Programs on FPGA

作成したSoCのゲートウェアをFPGAボードにロードし、テストプログラムのgemmini-rocc-testsに含まれるResNet-50とMobileNetを実行しました。

ResNet-50

以下は、resnet50-linuxを実行したときのコンソール出力を示しています。

# ./resnet50-linux
...
Prediction: 75 (score: 45)
Prediction: 900 (score: 43)
Prediction: 641 (score: 40)
Prediction: 897 (score: 57)

Total cycles: 1358733049 (100%)
Matmul cycles: 508263409 (37%)
Im2col cycles: 0 (0%)
Conv cycles: 818013564 (60%)
Pooling cycles: 0 (0%)
Depthwise convolution cycles: 0 (0%)
Res add cycles: 32258198 (2%)
Other cycles: 197878 (0%)
PASS

MobileNet

以下は、mobilenet-linuxを実行したときのコンソール出力を示しています。

# ./mobilenet-linux
...
Prediction: 75 (score: 127)
Prediction: 900 (score: 127)
Prediction: 125 (score: 103)
Prediction: 897 (score: 98)

Total cycles: 1045338662 (100%)
Matmul cycles: 89629901 (8%)
Im2col cycles: 0 (0%)
Conv cycles: 7498801 (0%)
Pooling cycles: 0 (0%)
Depthwise convolution cycles: 943204581 (90%)
Res add cycles: 1936088 (0%)
Other cycles: 3069291 (0%)
PASS

まとめ

Luffcaでは、GemminiとRocketを用いたDNNシステムをDigilent社のNexys Video上に構築し、テストプログラムのgemmini-rocc-testsに含まれるResNet-50とMobileNetを実行することに成功しました。