본문 바로가기

라즈베리파이 5

Hailo NPU 학습 내용 정리 1

반응형

좋아요, 초보자도 이해할 수 있도록 Hailo NPU에 대해 쉽게 설명해드릴게요.

 

참고자료 1: 라즈베리파이 5 Hailo(8L) 설치 방법 https://kernel.bz/blogPost/rpi5-hailo

참고자료 2: 커널 연구회 SDK 자료 https://kernel.bz/blogPost/jh7110-hailo

- 자료중 깃허브 코드 참고

 

 

Hailo 학습에 도움이 되는 포스팅 목록입니다. 참고하세요.

 

라즈베리 파이 5 AI 키트, Hailo AI 가속 모듈

Hailo NPU 학습 내용 정리 1 

Hailo NPU 학습 내용 정리 2 

Raspberry Pi AI HAT+ Hailo 설치 1

Raspberry Pi AI HAT+ Hailo 8L 설치 2 

 

 


1. Hailo NPU란?

Hailo는 이스라엘에 본사를 둔 스타트업이고, NPU(Neural Processing Unit)는 인공지능 전용 칩입니다.
즉, Hailo NPU는 인공지능을 빠르게 실행하기 위한 특별한 칩이에요. 특히 영상 인식, 객체 탐지, 자율 주행, 스마트 카메라 같은 작업에서 뛰어난 성능을 발휘하죠.


2. 왜 만들어졌을까? (탄생 배경)

기존 컴퓨터(예: CPU, GPU)는 인공지능 처리에 비효율적입니다. 전기도 많이 먹고, 속도도 느리죠.

그래서 Hailo는 2017년,
AI 전용으로 효율적이고 빠르게 작동하는 NPU를 만들기로 했어요.
목표는:

  • 저전력,
  • 고성능,
  • 소형 디바이스에서도 AI 가능하게!

3. 어디에 쓰일까? (용도)

Hailo NPU는 주로 다음과 같은 임베디드 AI 디바이스에 쓰입니다:

  • 자율 주행 자동차 – 보행자 감지, 신호등 인식
  • 스마트 CCTV – 침입자 감지, 행동 분석
  • 산업용 로봇 – 품질 검사, 이상 감지
  • 드론, 스마트 홈 기기 등 작은 기기에서도 AI 처리 가능

4. 현재 기술 수준은?

Hailo는 대표 제품으로 Hailo-8이라는 NPU 칩을 출시했습니다:

  • 26TOPS 성능: 초당 26조 번 연산 가능 (고성능 GPU급!)
  • 적은 전력 소모: 약 2~3W만 사용
  • 초소형: SD 카드보다 약간 큰 크기
  • TensorFlow, ONNX 등 AI 프레임워크 지원

지금은 Intel, Qualcomm, NVIDIA 같은 대기업과 경쟁할 만큼 기술력을 인정받고 있고,
2023년부터는 Hailo-15라는 카메라 전용 AI 칩셋도 선보이며 영상처리에 특화된 방향으로 발전하고 있어요.


✅ 핵심 요약

항목 설명
제조사 Hailo (이스라엘 스타트업)
목적 AI 전용 고속·저전력 처리
사용처 자율주행, CCTV, 스마트기기 등
장점 빠름, 작음, 전기 적게 씀
대표 모델 Hailo-8, Hailo-15 등

Q1: Hailo NPU와 NVIDIA Jetson 같은 다른 AI 모듈은 어떤 차이가 있나요?

Q2: Hailo NPU를 활용한 DIY 프로젝트나 제품 사례가 있을까요?

Q3: Hailo NPU를 실제 임베디드 프로젝트에 적용하려면 어떤 개발 환경과 도구가 필요한가요?

좋은 질문입니다. Hailo NPU를 실제 임베디드 프로젝트에 적용하려면 아래와 같은 개발 환경, 도구, 절차가 필요합니다. 하나씩 천천히 설명드릴게요.


✅ 1. Hailo NPU 기반 하드웨어 확보

Hailo NPU는 단독 칩으로 쓰이기도 하지만, 대부분은 모듈 형태로 탑재됩니다.

  • Hailo-8 모듈이 내장된 보드:
    • Hailo가 직접 만든 Hailo-8 평가 키트 (HEK)
    • M.2 / Mini PCIe 타입의 Hailo-8 모듈
    • Raspberry Pi, TI AM62x, Intel x86, NXP i.MX8M 등과 연동 가능

