Qualification report

20261002T203931Z-ethos-u55-128-32c372d2
2026-10-02T20:39:31+00:00
Artifact artifact_int8.tfliteTarget ethos-u55-128 (MCU-class NPU)Mode qualificationEval inputs 500TARGET ran 500 of 500 inputs
FAILEDexit code 1
  • 1 of 9 operators is not on the accelerator: L2_NORMALIZATION (Unsupported opType). The accelerator graph is split into 2 partitions.
  • TARGET ran 500 of 500 eval inputs on Arm Corstone-300 FVP (functional model), not silicon.
  • 2 of 500 decisions (0.4%) differ between GOLDEN and TARGET.
  • Limits exceeded: placement.fallback_ops.

5 declared limits: 3 pass, 1 fail, 1 without an admissible measurement.

Declared limitsVerdict evidence

ParameterLimitMeasuredUnitEvidenceResult
accuracy.answer_flip_rateFraction of eval inputs whose decision differs between GOLDEN and TARGET.≤ 0.0200 (2.0%)0.0040 (0.4%)FUNCTIONAL MODELfractionArm Corstone-300 FVP (functional model): GOLDEN (onnxruntime 1.30.0, CPUExecutionProvider, 1 thread, sequential, graph optimizations disabled) vs TARGET (Fast Models [11.27.42 (Dec 9 2024)] in container localhost/gauntlet-fvp:11.27_42 (sha256:c25ef359d5b40aec723d055c625c386ae2f1ff5ed3425b773438cc43bf804882); ML Embedded Evaluation Kit 26.06 inference runner, dynamic-load build (TFLM); compiler: ethos-u-vela 5.2.0)PASS
accuracy.top1_deltaGOLDEN top-1 accuracy minus TARGET top-1 accuracy. Positive means TARGET is lower. Requires labels.≤ 0.0100 (1.0%)−0.0040 (−0.4%)FUNCTIONAL MODELfractionArm Corstone-300 FVP (functional model): GOLDEN (onnxruntime 1.30.0, CPUExecutionProvider, 1 thread, sequential, graph optimizations disabled) vs TARGET (Fast Models [11.27.42 (Dec 9 2024)] in container localhost/gauntlet-fvp:11.27_42 (sha256:c25ef359d5b40aec723d055c625c386ae2f1ff5ed3425b773438cc43bf804882); ML Embedded Evaluation Kit 26.06 inference runner, dynamic-load build (TFLM); compiler: ethos-u-vela 5.2.0)PASS
latency.p99_ms99th percentile steady-state inference time on TARGET.≤ 15.00—mstarget ethos-u55-128 does not declare latency telemetry: the Arm Corstone-300 FVP is a simulator and produces no wall-clock inference latency; NPU cycle counts are reported separately as npu.* metrics and are not latencyNOT MEASURED
memory.flash_mbSize of the compiled artifact as stored for deployment. MiB = 2^20 bytes.≤ 0.50000.01459MiBhost filesystem: size of artifact_int8_vela.tflitePASS
placement.fallback_opsSource-graph operators the target toolchain placed on the CPU instead of the accelerator.≤ 01opscompiler: ethos-u-vela 5.2.0; classified from the compiled artifactFAIL

Rule: FAILED if any declared limit is measured and exceeded; otherwise INCOMPLETE if any declared limit lacks an admissible measurement; otherwise QUALIFIED. No budgets: NO_VERDICT. Limits are inclusive. Budgets file examples/demo/budgets.yaml, canonical SHA-256 b5e97b4d08db33796d0ee0534a931ad3b6eb7a269cefdfeac8901757d19bf793.

Provenance

Redacted for publication: directory paths are shortened to the repository and the host name is removed. Every SHA-256, version, measurement and verdict is unmodified.

Run id
20261002T203931Z-ethos-u55-128-32c372d2
Created (UTC)
2026-10-02T20:39:31+00:00
Harness
gauntlet-harness 0.1.0, git 4cac1b03489f93edd8af0bf3372799332f749e0d-dirty
Source tree
8101e52c132c2c67869694ea815cfccfec1720d141d03ce95f495553c396f28e
Host
<redacted>, Darwin 25.6.0 arm64
Host CPU
Apple M2, 8 logical
Target
ethos-u55-128: Arm Corstone-300 FVP 11.27_42 (Cortex-M55 + ethos-u55-128, Shared_Sram): simulator
Target firmware
ML Embedded Evaluation Kit 26.06 inference runner, dynamic-load build (TFLM), sha256 4e9cb5975997e418698392f577b55445524fcb4bfbe78ba24409186c565fc0ec
Hardware
adapter has never run against physical hardware; TARGET executes on the Arm Corstone-300 FVP 11.27_42, a simulator
Inputs unchanged
yes: SHA-256 identical before and after the run

