Zynq MPSoCの複数DPUコアで並列に画像認識処理する

この備忘録の概要 Zynq MPSoCの中でもハードウェア容量の大きなFPGAでは、DPU (Deep-Learning Processor Unit)の最大規模のアーキテクチャであるDPUCZDX8GのB4096を複数実装できる。今回は、DPUCZDX8G (B4096)を2コア用いて、画像認識処理を2並列で処理することを目指す。本備忘録では、事前学習済みのDenseBox(顔検出)とResNet-50(クラス分類)モデルを2並列で処理してみることにした。Vitis AI Libraryからの使い方はそれぞれ、UG1354 vitis-ai-FaceDetectとUG1354 vitis-ai-Classificationを参照すること。 動作確認済み環境 Zynq UltraScale+ MPSoC カスタムボードでの動作を確認した。詳細は以下の通りである。 Device Part: xczu19eg-ffvc1760-2-i OS: Petalinux 2022.2 CPU: Cortex-A53 Petalinux SDK: 2022.2 Vitis-AI: 3.0 DPU: DPUCZDX8G v4.1 (B4096) x 2コア カスタムボード向けへのDPU構築にはPG338 DPU-TRDのVitisフローを用いた。構築の解説は割愛するが、Vitisフローが完了すると、以下の画像のようにVivadoのブロックデザインや使用したハードウェア量を見ることができる。具体的な構築方法は、Zynq UltraScale+ MPSoC DPU TRD V4.1 Vitis 2022.2を追っていくと良い。また、Vitisフローで登場するDPUの構成を変更できる設定ファイルdpu_conf.vhは、デフォルトのまま変更せずに構築した。 一番使用率の高いDSPでも27%の空きがあるので、B1024のようなハードウェア使用率を抑えたアーキテクチャであれば、実装可能かもしれない。 と思ったのだが、PG338 featuresには、 Software and IP core support for up to a maximum of four homogeneous DPU instances in a single AMD Xilinx® SoC....

September 8, 2023 · Eisuke Okazaki