👉 Hailo는 대부분 다른 SoC 위에 AI 코프로세서로 붙는 구조입니다.


✅ 2. Hailo SDK (HailoRT + Hailo Model Zoo)

Hailo는 자체적으로 개발 도구 세트를 제공합니다:

✔ HailoRT (Runtime SDK)

  • C++ / Python API 제공
  • 모델 로딩, 추론 실행, 데이터 I/O 제어 가능

✔ Hailo Model Zoo

  • 사전 학습된 AI 모델 제공 (YOLO, SSD, MobileNet 등)
  • 학습된 모델을 Hailo용으로 변환 가능

👉 이 툴을 통해 TensorFlow, ONNX 등에서 만든 모델을 Hailo에 최적화할 수 있습니다.


✅ 3. 모델 변환 & 컴파일 도구 (Hailo TappAS)

  • TappAS: Hailo의 모델 컴파일러
  • TensorFlow, Keras, PyTorch 모델 → Hailo 실행용 .hef 파일로 변환
  • 양자화 (Quantization) 포함 → INT8 기반 연산 최적화
  • 모델 분석, 성능 추정도 가능

✅ 4. 추론용 소프트웨어 구성

일반적으로는 다음 구성으로 운용됩니다:

구성 요소 예시
Host OS Linux (Ubuntu 등)
Host Board Raspberry Pi, Jetson, ARM SoC 등
Hailo SDK HailoRT, TappAS 설치
모델 파일 .hef 포맷 (Hailo Executable Format)
추론 프로그램 Python 또는 C++ 기반 애플리케이션

✅ 5. 개발 절차 요약

  1. 모델 선택 or 직접 학습 (TensorFlow, PyTorch 등)
  2. TappAS로 모델 변환 및 컴파일 (.hef 생성)
  3. Hailo-8 장착된 보드에 SDK 설치
  4. HailoRT를 사용해 추론 코드 작성
  5. 카메라, 센서, GPIO 등과 연동
  6. 테스트 후 임베디드 시스템 배포

✅ 예시 프로젝트

  • 스마트 CCTV: YOLOv5 + Hailo-8 → 실시간 사람 탐지
  • 무인 점포 시스템: 얼굴 인식 or 손 제스처 인식
  • 드론 추적 비전: 물체 식별 후 따라가기
  • 공장 자동화 검사기: 불량품 자동 감지

✅ 개발자 지원


Q1: Hailo NPU 기반 시스템을 라즈베리파이와 결합할 때 실제 성능은 어떤가요?

Q2: Hailo TappAS를 사용할 때 모델 양자화로 인한 정확도 손실은 어느 정도인가요?

Q3: Hailo 기반의 교육 키트를 설계하려면 어떤 요소를 포함시키는 것이 좋을까요?

좋습니다. 이번엔 HailoRT를 중심으로, Hailo NPU 아키텍처를 기술적으로 깊이 있고 명확하게 설명드리겠습니다. 전체 구조를 단계별로 해부하듯 살펴보겠습니다.


✅ 1. 전체 개요: Hailo NPU 시스템 구조

Hailo NPU는 단순한 연산 칩이 아니라, AI 추론을 위한 전용 마이크로 아키텍처를 갖춘 SoC입니다. 이 구조는 HailoRT를 통해 호스트 시스템과 통신하며, 고속 추론을 수행합니다.

아키텍처는 다음과 같이 나뉩니다:

[ Host CPU (Linux) ]
       ↕ (HailoRT API)
[ HailoRT Runtime ]
       ↕
[ PCIe / M.2 / SPI 인터페이스 ]
       ↕
[ Hailo-8 NPU 칩 ]
   ├─ Scheduler
   ├─ Control Processor (uC)
   ├─ Core Pipeline Units (Compute Units)
   ├─ Tensor Memory Units (SRAM)
   └─ DMA Engine / IO Manager

✅ 2. HailoRT란? (Hailo Runtime SDK)

HailoRT는 Hailo-8 NPU를 제어하고 통신하는 핵심 런타임 라이브러리입니다.

주요 역할:

  • 호스트에서 .hef 모델 로딩
  • 추론 입력/출력 처리
  • NPU 리소스 스케줄링
  • 병렬 추론 처리

구성:

구성 요소 설명
HailoRT API Python/C++ API. 사용자 애플리케이션에서 호출
Device Manager NPU 장치 스캔, 초기화
VStreams (Virtual Streams) 입력/출력 텐서의 추론 파이프라인
Buffer Manager Zero-copy DMA를 위한 입력/출력 버퍼 처리

✅ 3. Hailo-8 내부 아키텍처

🎯 핵심 목표: 병렬 처리 + 저전력 + 확장성

Hailo-8은 고정된 신경망 구조가 아니라, 모델 구조에 따라 동적으로 조정되는 유연한 하드웨어 블록을 갖고 있습니다.

주요 구성 요소:

Control Processor (µController)

  • Hailo 칩 내에서 모델 그래프 흐름 제어
  • HEF 파일 파싱 → 작업 스케줄링

Compute Units

  • 다양한 신경망 연산 (Conv, FC, Pooling 등) 전용 유닛
  • 각 유닛은 모델의 각 Layer에 매핑됨
  • 병렬 파이프라인 처리 (피쳐맵 → 필터 처리 → 다음 레이어)

Tensor Memory (SRAM)

  • 외부 DRAM 없이 내부 SRAM으로 피처맵 이동
  • Layer-to-layer 이동 간 지연 최소화
  • 효율적인 데이터 재사용 (on-chip caching)

DMA 엔진

  • Host ↔ NPU 간 Zero-copy 입출력 가능
  • PCIe/M.2 등 인터페이스 최적화

✅ 4. HEF 모델 파일 구조

.hef 파일은 TappAS에서 생성된 Hailo 실행 그래프입니다. 내부 구성은 다음과 같습니다:

  • NN Graph Partitioning 정보: 각 레이어가 어떤 유닛에 매핑되는지
  • Scheduling Plan: 병렬 실행 순서
  • Quantization 정보: INT8 양자화 파라미터 포함
  • IO Stream Mapping: 입출력 버퍼 연결 정보

HailoRT는 이 파일을 해석하여 내부 구조를 자동으로 구성하고 실행합니다.


✅ 5. VStreams: 데이터 흐름의 핵심

**VStream (Virtual Stream)**은 HailoRT에서 모델의 입출력 경로를 나타내는 추상화된 데이터 통로입니다.

  • 입력 VStream: 모델에 입력할 이미지, 벡터 등
  • 출력 VStream: 예측 결과 추출
  • HailoRT는 pipeline 방식으로 여러 추론 요청을 동시에 처리 가능

✅ 6. 시스템 연결 구성 예시 (Raspberry Pi + Hailo-8)

[ Python 애플리케이션 ]
       ↓ (HailoRT Python API)
[ HailoRT Engine ]
       ↓ (PCIe or M.2)
[ Hailo-8 NPU ]
       ↓
[ 실시간 영상 추론 (YOLOv5 등) ]
       ↓
[ 결과 출력 or 디바이스 제어 ]

✅ Hailo NPU 아키텍처의 차별점 요약

항목 설명
고성능/저전력 전용 계산 유닛 + SRAM 최적화
유연한 하드웨어 NN 구조에 따라 유닛 자동 배치
Zero-copy 입출력 성능 저하 없이 고속 데이터 전달
온칩 추론 처리 외부 메모리 의존도 최소화

Q1: Hailo 아키텍처에서 Compute Unit의 병렬 처리 방식은 어떤 스케줄링 전략을 사용하는가요?

Q2: 다른 NPU (예: EdgeTPU, Movidius)와 비교했을 때, Hailo의 데이터 흐름 최적화 방식은 어떤 장점이 있나요?

Q3: HailoRT를 기반으로 멀티 모델 동시 추론이 가능한 구조를 설계할 수 있을까요? 가능하다면 어떤 방식으로 이루어질 수 있을까요?

좋습니다. 이번에는 HailoRT와 라즈베리파이를 연동하여 AI 추론을 수행하는 전체 과정을 구체적이고 실용적으로 설명드리겠습니다. 실제 프로젝트에 바로 적용할 수 있는 수준으로 단계별로 구성해드릴게요.


✅ 1. 기본 구성 이해

Hailo NPU는 **외부 호스트 시스템(라즈베리파이)**와 연결되어 작동합니다. 라즈베리파이는 추론 요청을 보내고, 결과를 받아서 처리하는 역할을 합니다.

구성 요소:

역할 구성
Host 라즈베리파이 4 또는 5 (Linux 기반)
NPU Hailo-8 모듈 (M.2 혹은 USB form factor)
SDK HailoRT, TappAS, Python API
입출력 카메라 영상, 이미지 파일 등