Files

RoleFileSHA-256Bytes
Reference (FP32)examples/demo/reference.onnx491aaffa3e9b7e1814c1b0effbf86c8b4198d2cc47b8e3cc89d5a70840fc01e626,814
Artifact (INT8)examples/demo/artifact_int8.tflite32c372d24760628795dae729f5298c98ef93aa3f751565fa1c0b58efda3212b012,696
Compiled artifactruns/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_vela.tflite
compiled
d953306bd1825e8dbfafc03a8644132303f43473e5f9b5ec85fc9035c5ce334c15,296
Eval setexamples/demo/evalset.npz
500 inputs, labels present
6a9e56fb06bf4d88567fc9cc8a954849b0dffd194a7b2266300d2e7dc7a00d1c6,148,510
Budgetsexamples/demo/budgets.yamlfbb08dec95b282b883020cacf83346da2a69510112f6357182de7b0a0b8500d6576
Comparison pointsexamples/demo/points.yaml170c27ac112341a1c5d967bfdfe8b7cd71f22b4f86ae71dc98ecc6879d894e941,682

Measurement conditions

Captured (UTC)
2026-10-02T20:39:31+00:00
Clock pinned
N/A: simulator, no physical clock
Clock
simulated: no physical clock. NPU counts are simulated cycles; the application reports a 32 MHz MPS3 core clock
DVFS
N/A: simulator
Power
N/A: simulator
Thermal at start
N/A: simulator
Source
Arm Corstone-300 FVP 11.27_42, cycle-approximate; container localhost/gauntlet-fvp:11.27_42, 6 FVP instances in parallel

Execution settings

GOLDEN
onnxruntime 1.30.0, CPUExecutionProvider, 1 thread, sequential, graph optimizations disabled
SCHEME
ai-edge-litert 2.2.0, op resolver BUILTIN_REF, 1 thread
TARGET
Fast Models [11.27.42 (Dec 9 2024)] in container localhost/gauntlet-fvp:11.27_42 (sha256:c25ef359d5b40aec723d055c625c386ae2f1ff5ed3425b773438cc43bf804882); ML Embedded Evaluation Kit 26.06 inference runner, dynamic-load build (TFLM); compiler: ethos-u-vela 5.2.0; ran 500 of 500 inputs
Input binding
float input bound to integer input tensor as clamp(round_half_away_from_zero(x / scale) + zero_point, dtype range), using the artifact's declared input quantization parameters
Seed
0
Bootstrap
2000 resamples, 95% CI, percentile bootstrap, paired resampling of eval inputs
Latency trials
50 timed, 5 warm-up discarded
Tapped inputs
first 512 inputs for intermediate tensors; all inputs for model outputs

Toolchain: ai-edge-litert 2.2.0, ethos-u-vela 5.2.0, numpy 2.5.3, onnxruntime 1.30.0, pydantic 2.13.5, python 3.12.7, pyyaml 6.0.3.

Compiler invocation and evidence files (compile and execution)
Toolchain
compiler: ethos-u-vela 5.2.0
Command
.venv/bin/vela examples/demo/artifact_int8.tflite --accelerator-config ethos-u55-128 --config Arm/vela.ini --system-config Ethos_U55_High_End_Embedded --memory-mode Shared_Sram --output-dir runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile --show-cpu-operations --verbose-performance
accelerator_config
ethos-u55-128
config_file
Arm/vela.ini
memory_mode
Shared_Sram
system_config
Ethos_U55_High_End_Embedded
vela.accelerator_configuration
Ethos_U55_128
vela.batch_size
1
vela.core_clock
500000000.0
vela.memory_mode
Shared_Sram
vela.system_config
Ethos_U55_High_End_Embedded
Evidence fileSHA-256
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/vela_stdout.txtd5cdf30af01760bc943ec48ecbc3ae0ed718a3ef1eb81a361ad8b94bfb4608cc
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/vela_stderr.txte3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_per-layer.csv7a7673dd6b30f47d9a13d524e831d8e2a8e6bf50cdeff78b3921dab8711a9270
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_summary_Ethos_U55_High_End_Embedded.csvea6920b0f9aa13806d0e67d2be1b78bc17521811181a0dad9073ca999b122782
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/fvp_manifest.json0ca38c794033cd44539b72ac4dad67154864c151eac8ce32f66f52b0a32e0925
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/job.sh853281f73162fb0637be62fe1db2c5a7617050f7c7ec31a889bde4e582b55614
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/out/env.txtbe4dddabc2c510c9316a38e338dfbe2736276b7d969dafd63a84bde6cb397542

