LeiWang1999/ZYNQ-NVDLA

NVDLA (An Opensource DL Accelerator Framework) implementation on FPGA.

ZYNQ‑NVDLA – Xilinx Zynq FPGA上のNVDLA

概要

  • Xilinx Zynq‑7000またはZynq MPSoC FPGAボード上で、NVIDIA‑DLA (Deep Learning Accelerator) ニューラルネットワーク推論を実行するためのハードウェアおよびソフトウェアアーティファクトのコレクションです。
  • 本プロジェクトには、small NVDLA構成のRTL、Vivado IPパッケージ、PetaLinux用カーネルモードドライバ、ビルド済みARM64ライブラリ、およびTengineモデルをOpenDLA形式に変換するTengine‑Liteバックエンドが含まれています。

主要コンポーネント

フォルダ 内容
IP/ NVDLA‑smallコア用Vivado IPパッケージ(Zynq設計にインスタンス化可能)。
RTL/ NVDLA‑small RTLのVerilogソースおよび統合用ラッパー。
kmd/ Zynq‑7000およびZynq MPSoCデバイスをサポートするPetaLinux用カーネルモードドライバ。
prebuilt/ ホストCPUがアクセラレータと通信するために使用するAArch64コンパイル済みランタイムライブラリ。
include/ Tengineバックエンドが必要とするヘッダーファイル。
umd/ TengineモデルをOpenDLAバイナリ形式に変換するコンパイラおよびランタイムのソース。
sdk_sanity/ アクセラレータがエンドツーエンドで動作することを検証する簡易テストプログラム。
reports/ 合成実行後のタイミング、消費電力、リソース使用率、実行時間のレポート。
examples/ (Tengine‑Lite経由でビルド) 分類 (ResNet‑18 on CIFAR‑10) および物体検出 (YOLOX‑nano) 用のデモバイナリ。

動作原理

  1. ハードウェア – NVDLA‑small IPがZynq FPGA向けに合成され、プログラマブルロジック (PL) 上にカスタムアクセラレータブロックが生成されます。
  2. ドライバ – Linuxカーネルドライバ (kmd) がアクセラレータをデバイスノードとして公開し、ホストCPUが制御できるようにします。
  3. ソフトウェアスタック – Tengine‑Lite(オープンソース推論エンジン)が特別な OpenDLA バックエンドでコンパイルされます。モデルはまず .tmfile(Tengineバイナリ形式)に変換され、次にNVDLAハードウェアが実行可能なOpenDLAバイナリに変換されます。
  4. ランタイム – prebuilt/ 内のビルド済みARM64ライブラリが、メモリ管理、コマンド送信、結果取得を処理します。

デモの使用方法

  • 分類 – 32×32 CIFAR‑10画像でResNet‑18を実行:

    cd <tengine-lite-root>/build
    cmake --build . --target tm_classification_opendla
    ./examples/tm_classification_opendla -m models/resnet18-cifar10-nosoftmax-relu_int8.tmfile -i images/cat.jpg -g 32,32 -s 1,1,1
    

    出力には上位5つのクラススコアが表示され、NVDLAブロックでの推論時間は約12 msと報告されます。

  • 物体検出 – 犬の画像でYOLOX‑nanoを実行:

    cmake --build . --target tm_yolox_opendla
    ./examples/tm_yolox_opendla -m models/yolox_nano_relu_int8.tmfile -i images/dog.jpg -r 1
    

    デモは3つの検出結果(車、犬、自転車)を信頼度パーセンテージとバウンディングボックス座標とともに出力します。

重要性

  • エッジAI – 推論をCPUから専用のFPGA実装DLAに移行することで、低遅延かつ低消費電力を維持でき、組み込みデバイスやエッジデバイスに最適です。
  • オープンソーススタック – すべてのハードウェア (RTL, IP)、ドライバ、ソフトウェアが公開されており、研究者や開発者はカスタムアクセラレータ構成を試したり、NVDLAを独自のZynqベース製品に統合したりできます。

はじめに

  1. リポジトリをクローンし、Xilinx VivadoとPetaLinuxがインストールされていることを確認します。
  2. NVDLA IP (IP/) をビルドし、ZynqボードのVivadoブロックデザインに統合します。
  3. カーネルドライバ (kmd/) をコンパイルし、実行中のPetaLinuxイメージにロードします。
  4. Tengine‑Liteをインストールし、OpenDLAバックエンドを有効にして、上記のようにサンプルバイナリをビルドします。
  5. 提供されている分類または検出の例を実行するか、独自のTengineモデルをOpenDLA形式に変換します。

制限事項

  • small NVDLA構成のみが提供されており、より大きな構成(medium, large)は含まれていません。
  • デモは8ビット量子化モデルを対象としており、フル精度や混合精度のサポートには追加の作業が必要です。
  • パフォーマンスは使用する特定のZynqデバイスのリソースに依存します。ローエンドのZynq‑7000ボードでは、アクセラレータがリソース制約を受ける可能性があります。

上記の情報はすべて、リポジトリのREADMEから直接引用したものです。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト