Qualification report
2026-10-02T20:39:31+00:00
- 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.
Declared limitsVerdict evidence
| Parameter | Limit | Measured | Unit | Evidence | Result |
|---|---|---|---|---|---|
accuracy.answer_flip_rateFraction of eval inputs whose decision differs between GOLDEN and TARGET. | ≤ 0.0200 (2.0%) | 0.0040 (0.4%)FUNCTIONAL MODEL | fraction | Arm 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 MODEL | fraction | Arm 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 | — | ms | target 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 latency | NOT MEASURED |
memory.flash_mbSize of the compiled artifact as stored for deployment. MiB = 2^20 bytes. | ≤ 0.5000 | 0.01459 | MiB | host filesystem: size of artifact_int8_vela.tflite | PASS |
placement.fallback_opsSource-graph operators the target toolchain placed on the CPU instead of the accelerator. | ≤ 0 | 1 | ops | compiler: ethos-u-vela 5.2.0; classified from the compiled artifact | FAIL |
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
| Role | File | SHA-256 | Bytes |
|---|---|---|---|
| Reference (FP32) | examples/demo/reference.onnx | 491aaffa3e9b7e1814c1b0effbf86c8b4198d2cc47b8e3cc89d5a70840fc01e6 | 26,814 |
| Artifact (INT8) | examples/demo/artifact_int8.tflite | 32c372d24760628795dae729f5298c98ef93aa3f751565fa1c0b58efda3212b0 | 12,696 |
| Compiled artifact | runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_vela.tflitecompiled | d953306bd1825e8dbfafc03a8644132303f43473e5f9b5ec85fc9035c5ce334c | 15,296 |
| Eval set | examples/demo/evalset.npz500 inputs, labels present | 6a9e56fb06bf4d88567fc9cc8a954849b0dffd194a7b2266300d2e7dc7a00d1c | 6,148,510 |
| Budgets | examples/demo/budgets.yaml | fbb08dec95b282b883020cacf83346da2a69510112f6357182de7b0a0b8500d6 | 576 |
| Comparison points | examples/demo/points.yaml | 170c27ac112341a1c5d967bfdfe8b7cd71f22b4f86ae71dc98ecc6879d894e94 | 1,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 file | SHA-256 |
|---|---|
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/vela_stdout.txt | d5cdf30af01760bc943ec48ecbc3ae0ed718a3ef1eb81a361ad8b94bfb4608cc |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/vela_stderr.txt | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_per-layer.csv | 7a7673dd6b30f47d9a13d524e831d8e2a8e6bf50cdeff78b3921dab8711a9270 |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/compile/artifact_int8_summary_Ethos_U55_High_End_Embedded.csv | ea6920b0f9aa13806d0e67d2be1b78bc17521811181a0dad9073ca999b122782 |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/fvp_manifest.json | 0ca38c794033cd44539b72ac4dad67154864c151eac8ce32f66f52b0a32e0925 |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/job.sh | 853281f73162fb0637be62fe1db2c5a7617050f7c7ec31a889bde4e582b55614 |
runs/20261002T203931Z-ethos-u55-128-32c372d2/targets/ethos-u55-128/execution/fvp/out/env.txt | be4dddabc2c510c9316a38e338dfbe2736276b7d969dafd63a84bde6cb397542 |
Placement map
| # | Operator | Placement | Output tensor | Toolchain reason |
|---|---|---|---|---|
| 6 | L2_NORMALIZATION | FALLBACK CPU | functional_1_1/l2norm_1/l2_normalize | Unsupported opType |
All 9 operators with evidence
| # | Operator | Placement | Output tensor | Evidence |
|---|---|---|---|---|
| 0 | CONV_2D | ACCELERATED | functional_1_1/conv1_1/Relu;functional_1_1/conv1_1/BiasAdd;functional_1_1/conv1_1/convolution;functional_1_1/conv1_1/Squeeze1 | per-layer CSV: 2 NPU operation(s) (Conv2D, Relu) |
| 1 | MAX_POOL_2D | ACCELERATED | functional_1_1/pool1_1/MaxPool2d | per-layer CSV: 1 NPU operation(s) (MaxPool) |
| 2 | CONV_2D | ACCELERATED | functional_1_1/conv2_1/Relu;functional_1_1/conv2_1/BiasAdd;functional_1_1/conv2_1/convolution;functional_1_1/conv2_1/Squeeze1 | per-layer CSV: 2 NPU operation(s) (Conv2D, Relu) |
| 3 | MAX_POOL_2D | ACCELERATED | functional_1_1/pool2_1/MaxPool2d | per-layer CSV: 1 NPU operation(s) (MaxPool) |
| 4 | CONV_2D | ACCELERATED | functional_1_1/conv3_1/Relu;functional_1_1/conv3_1/BiasAdd;functional_1_1/conv3_1/convolution;functional_1_1/conv3_1/Squeeze1 | per-layer CSV: 2 NPU operation(s) (Conv2D, Relu) |
| 5 | MEAN | ACCELERATED | functional_1_1/gap_1/Mean | per-layer CSV: 1 NPU operation(s) (Mul) |
| 6 | L2_NORMALIZATION | FALLBACK CPU | functional_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/Rsqrt | compiled artifact: L2_NORMALIZATION remains a CPU operator; per-layer CSV target CPU |
| 7 | FULLY_CONNECTED | ACCELERATED | functional_1_1/fc_1/MatMul;functional_1_1/fc_1/BiasAdd | per-layer CSV: 1 NPU operation(s) (FullyConnected) |
| 8 | SOFTMAX | ACCELERATED | StatefulPartitionedCall_1:0 | per-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).
| Point | Operator | GOLDEN→SCHEME: quantization damage | SCHEME→TARGET: vendor deviation | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Cosine | SNR dB | Max |err| | RMSE | Cosine | SNR dB | Max |err| | RMSE | Max LSB | ||
| conv1 | CONV_2D | 0.999971 | 42.33 | 0.274 | 0.00744 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| pool1 | MAX_POOL_2D | 0.999966 | 41.67 | 0.268 | 0.0103 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| conv2 | CONV_2D | 0.999912 | 37.26 | 0.193 | 0.00907 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| pool2 | MAX_POOL_2D | 0.999934 | 38.54 | 0.193 | 0.0114 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| conv3 | CONV_2D | 0.999674 | 31.81 | 0.140 | 0.00518 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| gap | MEAN | 0.999812 | 34.14 | 0.0120 | 0.00116 | NOT COMPARABLE not observable on the FVP: the inference runner copies out model outputs only, not intermediate tensors | ||||
| l2norm | L2_NORMALIZATION | 0.999805 | 34.09 | 0.0295 | 0.00349 | NOT COMPARABLE not observable on the FVP: the inference runner copies out model outputs only, not intermediate tensors | ||||
| logits | FULLY_CONNECTED | 0.999953 | 40.28 | 0.142 | 0.0244 | NOT COMPARABLE tensor does not exist in the compiled artifact (internal to a compiled partition); not comparable at this point | ||||
| probs (output) | SOFTMAX | 0.999900 | 36.97 | 0.0288 | 0.00333 | 1.000000 | 63.54 | 0.00781 | 0.000156 | 2 |
- 9 comparison points were declared in the points file.
Accuracy
| Column | Top-1 [95% CI] | Top-5 [95% CI] |
|---|---|---|
| GOLDEN | 86.0% [82.8, 89.0] | 100.0% [100.0, 100.0] |
| SCHEME | 86.4% [83.4, 89.4] | 100.0% [100.0, 100.0] |
| TARGET | 86.4% [83.4, 89.6] | 100.0% [100.0, 100.0] |
| Pair | Changed | Of | Rate [95% CI] |
|---|---|---|---|
| GOLDEN→SCHEME | 2 | 500 | 0.4% [0.0, 1.0] |
| SCHEME→TARGET | 0 | 500 | 0.0% [0.0, 0.0] |
| GOLDEN→TARGET | 2 | 500 | 0.4% [0.0, 1.0] |
| Pair | Top-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] |
| Input | Label | GOLDEN class | GOLDEN score | TARGET class | TARGET score | GOLDEN margin |
|---|---|---|---|---|---|---|
| 397 | 2 | 3 | 0.341 | 2 | 0.355 | 0.004 |
| 104 | 2 | 3 | 0.479 | 2 | 0.484 | 0.003 |
Saturation
Range-limit hits in SCHEME: 5 of 8,746,000 observed output elements, in 2 of 9 quantized operators (500 inputs).
| # | Operator | Output tensor | Low-limit hits | High-limit hits | Elements |
|---|---|---|---|---|---|
| 5 | MEAN | functional_1_1/gap_1/Mean | 0 | 3 | 16,000 |
| 7 | FULLY_CONNECTED | functional_1_1/fc_1/MatMul | 2 | 0 | 5,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
| Quantity | Value | Unit | Source |
|---|---|---|---|
| Compiled artifact size | 0.01459 | MiB (15,296 bytes) | host filesystem: size of artifact_int8_vela.tflite |
| Peak RAM | — | MiB | NOT MEASURED target ethos-u55-128 does not declare peak_ram telemetry |
| On-chip SRAM working set | — | MiB | NOT 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
| Counter | Max per inference | Range over inputs | Unit | Metric |
|---|---|---|---|---|
| ACTIVE | 31,908SIMULATOR, NOT SILICON | 31,908 | cycles | npu.active_cyclesArm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits |
| AXI0_RD_DATA_BEAT_RECEIVED | 5,105SIMULATOR, NOT SILICON | 5,105 | beats | npu.axi0_read_beatsArm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits |
| AXI0_WR_DATA_BEAT_WRITTEN | 4,001SIMULATOR, NOT SILICON | 4,001 | beats | npu.axi0_write_beatsArm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits |
| AXI1_RD_DATA_BEAT_RECEIVED | 1,642SIMULATOR, NOT SILICON | 1,642 | beats | npu.axi1_read_beatsArm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits |
| IDLE | 1,192 | 1,192 | cycles | derived by the application: TOTAL minus ACTIVE |
| TOTAL | 33,100SIMULATOR, NOT SILICON | 33,100 | cycles | npu.total_cyclesArm Corstone-300 FVP 11.27_42, cycle-approximate: counts from a simulator are not admissible against declared limits |
| Compile-time figure | Estimate | Unit |
|---|---|---|
| SRAM used | 21.48EST | KiB |
| DRAM used | 0EST | KiB |
| On-chip flash used | 0EST | KiB |
| Off-chip flash used | 9.328EST | KiB |
| Inference time | 0.05368EST | ms |
| Inferences per second | 18630EST | 1/s |
| Neural-network MACs per inference | 825684EST | MACs |
| NPU cycles per inference | 25177EST | cycles |
| Total cycles per inference | 26839EST | cycles |
| SRAM traffic per inference | 87668EST | bytes |
| DRAM traffic per inference | 0EST | bytes |
| Off-chip flash traffic per inference | 8688EST | bytes |
| NPU passes after fusing | 37.00EST | passes |
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
| Quantity | Value | Unit | Status |
|---|---|---|---|
| Energy per inference | — | mJ | NOT MEASURED target ethos-u55-128 does not declare energy telemetry |
| Peak power | — | mW | NOT 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.
| Metric | Previous | Current | Change | Unit | Limit result |
|---|---|---|---|---|---|
accuracy.answer_flip_rate | 0.0040 (0.4%) | 0.0040 (0.4%) | 0.0000 (0.0%) | fraction | PASS → PASS |
accuracy.top1_delta | −0.0040 (−0.4%) | −0.0040 (−0.4%) | 0.0000 (0.0%) | fraction | PASS → PASS |
accuracy.top5_delta | 0.0000 (0.0%) | 0.0000 (0.0%) | 0.0000 (0.0%) | fraction | |
drift.output_cosine | 0.999900 | 0.999900 | 0.000000 | cosine | |
drift.output_snr_db | 36.99 | 36.99 | 0.00 | dB | |
memory.flash_mb | 0.01459 | 0.01459 | 0 | MiB | PASS → PASS |
npu.active_cycles | 31908 | 31908 | 0 | cycles | |
npu.axi0_read_beats | 5105 | 5105 | 0 | beats | |
npu.axi0_write_beats | 4001 | 4001 | 0 | beats | |
npu.axi1_read_beats | 1642 | 1642 | 0 | beats | |
npu.total_cycles | 33100 | 33100 | 0 | cycles | |
placement.fallback_ops | 1 | 1 | 0 | ops | FAIL → FAIL |
placement.unsupported_ops | 0 | 0 | 0 | ops |
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.