Running ResNet-50 on FPGA with Gemmini SoC
Luffcaでは、DNNアクセラレータのGemminiとRISC-V CPUのRocketを用いたDNNシステムをDigilent社のFPGAボード上に構築し、ResNet-50を実行することに成功しました。
関連記事は、こちら。
- Running Test Programs on Gemmini Simulators
- Running ResNet-50 on FPGA with Gemmini SoC(本記事)
- Running ONNX Model on FPGA with Gemmini SoC
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の概要を示しています。
以前の記事で紹介した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を実行することに成功しました。