Pila de Sintesis y Simulacion de Inferencia NPU
Una pila NPU inference-first para IA en el edge. Compone el grafo de operadores (spec.yaml) con 138 operadores (17 grupos), lo valida y compila, y genera un artefacto .npuart. Ejecuta la inferencia en una referencia CPU del host (cpu_ref), un simulador funcional de NPU (npu_sim) y FPGAs Zynq-7000 (XC7Z020) y Zynq UltraScale+ (ZU3EG/ZU9EG), y realiza cuantizacion INT4/INT8, perfilado, compresion de cache y calibracion desde una sola CLI. Disena el chip y el modelo en YAML y prueba la latencia, la memoria y el consumo sin silicio.
Open SourceDemo real en terminal: un SoC cerebro de humanoide/robot ejecutando inferencia en el simulador de EulerNPU
El chip de referencia Project 3 — Embodied Multimodal AI SoC es un chip cerebro de robot que fusiona en paralelo vision + LiDAR + lenguaje + estado propioceptivo en una sola NPU y genera acciones motoras mediante una Diffusion Policy (16-step horizon · 14-DOF). Usa los 138 operadores en un unico pipeline y aplica pesos MoE en INT4. La demo muestra en orden el log de compilacion de los 5 subsistemas → la ejecucion paralela del pipeline → la tabla de resultados → la trayectoria de las 14 articulaciones → la lista de verificacion de preparacion para FPGA, y confirma el determinismo bit-exact ejecutando el pipeline dos veces.
| Target | FPGA Zynq UltraScale+ ZU9EG @ 300 MHz |
|---|---|
| Presupuesto | Latencia ≤ 150 ms · Consumo ≤ 3 W (INT4) |
| Subsistemas | Vision(ViT) · LiDAR BEV(PointPillar) · Lenguaje(GQA) · Estado(Mamba SSM) · Accion(MoE + Diffusion Policy) |
| Verificacion | Coincidencia numerica cpu_ref ↔ npu_sim (L∞ < 1e-4) · determinismo bit-exact |
※ Project 3 es un modelo de referencia reducido/sintetico para validar la cobertura de los 138 operadores y la preparacion para FPGA. Las cifras se expresan segun el presupuesto del ZU9EG (≤150 ms / ≤3 W).
138 operadores, 10 DType, desde spec.yaml hasta la inferencia en FPGA
Los operadores necesarios para la inferencia NPU estan organizados en 17 grupos. La spec 0.5.0 anadio los grupos de Efficient Attention, Vision Encoder, Diffusion y Speculative Decoding.
| Core Math | MatMul, Add, Mul, Div, Sqrt y otras operaciones matematicas basicas |
|---|---|
| Activation | ReLU, GELU, SiLU, Sigmoid, Softmax, etc. |
| Normalization | LayerNorm, RMSNorm, BatchNorm, GroupNorm |
| Conv/Vision | Conv2D, DepthwiseConv, Pool, Resize, Patch |
| Sequence/Attention | ScaledDotProduct, MultiHeadAttention, RoPE, ALiBi |
| Efficient Attention NEW | FlashAttention, SlidingWindowAttention, MultiQueryAttention(GQA) |
| MoE/Sparse | TopKRouter, ExpertDispatch, LoadBalanceLoss |
| Recurrent | LSTM, GRU, SRU |
| Graph | Concat, Split, Reshape, Transpose, Gather, Scatter |
| Multimodal | CrossAttention, VisionProjection, AudioMel |
| Vision Encoder NEW | PatchEmbed, ClsTokenPrepend, ImageNorm |
| Diffusion NEW | TimestepEmbed, NoiseSample, DDIMStep, CFGScale, FlowMatchStep |
| Speculative Decoding NEW | TokenAcceptance, DraftVerify, PrefixCacheLookup/Store |
| Quantization | Quantize, Dequantize, FakeQuantize, PackInt4/UnpackInt4 |
| Mamba/SSM | SelectiveScan, Discretize, SSMConv |
| Cache Compress | KVCacheCompress, SlidingWindow, H2O |
| Autonomy | PointCloud, BEVProject, TrajectoryPredict |
Se clasifican en 3 niveles segun los requisitos de precision y rendimiento.
| Tier 0 (obligatorio) | fp32, int32 — soportados en todos los operadores |
|---|---|
| Tier 1 (recomendado) | fp16, bf16, int8, uint8 — soportados en la mayoria de operadores |
| Tier 2 (extendido) | int16, int4, fp8_e4m3, fp8_e5m2 — operadores especificos |
| cpu_ref | Referencia NumPy del host (ejecucion inmediata sin dependencias) |
|---|---|
| npu_sim | Simulacion funcional + traza de ejecucion + estimacion de ciclos/MAC/latencia por operador |
| zynq_ps | Ejecucion en el ARM PS de Zynq |
| zynq_pl_stub | Analisis/emulacion del offload a la PL del FPGA |
| Zynq-7000 | XC7Z020, transporte AXI-Lite MMIO |
|---|---|
| Zynq UltraScale+ | ZU3EG, ZU9EG (target INT4 / alto rendimiento) |
Desde la especificacion YAML hasta el archivo .npuart desplegable
El archivo de especificacion YAML declarativo se valida, transforma a IR y optimiza antes de compilarse al formato .npuart (NPU Archive).
| Entrada | spec.yaml — definicion declarativa del grafo computacional |
|---|---|
| Validacion | Compatibilidad de operadores, tipos de datos, inferencia de formas |
| IR | Representacion intermedia — optimizacion de grafos, fusion de operadores |
| Salida | Binario .npuart — cargable directamente en el runtime |
Los archivos .npuart compilados se pueden ejecutar en el simulador o en hardware FPGA Zynq-7020.
| Simulador | Simulacion con precision de ciclo, soporte de analisis de rendimiento |
|---|---|
| FPGA | Runtime Zynq-7020 AXI-Lite MMIO |
| Perfilado | Latencia por capa, ancho de banda de memoria, reporte de utilizacion |
Unico punto de entrada eulernpu — 15 subcomandos cubren todo el flujo de trabajo (con soporte --lang ko|en|zh|ja|es)
| Comando | Descripcion |
|---|---|
eulernpu info | Muestra la plataforma, los operadores soportados y la informacion de dtype |
eulernpu validate | Valida el grafo de operadores de spec.yaml (JSON-Schema + 23 reglas semanticas) |
eulernpu migrate-spec NEW | Migracion automatica de specs 0.4 → 0.5 |
eulernpu compile | Compila spec.yaml a un artefacto .npuart |
eulernpu run | Ejecuta el artefacto .npuart en los backends cpu_ref/npu_sim/zynq |
eulernpu sim | Simulacion funcional + estimacion de ciclos/MAC/latencia |
eulernpu generate NEW | Generacion autorregresiva de tokens (KV cache) |
eulernpu quantize NEW | Cuantizacion de pesos INT8/INT4 (--weight-bits 4) |
eulernpu profile | Perfilado del tiempo de ejecucion y uso de memoria por operador |
eulernpu explain | Offload a PL + plan de memoria, visualizacion del schedule del grafo |
eulernpu board smoke | Verifica la conexion de la placa FPGA y el funcionamiento basico |
eulernpu calibrate | Recoleccion y aplicacion de datos de calibracion para cuantizacion |
eulernpu benchmark | Ejecuta benchmarks de latencia/throughput |
eulernpu replay | Reproduce una traza de ejecucion guardada |
eulernpu compress-cache | Aplica y valida la configuracion de compresion de KV cache |
Filosofia central de diseno de EulerNPU
Archivos de especificacion YAML definen el grafo computacional — sin necesidad de codigo de bajo nivel, el compilador maneja todas las optimizaciones.
La matriz de capacidades verifica tipos de datos y restricciones de hardware de cada operador antes de compilar, previniendo errores en tiempo de ejecucion.
Verifique la correctitud y el rendimiento con el simulador de precision de ciclo antes de desplegar en FPGA.
Aprenda EulerNPU rapidamente con guias paso a paso
Tutoriales proximamente.
Instale EulerNPU y compile su primer modelo
Python 3.10+, NumPy
Opcional: importacion ONNX, placas Zynq-7000 / UltraScale+ (target FPGA)
Desde especificacion YAML hasta despliegue FPGA, con una sola CLI.
Comenzar en GitHub Contactenos