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데모는 세 가지 탐지 결과(자동차, 강아지, 자전거)를 신뢰도 백분율 및 바운딩 박스 좌표와 함께 출력합니다.
중요성
- 엣지 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에서 직접 가져온 것입니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트