EulerNPU

FPGA에 NPU를 쉽게 올리는 툴 — 다음 단계는 ASIC

YAML로 NPU를 정의해 실제 FPGA에서 동작. 스펙 한 장으로 작은 NPU를 검증·합성하고 Zynq-7000에서 동작시키는 추론 우선(inference-first) NPU 풀스택입니다.

실 FPGA(Zynq-7000)에서 검증된 NPU 3종. 같은 컴파일러로 키워드 스포팅 · 산업 결함 진단 · 소형 LLM(FFN-on-NPU)이 QMTECH XC7Z020 보드에서 silicon으로 동작 — 시뮬레이션이 아닙니다.

spec → compile → bitstream → 실 FPGA, 단일 CLI. 138개 연산자(17 그룹), INT4/INT8 양자화, 4개 백엔드(cpu_ref · npu_sim · zynq_ps · zynq_pl_stub), 15개 CLI 서브커맨드로 전 사이클을 같은 흐름에서.

3종
FPGA 검증 NPU
138
연산자 (17 그룹)
4
백엔드
15
CLI 서브커맨드

FPGA 검증은 ASIC의 전 단계입니다. Zynq-7000에서 세 종류의 NPU가 이미 실리콘 위에서 동작합니다 — 키워드 스포팅, 산업 결함 진단, 소형 LLM 추론. 다음 단계는 동일한 EulerNPU 컴파일러 출력으로 ASIC 합성입니다.

Open Source · FPGA-Verified

실제 FPGA에서 돌아가는 NPU 3종

같은 컴파일러 · 같은 보드(QMTECH XC7Z020, Zynq-7000) — 서로 다른 NPU 3개를 합성·실측 검증

KWS (키워드 스포팅)

DS-CNN + 16-layer GRU + FC를 INT8로 양자화. 풀그래프 NPU IP(kws_npu_top) 합성, 90 MHz @ DSP 45% / BRAM 24%.

정확도11/11 (CPU↔NPU 100% 일치)
가속8.07× vs CPU (3.17 ms/추론)
스트리밍200프레임 5.166 s · 38.7 inf/s

xsdb 부팅 6단계 + UART로 11/11 정확도 · 8.07× 가속 · 키워드별 신뢰도 출력.

CWRU 베어링 결함 진단

진동 FFT → 3×Conv1D + MaxPool + GAP + 2×FC INT8. bearing_npu_top IP, 90 MHz @ DSP 86% / BRAM 12%.

정확도40/40 (CPU↔NPU 100% 일치)
가속11.13× vs CPU (≈4 ms/추론, 252 inf/s)
실시간 모니터200윈도우 · 리콜 100% · 오경보 0%

Demo 1 — 정확도 검증. 40개 테스트 샘플 분류 표 (클래스별 CPU/NPU 사이클·11.13× 가속).

Demo 2 — 실시간 모니터. 200윈도우 스트림 (결함 클래스·신뢰도, 리콜 100% · 오경보 0%).

nanoGPT LLM (FFN-on-NPU)

nanoGPT 10.77M(D=384·6 layer, TinyShakespeare). FFN(fc1 → gelu → fc2)만 NPU 오프로드, 나머지는 ARM — XC7Z020에서 LLM이 도는 하이브리드 L2 구성.

검증CPU↔NPU 텍스트 5/5 비트 단위 일치
리소스DSP 9% · BRAM 2% · LUT 17% (FFN 전용)
의의Zynq-7000 보드에서 LLM 추론 분할 가능성 실증

Demo 1 — 비트 단위 일치. 5개 프롬프트 × 16자 생성 — CPU↔NPU 텍스트 5/5 일치 검증.

Demo 2 — 라이브 스트림. 50자 ROMEO 프롬프트 생성 — FFN-on-NPU 하이브리드 라이브 추론.

