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) 用のデモバイナリ。 |
動作原理
- ハードウェア – NVDLA‑small IPがZynq FPGA向けに合成され、プログラマブルロジック (PL) 上にカスタムアクセラレータブロックが生成されます。
- ドライバ – Linuxカーネルドライバ (
kmd) がアクセラレータをデバイスノードとして公開し、ホストCPUが制御できるようにします。 - ソフトウェアスタック – Tengine‑Lite(オープンソース推論エンジン)が特別な OpenDLA バックエンドでコンパイルされます。モデルはまず
.tmfile(Tengineバイナリ形式)に変換され、次にNVDLAハードウェアが実行可能なOpenDLAバイナリに変換されます。 - ランタイム –
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ベース製品に統合したりできます。
はじめに
- リポジトリをクローンし、Xilinx VivadoとPetaLinuxがインストールされていることを確認します。
- NVDLA IP (
IP/) をビルドし、ZynqボードのVivadoブロックデザインに統合します。 - カーネルドライバ (
kmd/) をコンパイルし、実行中のPetaLinuxイメージにロードします。 - Tengine‑Liteをインストールし、OpenDLAバックエンドを有効にして、上記のようにサンプルバイナリをビルドします。
- 提供されている分類または検出の例を実行するか、独自のTengineモデルをOpenDLA形式に変換します。
制限事項
- small NVDLA構成のみが提供されており、より大きな構成(medium, large)は含まれていません。
- デモは8ビット量子化モデルを対象としており、フル精度や混合精度のサポートには追加の作業が必要です。
- パフォーマンスは使用する特定のZynqデバイスのリソースに依存します。ローエンドのZynq‑7000ボードでは、アクセラレータがリソース制約を受ける可能性があります。
上記の情報はすべて、リポジトリのREADMEから直接引用したものです。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト