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
    

    데모는 세 가지 탐지 결과(자동차, 강아지, 자전거)를 신뢰도 백분율 및 바운딩 박스 좌표와 함께 출력합니다.

중요성

  • 엣지 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에서 직접 가져온 것입니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트