※ 세 프로젝트는 모두 동일한 EulerNPU 컴파일러 출력 그대로 합성한 진짜 실리콘 결과입니다 (시뮬레이션 아님). 보드: QMTECH XC7Z020 CLG484-1 (Zynq-7000), PL 클록 90–100 MHz, ARM Cortex-A9 PS. 같은 흐름으로 다음 단계는 ASIC 합성입니다.

검증된 경로

FPGA에서 증명한 다음, 같은 흐름으로 ASIC으로 갑니다

완료 · 공개
FPGA 검증
KWS · 결함진단 · LLM
Zynq-7000 실측
장기 목표
Sovereign NPU
AI 추론 칩 주권화
엣지·온디바이스

왜 FPGA에서 시작하는가. ASIC 테이프아웃 전에 같은 컴파일러·같은 spec으로 실제 동작을 검증하는 것이 비용·리스크를 낮추는 가장 합리적인 경로입니다. EulerNPU는 이 전체 흐름을 하나의 CLI 툴체인으로 지원합니다.

핵심 기능

138개 연산자, 10종 DType, spec.yaml에서 FPGA 추론까지

138개 연산자 (17개 그룹, A–Q)

NPU 추론에 필요한 전 연산을 17개 그룹으로 체계화. 효율 어텐션(FlashAttention·GQA), 비전 인코더, MoE/Sparse, Diffusion, Speculative Decoding 등 최신 아키텍처 커버리지 포함.

▶ 17개 그룹 전체 목록 보기
Core MathMatMul, Add, Mul, Div, Sqrt 등 기본 수학 연산
ActivationReLU, GELU, SiLU, Sigmoid, Softmax 등
NormalizationLayerNorm, RMSNorm, BatchNorm, GroupNorm
Conv/VisionConv2D, DepthwiseConv, Pool, Resize, Patch
Sequence/AttentionScaledDotProduct, MultiHeadAttention, RoPE, ALiBi
Efficient Attention NEWFlashAttention, SlidingWindowAttention, MultiQueryAttention(GQA)
MoE/SparseTopKRouter, ExpertDispatch, LoadBalanceLoss
RecurrentLSTM, GRU, SRU
GraphConcat, Split, Reshape, Transpose, Gather, Scatter
MultimodalCrossAttention, VisionProjection, AudioMel
Vision Encoder NEWPatchEmbed, ClsTokenPrepend, ImageNorm
Diffusion NEWTimestepEmbed, NoiseSample, DDIMStep, CFGScale, FlowMatchStep
Speculative Decoding NEWTokenAcceptance, DraftVerify, PrefixCacheLookup/Store
QuantizationQuantize, Dequantize, FakeQuantize, PackInt4/UnpackInt4
Mamba/SSMSelectiveScan, Discretize, SSMConv
Cache CompressKVCacheCompress, SlidingWindow, H2O
AutonomyPointCloud, BEVProject, TrajectoryPredict

10종 DType 시스템

정밀도와 성능 요구에 따라 3단계 티어로 분류됩니다.

Tier 0 (필수) fp32, int32 — 모든 연산자에서 지원
Tier 1 (권장) fp16, bf16, int8, uint8 — 대부분 연산자 지원
Tier 2 (확장) int16, int4, fp8_e4m3, fp8_e5m2 — 특정 연산자

실행 백엔드 (4종)

cpu_ref 호스트 NumPy 레퍼런스 (의존성 없이 즉시 실행)
npu_sim 기능 시뮬레이션 + 실행 트레이스 + 연산자별 사이클/MAC/지연 추정
zynq_ps Zynq ARM PS 실행
zynq_pl_stub FPGA PL 오프로드 분석/에뮬레이션

FPGA 보드 프로파일

Zynq-7000 XC7Z020, AXI-Lite MMIO 트랜스포트
Zynq UltraScale+ ZU3EG, ZU9EG (INT4 / 고성능 타겟)

컴파일 파이프라인

spec.yaml에서 FPGA 추론까지 4단계 파이프라인

파이프라인 흐름

