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

AlveoとCorundumで100GbE NIC作成

NICのオープンソースプロジェクトCorundumを使用してAlveo U200とU50をNIC化し、Alveo間で通信ができたのでその備忘録です。 この記事のゴール 以下の画像のようにAlveo U200とAlveo U50をNIC化したもの使って通信する。 環境 基本的に前に投稿した記事Alveo U200とU50のセットアップのセットアップ環境を用いた。ただし、Vivadoは別マシンにインストールしているものを使ったためバージョンがズレている(2021.1でなく2022.1)。 Corundum: 記事執筆時点での最新コミット(c708bc4) AlveoホストマシンOS: Ubuntu 20.04 Vivado: 2022.1 FPGA: Alveo U200/U50 DACケーブル: 1m (3ft) Cisco QSFP-100G-CU1M互換 100G QSFP28パッシブダイレクトアタッチ銅製Twinaxケーブル(DAC) NIC化の手順 (U200で説明) Corundumでは、10G/25G/100GのEthernetに対応している。今回は、U200とU50を100GbEへNIC化した。以下はCorundumのドキュメントのGetting Startedを参考に進めていったときの手順である。また、以下の説明では、U200を対象とするが、同様の手順でU50もNIC化できる。 1. UltraScale+ Integrated 100G Ethernet Subsystemのライセンス取得 まず、XilinxのUltraScale+ Integrated 100G Ethernet Subsystemから100G Ethernet Subsystemのライセンスを取得する(無償)。また、ライセンスファイルが取得できたら、Vivadoのライセンスマネージャで読み込む。 読み込むと以下の画像のようにcmac_usplusという名前で追加された。 2. Corundumのダウンロード GitHubからCloneする $ git clone https://github....

February 21, 2023 · Eisuke Okazaki

高位合成ベースのIPコアを最大256個含むブロックデザインを自動で作る(ネタ)

2022年の5月くらいに作ってたTclスクリプトの紹介 実用的な回路を256個も含んで並列処理、というのはハードウェアリソースの面で現実的ではなさそうなのでネタっぽさはあるが、複数のIPコアを含むブロックデザインを作る際に、作成したTclスクリプトで作業効率が上がった。 「IPコア」という表記をする場合は高位合成ベースのIPコアを指す。 背景 VivadoのブロックデザインにはIPコア同士を接続できる機能Run Connection Automationがある。この機能を使って、Zynq SoC向けにVitis HLSで作成したIPコアを複数個使ってブロックデザインを作成したいが、AXI4-Liteインターフェイスを含むIPコアを64個より多く含んで自動接続することができない。その原因は、AXI Interconnectのマスタ側は最大64接続?であるが、その数を超えたIPコアがあっても新たにAXI Interconnectを追加してくれないためである。実際に128個の加算回路IPコアを追加しRun Connection Automationした際のエラーを画像に示す。65個目の加算回路IPコアの接続でエラーが出ている。 また、Zynq SoC向けにAXI4-StreamインターフェイスのIPコアをAXI DMA IPを用いてデータ入出力することがしばしば発生する。IPコアを複数個追加しAXI DMA IPと1対1に接続するとき、追加した数だけAXI DMA IPの設定(チャネルの設定)する必要があり、手間である(AXI Interconnectの件よりも、これを解決するのが本命だった)。 何をしたか UG835を参考に、Zynq SoC向けの高位合成ベースのIPコアを最大256個含むブロックデザインを自動で追加・接続のできるTclスクリプトを作成した。スクリプトは vivado-auto-bd-playgroud - GitHub にてMITライセンスで公開している。 どんなブロックデザインが生成できるか 同一のIPコアを複数個 作成したスクリプトを使うことで画像のようなブロックデザインを自動で作成することができる。以下の画像は入出力がAXI4-Liteの加算回路のIPコアを自動で256個追加・接続したときのブロックデザインである(画像では、もやは何がなんだかわからない)。 異種のIPコアを複数個 また、複数種類のIPコアを複数個、追加・接続することもできる。以下の画像は、入出力にAXI4-Streamを使うIPコアを4つ、入出力にAXI4-Liteを使うIPコアを8個追加した例である。AXI4-Streamの場合はDMA回路の設定を含めて自動で行われる。 スクリプトの使い方 後述の環境と制限をよく読み、Vitis HLSでC Synthesis、export RTL vivado_block_design.tclを必要なパラメータと一緒にvivadoのコマンドライン引数に渡す vivado -nolog -nojournal -mode batch \ -source ./vivado_block_design.tcl \ -tclargs -project_name vivado \ -device_part <デバイスパーツ> \ -ips_directory <IPコア(....

January 11, 2023 · Eisuke Okazaki

Alveo U200とU50のセットアップ

2022年最終日!今年はARMプロセッサと一体のFPGAボード(SoC FPGA)を中心に使っていたが、卒業論文や学会発表が終わり次第、Alveoカードを中心に使うことになりそうなので開発環境をセットアップした。そのときのメモを残しておく。基本的にUG1301やUG1370を参考にセットアップした。 セットアップ環境 Xilinx Alveoはデータセンター向けのFPGAで、PCI Express経由でホストマシン(x86)と通信することができる。今回はAlveoのU200とU50のセットアップをした。U200もU50も同じような手順でセットアップすることができる。セットアップアップするホストマシンの環境は以下の通りである。 ホストマシン #1 CPU: 12th Gen Intel(R) Core(TM) i5-12400 OS: 20.04.5 LTS (Focal Fossa) Vitis 2021.1 PCI Expressスロット ← Alveo U200を装着 ホストマシン #2 CPU: 12th Gen Intel(R) Core(TM) i5-12400 OS: 20.04.5 LTS (Focal Fossa) Vitis 2021.1 PCI Expressスロット ← Alveo U50を装着 Vitisのインストール Vitis 2021....

December 31, 2022 · Eisuke Okazaki