ZantFoundation/Z-Ant
Zant simplifies the deployment and optimization of neural networks on microprocessors
Beer model timing (QEMU, Cortex-M55):
zig-tests
โ regression suite covering the core runtime.zig-codegen-tests
โ validates generated operators and glue code.zant-benchmarks
โ runs the Beer end-to-end benchmark and refreshes the metrics below.Prerequisites
./scripts/install_zig.sh
to fetch a local copy; set ZIG_DOWNLOAD_URL=file:///absolute/path/to/zig-linux-x86_64-0.14.0.tar.xz
when working from a pre-downloaded archive)qemu-system-arm
7.2+ (install via ./scripts/install_qemu.sh
or your platform package manager when running the STM32 N6 QEMU harness)# Clone and verify installation
git clone https://github.com/ZantFoundation/Z-Ant.git
cd Z-Ant
# Install Zig 0.14 locally (optional if you already have it)
./scripts/install_zig.sh
# (use ZIG_DOWNLOAD_URL or ZIG_DOWNLOAD_BASE to point at a mirror if needed)
export PATH="$(pwd)/.zig-toolchain/current:$PATH"
# - put your onnx model inside /datasets/models in a folder with the same of the model to to have: /datasets/models/my_model/my_model.onnx
# - simplify and prepare the model for zant inference engine
./zant input_setter --model my_model --shape your,model,sha,pe
# - Generate test data
./zant user_tests_gen --model my_model
# --- GENERATING THE Single Node lib and test it ---
#For a N nodes model it creates N onnx models, one for each node with respective tests.
./zant onnx_extract --model my_model
#generate libs for extracted nodes
zig build extractor-gen -Dmodel="my_model"
#test extracted nodes
zig build extractor-test -Dmodel="my_model"
# --- GENERATING THE LIBRARY and TESTS ---
# Generate code for a specific model
zig build lib-gen -Dmodel="my_model" -Denable_user_tests [ -Ddo_export -Dlog -Dcomm ... ]
# Test the generated code
zig build lib-test -Dmodel="my_model" -Denable_user_tests [ -Ddo_export -Dlog -Dcomm ... ]
# Build the static library
zig build lib -Dmodel="my_model" [-Doptimize=Release? -Dtarget=... -Dcpu=...]
IMPORTANT: see ZANT CLI for a better understanding and more details!
Command | What it does |
---|---|
zig build test |
Verify everything works |
zig build codegen -Dmodel=<name> |
Generate code from ONNX model |
zig build lib -Dmodel=<name> |
Build deployable static library |
zig build test-generated-lib -Dmodel=<name> |
Test your generated code |
Platform | Target Flag | CPU Examples |
---|---|---|
ARM Cortex-M | -Dtarget=thumb-freestanding |
-Dcpu=cortex_m33 , -Dcpu=cortex_m4 , -Dcpu=cortex_m55 |
RISC-V | -Dtarget=riscv32-freestanding |
-Dcpu=generic_rv32 |
x86/Native | -Dtarget=native |
(auto-detected) |
Option | Description | Example |
---|---|---|
-Dmodel=<name> |
Your model name | -Dmodel=my_classifier |
-Dmodel_path=<path> |
Custom ONNX file | -Dmodel_path=models/custom.onnx |
-Dlog=true |
Enable detailed logging | -Dlog=true |
-Dcomm=true |
Add comments to generated code | -Dcomm=true |
-Dstm32n6_accel=true |
Enable STM32 N6 accelerator dispatch layer | -Dstm32n6_accel=true |
-Dstm32n6_cmsis_path=/abs/path |
Optional CMSIS include root used when the accelerator flag is set | -Dstm32n6_cmsis_path="/opt/CMSIS_6/Source" |
-Dstm32n6_use_cmsis=true |
Use CMSIS Helium helpers (requires CMSIS-DSP headers or third_party/CMSIS-NN ) |
zig build test -Dstm32n6_accel=true -Dstm32n6_use_cmsis=true |
-Dstm32n6_use_ethos=true |
Enable Ethos-U execution path (requires Ethos-U driver headers) | zig build test -Dstm32n6_accel=true -Dstm32n6_use_ethos=true |
-Dstm32n6_force_native=true |
Force the STM32 N6 accelerator shim to run on the host (useful for smoke tests) | zig build test -Dstm32n6_accel=true -Dstm32n6_force_native=true |
# Fetch CMSIS-NN into third_party/CMSIS-NN
./scripts/fetch_cmsis_nn.sh
# (set CMSIS_NN_REPO or CMSIS_NN_REF to use a mirror/specific release)
# (set CMSIS_NN_ARCHIVE=/absolute/path/to/CMSIS-NN-main.zip to install from a local archive without network access)
# Fetch the Arm Ethos-U core driver
./scripts/fetch_ethos_u_driver.sh
# (set ETHOS_U_REPO / ETHOS_U_REF to use a fork or pinned revision)
# (set ETHOS_U_ARCHIVE=/absolute/path/to/ethos-u-driver.zip for offline installs)
# Install qemu-system-arm for the STM32 N6 QEMU regression harness
./scripts/install_qemu.sh
# (requires administrator privileges; set QEMU_SKIP_APT_UPDATE=1 to skip `apt-get update` on Debian/Ubuntu)
# Host smoke test for the C shim (builds reference/CMSIS/Ethos shared objects)
./scripts/test_stm32n6_conv.py
# Bare-metal regression harness executed inside QEMU
# Automatically discovers CMSIS-DSP / CMSIS-NN in third_party; pass --cmsis-include/--cmsis-nn-include to override.
./scripts/test_stm32n6_qemu.py --arm-prefix arm-none-eabi --repeat 3
# Sample output (PASS markers are emitted by the firmware, the harness exits immediately after the first PASS):
# [run] reference
# stm32n6 reference PASS
# โ
reference completed in 40.57 ms
The script terminates QEMU as soon as the PASS banner appears, so the reported time reflects the actual firmware runtime instead of the former 3โฏs watchdog timeout. A non-zero exit status accompanied by fatal: unexpected exception
indicates a crash inside the firmware before the PASS message is printed.
target_link_libraries(your_project PUBLIC path/to/libzant.a)
#include "lib_my_model.h"
// Optional: Set custom logging
extern void setLogFunction(void (*log_function)(uint8_t *string));
// Your inference code here
# Generate optimized library for image classifier
zig build codegen -Dmodel=mobilenet_v2 -Dmodel_path=models/mobilenet.onnx
zig build lib -Dmodel=mobilenet_v2 -Dtarget=thumb-freestanding -Dcpu=cortex_m33 -Doutput_path=deployment/
# Test on different architectures
zig build test-generated-lib -Dmodel=my_model -Dtarget=native
zig build test-generated-lib -Dmodel=my_model -Dtarget=thumb-freestanding -Dcpu=cortex_m4
# Run full test suite
zig build test --summary all
# Test heavy computational operations
zig build test -Dheavy=true
# Test specific operator implementations
zig build op-codegen-test -Dop=Conv
# Generate and test single operations
zig build op-codegen-gen -Dop=Add
Z-Ant/
โโโ src/ # Core source code
โ โโโ Core/ # Neural network core functionality
โ โโโ CodeGen/ # Code generation engine
โ โโโ ImageToTensor/ # Image preprocessing pipeline
โ โโโ onnx/ # ONNX model parsing
โ โโโ Utils/ # Utilities and helpers
โโโ tests/ # Comprehensive test suite
โโโ datasets/ # Sample models and test data
โโโ generated/ # Generated code output
โโโ examples/ # Arduino and microcontroller examples
โโโ docs/ # Documentation and guides
We welcome contributions from developers of all skill levels! Here's how to get involved:
All contributors are recognized in our Contributors list. Thank you for helping shape the future of tinyML!
This project is licensed under the LICENSE file in the repository.
Join us in revolutionizing AI on edge devices! ๐
GitHub โข Documentation โข Examples โข Community