Placement map

8accelerated1fallback to CPU0unsupported2accelerator partitions
#0CONV_2DNPU
#1MAX_POOL_2DNPU
#2CONV_2DNPU
#3MAX_POOL_2DNPU
#4CONV_2DNPU
#5MEANNPU
#6L2_NORMALIZATIONCPU
#7FULLY_CONNECTEDNPU
#8SOFTMAXNPU
Source-graph operators in execution order. Operators marked CPU run outside the accelerator; each one ends a partition. Classified by compiler: ethos-u-vela 5.2.0 from the compiled artifact.
#OperatorPlacementOutput tensorToolchain reason
6L2_NORMALIZATIONFALLBACK CPUfunctional_1_1/l2norm_1/l2_normalizeUnsupported opType
All 9 operators with evidence
#OperatorPlacementOutput tensorEvidence
0CONV_2DACCELERATEDfunctional_1_1/conv1_1/Relu;functional_1_1/conv1_1/BiasAdd;functional_1_1/conv1_1/convolution;functional_1_1/conv1_1/Squeeze1per-layer CSV: 2 NPU operation(s) (Conv2D, Relu)
1MAX_POOL_2DACCELERATEDfunctional_1_1/pool1_1/MaxPool2dper-layer CSV: 1 NPU operation(s) (MaxPool)
2CONV_2DACCELERATEDfunctional_1_1/conv2_1/Relu;functional_1_1/conv2_1/BiasAdd;functional_1_1/conv2_1/convolution;functional_1_1/conv2_1/Squeeze1per-layer CSV: 2 NPU operation(s) (Conv2D, Relu)
3MAX_POOL_2DACCELERATEDfunctional_1_1/pool2_1/MaxPool2dper-layer CSV: 1 NPU operation(s) (MaxPool)
4CONV_2DACCELERATEDfunctional_1_1/conv3_1/Relu;functional_1_1/conv3_1/BiasAdd;functional_1_1/conv3_1/convolution;functional_1_1/conv3_1/Squeeze1per-layer CSV: 2 NPU operation(s) (Conv2D, Relu)
5MEANACCELERATEDfunctional_1_1/gap_1/Meanper-layer CSV: 1 NPU operation(s) (Mul)
6L2_NORMALIZATIONFALLBACK CPUfunctional_1_1/l2norm_1/l2_normalize;functional_1_1/l2norm_1/l2_normalize/Square;functional_1_1/l2norm_1/l2_normalize/Sum/reduction_indices;functional_1_1/l2norm_1/l2_normalize/Sum;functional_1_1/l2norm_1/l2_normalize/Maximum/y;functional_1_1/l2norm_1/l2_normalize/Maximum;functional_1_1/l2norm_1/l2_normalize/Rsqrtcompiled artifact: L2_NORMALIZATION remains a CPU operator; per-layer CSV target CPU
7FULLY_CONNECTEDACCELERATEDfunctional_1_1/fc_1/MatMul;functional_1_1/fc_1/BiasAddper-layer CSV: 1 NPU operation(s) (FullyConnected)
8SOFTMAXACCELERATEDStatefulPartitionedCall_1:0per-layer CSV: 1 NPU operation(s) (Asr)
  • Toolchain counts (vela cpu operators = 1, vela npu operators = 40) are taken after its internal operator decomposition and differ from the 9 source-graph operators classified here.
  • UNSUPPORTED is not assigned by this adapter: Vela places every operator it cannot accelerate on the CPU, and whether the CPU runtime registers a kernel for it is set by the application's TFLite Micro op resolver, which is not observable at compile time.

Drift attributionWhere the output changes, per transformation

The larger gap at the model output is quantization damage (GOLDEN→SCHEME), 21.3× the other: GOLDEN→SCHEME RMSE 0.003327, SCHEME→TARGET RMSE 0.0001563.

Largest SNR decrease between consecutive comparison points in GOLDEN→SCHEME: pool2 → conv3 (−6.73 dB).