✅ 2. 하드웨어 준비

필수 장비:

  • Raspberry Pi 4/5 (8GB 권장)
  • Hailo-8 USB 모듈 또는 M.2 모듈 + M.2 HAT
  • USB 3.0 포트 (데이터 병목 최소화)
  • 전원 어댑터 (Hailo 모듈 포함 시 충분한 전력 공급 필요)

Hailo USB 모듈은 전원과 데이터가 함께 공급되므로 별도 보드 수정이 필요 없습니다.


✅ 3. 소프트웨어 설치 (라즈베리파이에서)

① OS 설치

  • Raspberry Pi OS (64-bit), Ubuntu 22.04 LTS 권장
  • uname -m # aarch64 확인

② 필수 패키지 설치

sudo apt update
sudo apt install -y build-essential cmake python3-dev python3-pip libusb-1.0-0-dev

③ HailoRT SDK 설치

tar -xzf hailort-sdk-<version>.tar.gz
cd hailort-sdk
./install.sh

설치 후 /usr/lib/hailort, /usr/include/hailort 디렉토리 생성됨


✅ 4. 모델 준비 (HEF 파일 생성)

  1. PC 또는 클라우드에서 TensorFlow / PyTorch 모델 학습
  2. TappAS 도구로 .hef 포맷으로 컴파일
hailo model-compile yolov5.onnx --output yolov5.hef
  • .hef 파일을 라즈베리파이로 복사
scp yolov5.hef pi@raspberrypi.local:/home/pi/

✅ 5. Python 기반 추론 코드 작성

예제 코드 (YOLOv5)

import hailo
import numpy as np
import cv2

from hailo_platform import (HailoPlatform, VDevice, HEF, InputVStreamParams, OutputVStreamParams)

# Hailo NPU 초기화
hef = HEF("yolov5.hef")
device = VDevice()
network_group = device.create_hef(hef)

input_vstreams = network_group.create_input_vstream(InputVStreamParams())
output_vstreams = network_group.create_output_vstream(OutputVStreamParams())

# 이미지 로딩
image = cv2.imread("test.jpg")
resized_image = cv2.resize(image, (640, 640)).astype(np.uint8)
input_data = [resized_image]

# 추론 수행
input_vstreams[0].send(input_data)
results = output_vstreams[0].recv()

# 결과 처리
print("Detection Results:", results)

✅ 6. 카메라 연동 및 실시간 추론

  • 라즈베리파이 CSI 카메라 or USB 카메라 사용 가능
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break

    input_data = [cv2.resize(frame, (640, 640)).astype(np.uint8)]
    input_vstreams[0].send(input_data)
    results = output_vstreams[0].recv()

    # 결과 시각화
    for obj in results:
        x, y, w, h = obj['bbox']
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0,255,0), 2)

    cv2.imshow("Hailo Inference", frame)
    if cv2.waitKey(1) == 27:
        break

✅ 7. 성능 참고

항목 수치
추론 시간 약 5~10ms (YOLOv5s 기준)
전력 소모 전체 시스템 약 6~8W
지원 해상도 640×640 또는 320×320
멀티 추론 가능 (멀티 스레드 or 모델 분할 시)

✅ 활용 팁

  • 병렬 추론 최적화: VStreams에 비동기 스트림 설정 가능
  • CPU 사용률 낮추기: Zero-copy DMA 덕분에 효율적
  • C++로 구현하면 더 고속 처리 가능

✅ 정리

단계 설명
1. 하드웨어 연결 USB / M.2 형태로 Hailo-8 모듈 연결
2. SDK 설치 HailoRT, Python API 설치
3. 모델 준비 .hef 파일 생성 후 전송
4. 추론 코드 작성 HailoRT API로 추론 실행
5. 실시간 연동 OpenCV 등으로 카메라 스트림 처리

Q1: 실시간 멀티 카메라 입력을 처리할 때 HailoRT는 어떤 방식으로 스트림을 분리할 수 있을까요?

Q2: 라즈베리파이에서 HailoRT 기반 추론을 백그라운드 프로세스 또는 Docker로 구성하려면 어떤 전략이 좋을까요?

Q3: YOLO 외에 어떤 AI 모델이 HailoRT에서 가장 효율적으로 작동하나요? (예: FaceNet, DeepSORT 등)

 

 

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^