spec.yaml (연산자 그래프 정의) | v [1] Validator --- 연산자/dtype/shape 검증, 그래프 무결성 확인 | v [2] Compiler --- 연산자 퓨전, 메모리 레이아웃, 스케줄링 | v [3] .npuart --- 직렬화된 실행 아티팩트 (연산자 + 가중치 + 메타데이터) | v [4] Runtime --- CPU 레퍼런스 또는 Zynq-7020 FPGA 실행

FPGA 배포 파이프라인

1단계 spec.yaml 작성 및 eulernpu validate로 검증
2단계 eulernpu compile로 .npuart 아티팩트 생성
3단계 eulernpu sim으로 호스트에서 사이클 정확도 시뮬레이션
4단계 eulernpu board smoke로 FPGA 보드 연결 확인 후 eulernpu run으로 실행

추가 도구

calibrate양자화 캘리브레이션 데이터 수집
compress-cacheKV 캐시 압축 설정 적용
benchmark레이턴시/처리량 벤치마크

CLI 레퍼런스

단일 진입점 eulernpu — 15개 서브커맨드로 전체 워크플로우를 수행합니다 (--lang ko|en|zh|ja|es 지원)

명령어 설명
eulernpu info플랫폼, 지원 연산자, dtype 정보 표시
eulernpu validatespec.yaml 연산자 그래프 검증 (JSON-Schema + 23개 시맨틱 규칙)
eulernpu migrate-spec NEW0.4 → 0.5 스펙 자동 마이그레이션
eulernpu compilespec.yaml을 .npuart 아티팩트로 컴파일
eulernpu run.npuart 아티팩트를 cpu_ref/npu_sim/zynq 백엔드에서 실행
eulernpu sim기능 시뮬레이션 + 사이클/MAC/레이턴시 추정
eulernpu generate NEW오토리그레시브 토큰 생성 (KV 캐시)
eulernpu quantize NEWINT8/INT4 가중치 양자화 (--weight-bits 4)
eulernpu profile연산자별 실행 시간, 메모리 사용량 프로파일링
eulernpu explainPL 오프로드 + 메모리 플랜, 그래프 스케줄 시각화
eulernpu board smokeFPGA 보드 연결 및 기본 동작 확인
eulernpu calibrate양자화 캘리브레이션 데이터 수집 및 적용
eulernpu benchmark레이턴시/처리량 벤치마크 실행
eulernpu replay저장된 실행 트레이스를 재생
eulernpu compress-cacheKV 캐시 압축 설정 적용 및 검증

설계 원칙

EulerNPU의 8가지 핵심 설계 철학

Inference-first학습이 아닌 추론 실행에 최적화된 연산자 세트
Operator-first연산자가 1급 시민 — 모든 기능이 연산자 중심
Spec-drivenYAML 선언형 스펙으로 그래프를 정의, 코드가 아닌 데이터
Compile-once한 번 컴파일, 여러 타겟(CPU/FPGA)에서 실행
Artifact-centric.npuart 단일 파일로 재현 가능한 배포
Simulation-first실제 하드웨어 전에 호스트에서 완전 검증
DType-aware티어 기반 dtype 시스템으로 정밀도/성능 트레이드오프 명시
CLI-native모든 워크플로우가 CLI 서브커맨드로 자동화 가능

튜토리얼

단계별 가이드로 EulerNPU를 빠르게 익히세요

튜토리얼은 공개 예정입니다.

설치 및 시작하기

EulerNPU를 설치하고 첫 번째 연산자 그래프를 실행하세요

설치

pip install -e ".[dev]"

# 첫 번째 그래프 실행
eulernpu validate examples/tiny_mlp/graph.json
eulernpu compile examples/tiny_mlp/graph.json -o tiny.npuart
eulernpu run tiny.npuart

요구 사항

Python 3.10+, NumPy

선택: ONNX 임포트, Zynq-7000 / UltraScale+ 보드 (FPGA 타겟)

EulerNPU로 NPU 추론 파이프라인을 시작하세요

연산자 그래프에서 FPGA 추론까지, 단일 CLI로.

GitHub에서 시작하기 문의하기