020.040.060.080.0SNR (dB)conv1pool1conv2pool2conv3gapl2normlogitsprobsGOLDEN→SCHEME (quantization)SCHEME→TARGET (vendor deviation)
SNR at each comparison point, in data-flow order. Higher means less drift. Filled circles: GOLDEN→SCHEME. Open squares: SCHEME→TARGET. Points without a mark were not measured or not comparable (see table).
Values compare real-valued tensors (quantized tensors dequantized with their own scale and zero point). Max LSB is the largest integer-code difference where both columns share quantization parameters.
PointOperatorGOLDEN→SCHEME: quantization damageSCHEME→TARGET: vendor deviation
CosineSNR dBMax |err|RMSECosineSNR dBMax |err|RMSEMax LSB
conv1CONV_2D0.99997142.330.2740.00744NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
pool1MAX_POOL_2D0.99996641.670.2680.0103NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
conv2CONV_2D0.99991237.260.1930.00907NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
pool2MAX_POOL_2D0.99993438.540.1930.0114NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
conv3CONV_2D0.99967431.810.1400.00518NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
gapMEAN0.99981234.140.01200.00116NOT COMPARABLE not observable on the FVP: the inference runner copies out model outputs only, not intermediate tensors
l2normL2_NORMALIZATION0.99980534.090.02950.00349NOT COMPARABLE not observable on the FVP: the inference runner copies out model outputs only, not intermediate tensors
logitsFULLY_CONNECTED0.99995340.280.1420.0244NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point
probs (output)SOFTMAX0.99990036.970.02880.003331.00000063.540.007810.0001562
  • 9 comparison points were declared in the points file.

Accuracy

Task: classification. Decision rule: argmax over the last axis of the first model output. TARGET evidence: Arm Corstone-300 FVP (functional model).
ColumnTop-1 [95% CI]Top-5 [95% CI]
GOLDEN86.0% [82.8, 89.0]100.0% [100.0, 100.0]
SCHEME86.4% [83.4, 89.4]100.0% [100.0, 100.0]
TARGET86.4% [83.4, 89.6]100.0% [100.0, 100.0]
Decision changes: inputs whose decision differs between the two columns.
PairChangedOfRate [95% CI]
GOLDEN→SCHEME25000.4% [0.0, 1.0]
SCHEME→TARGET05000.0% [0.0, 0.0]
GOLDEN→TARGET25000.4% [0.0, 1.0]
Accuracy deltas in percentage points: earlier column minus later column; positive means the later column is lower.
PairTop-1 delta [95% CI]Top-5 delta [95% CI]
GOLDEN→SCHEME−0.4% [−1.0, +0.0]+0.0% [+0.0, +0.0]
SCHEME→TARGET+0.0% [+0.0, +0.0]+0.0% [+0.0, +0.0]
GOLDEN→TARGET−0.4% [−1.0, +0.0]+0.0% [+0.0, +0.0]
Changed decisions GOLDEN→TARGET, largest GOLDEN top-1 minus top-2 margin first (2 of 2).
InputLabelGOLDEN classGOLDEN scoreTARGET classTARGET scoreGOLDEN margin
397230.34120.3550.004
104230.47920.4840.003

Saturation

Range-limit hits in SCHEME: 5 of 8,746,000 observed output elements, in 2 of 9 quantized operators (500 inputs).

Elements of a quantized operator output equal to the type's representable limit, counting only limits whose real value is non-zero and which are not the fused activation's clamp. Accumulator clamps inside kernels are not observable from tensor values and are not counted.
#OperatorOutput tensorLow-limit hitsHigh-limit hitsElements
5MEANfunctional_1_1/gap_1/Mean0316,000
7FULLY_CONNECTEDfunctional_1_1/fc_1/MatMul205,000

Latency

NOT MEASURED the Arm Corstone-300 FVP is a simulator and produces no wall-clock inference latency; NPU cycle counts are reported separately as npu.* metrics and are not latency

Memory and bandwidth

Measurements. MiB = 2^20 bytes.
QuantityValueUnitSource
Compiled artifact size0.01459MiB (15,296 bytes)host filesystem: size of artifact_int8_vela.tflite
Peak RAM—MiBNOT MEASURED target ethos-u55-128 does not declare peak_ram telemetry
On-chip SRAM working set—MiBNOT MEASURED target ethos-u55-128 does not declare sram telemetry. A compile-time estimate exists (SRAM used 21.48 KiB, source: estimate) and is not admissible as a measurement

NPU performance counters

500 inputs. Source: simulation.
CounterMax per inferenceRange over inputsUnitMetric
ACTIVE31,908SIMULATOR, NOT SILICON31,908cyclesnpu.active_cycles
Arm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits
AXI0_RD_DATA_BEAT_RECEIVED5,105SIMULATOR, NOT SILICON5,105beatsnpu.axi0_read_beats
Arm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits
AXI0_WR_DATA_BEAT_WRITTEN4,001SIMULATOR, NOT SILICON4,001beatsnpu.axi0_write_beats
Arm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits
AXI1_RD_DATA_BEAT_RECEIVED1,642SIMULATOR, NOT SILICON1,642beatsnpu.axi1_read_beats
Arm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits
IDLE1,1921,192cyclesderived by the application: TOTAL minus ACTIVE
TOTAL33,100SIMULATOR, NOT SILICON33,100cyclesnpu.total_cycles
Arm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits
Estimates from compiler: ethos-u-vela 5.2.0. Source: estimate. Not measurements, and not admissible against declared limits.
Compile-time figureEstimateUnit
SRAM used21.48ESTKiB
DRAM used0ESTKiB
On-chip flash used0ESTKiB
Off-chip flash used9.328ESTKiB
Inference time0.05368ESTms
Inferences per second18630EST1/s
Neural-network MACs per inference825684ESTMACs
NPU cycles per inference25177ESTcycles
Total cycles per inference26839ESTcycles
SRAM traffic per inference87668ESTbytes
DRAM traffic per inference0ESTbytes
Off-chip flash traffic per inference8688ESTbytes
NPU passes after fusing37.00ESTpasses

NOT MEASURED Roofline position: requires measured external-memory traffic and bandwidth on the device. Compile-time traffic estimates do not establish whether this workload is bandwidth-bound or compute-bound.

Power and thermal

QuantityValueUnitStatus
Energy per inference—mJNOT MEASURED target ethos-u55-128 does not declare energy telemetry
Peak power—mWNOT MEASURED target ethos-u55-128 does not declare power telemetry
Thermal at start
N/A: simulator
DVFS state
N/A: simulator
Power mode
N/A: simulator
Throttle onset
NOT MEASURED sustained-load runs are not implemented in this build

Regression diff

Compared with run 20261001T023700Z-ethos-u55-128-32c372d2 (2026-10-01T02:37:00+00:00), matched on most recent earlier run with the same budgets canonical SHA-256 and the same target. Artifact unchanged: 32c372d247606287… → 32c372d247606287…. Verdict FAILED → FAILED.

Change is current minus previous.
MetricPreviousCurrentChangeUnitLimit result
accuracy.answer_flip_rate0.0040 (0.4%)0.0040 (0.4%)0.0000 (0.0%)fractionPASS → PASS
accuracy.top1_delta−0.0040 (−0.4%)−0.0040 (−0.4%)0.0000 (0.0%)fractionPASS → PASS
accuracy.top5_delta0.0000 (0.0%)0.0000 (0.0%)0.0000 (0.0%)fraction
drift.output_cosine0.9999000.9999000.000000cosine
drift.output_snr_db36.9936.990.00dB
memory.flash_mb0.014590.014590MiBPASS → PASS
npu.active_cycles31908319080cycles
npu.axi0_read_beats510551050beats
npu.axi0_write_beats400140010beats
npu.axi1_read_beats164216420beats
npu.total_cycles33100331000cycles
placement.fallback_ops110opsFAIL → FAIL
placement.unsupported_ops000ops

Limitations

  • GOLDEN is a reference convention (ONNX Runtime FP32, graph optimizations disabled), not ground truth; another FP32 implementation would differ slightly.
  • Per-layer comparison is valid only at fusion boundaries. A tensor that does not exist in a column is marked NOT_COMPARABLE; no alignment is inferred.
  • Saturation counts are range-limit hits on operator outputs; clamps on accumulators inside kernels are not observable and are not counted.
  • The ethos-u55-128 adapter has never run against physical hardware.
  • ethos-u55-128 executed on Arm Corstone-300 FVP 11.27_42 (Cortex-M55 + ethos-u55-128, Shared_Sram): simulator, not silicon. TARGET outputs come from Arm Corstone-300 FVP (functional model), which computes the outputs the silicon would; accuracy and decision changes from it count toward the verdict. It does not model timing faithfully: NPU counters are cycle-approximate, are not latency, and are not admissible. No latency, power, or memory figure in this report comes from silicon.
  • ethos-u55-128: compiler cycle, SRAM, flash, and traffic figures are compile-time estimates, not measurements, and are not admissible against declared limits.