NXP i.MX 95
The EdgeFirst Profiler runs on the NXP i.MX 95 (aarch64) and uses the Neutron NPU for hardware-accelerated inference. The Neutron NPU is exposed to the profiler through the TFLite C library and the NXP libneutron_delegate.so.
For a guided platform tour see the i.MX 95 Quick Start. This page covers only the profiler-specific setup.
Prerequisites
- NXP Linux BSP image with the EdgeFirst SDK overlay
libtensorflowlite_c.so(preinstalled in the EdgeFirst image)libneutron_delegate.so(preinstalled in the EdgeFirst image)neutron-convertertoolchain (cross-host, used to compile models before deployment)
The Neutron NPU only executes models that have been passed through the Neutron Converter — the converter rewrites a standard TFLite model into a graph the Neutron NPU can run. See the Neutron Converter guide.
Install the profiler
pip install edgefirst-profiler
curl -fsSL https://raw.githubusercontent.com/EdgeFirstAI/profiler-cli/main/install.sh | bash
Confirm:
edgefirst-profiler --version
Delegate selection
The profiler picks a TFLite delegate automatically — and you can override it on the validation session if needed. Delegate values:
| Value | Behavior |
|---|---|
(omitted) / auto |
Probe well-known NPU paths (/usr/lib/libneutron_delegate.so, /usr/lib/libvx_delegate.so); fall back to XNNPACK. |
xnnpack |
Explicit XNNPACK CPU delegate. |
none / cpu |
No delegate — reference kernels. |
path to .so |
Load a custom delegate from disk. |
Auto-detection reads /sys/firmware/devicetree/base/compatible to identify i.MX 95 and pre-populate the delegate path in the TUI's profile configuration screen.
Per-tick Neutron profiling
When both conditions below are met, the profiler reports per-tick timing — every NPU kernel (Conv2DDenseTT, AddTT, …) appears as its own slice in the Studio trace view:
- The model was compiled with
enable_profiling: truein the Neutron Converter. - The target runs Neutron drivers ≥ 3.0.1 (tested on 3.0.1), shipped as part of the eIQ Neutron SDK.
Older 2.x drivers
The profiler remains fully functional with Neutron drivers 2.x — inference timing, pipeline-stage breakdown, and accuracy metrics all work normally. Only the per-operation NPU timing (op-level profiling of the Neutron graph) is unavailable without 3.0.1+ drivers.
To get human-readable kernel names rather than opaque IDs, pass the Neutron converter statistics file produced when the model was compiled:
neutron-converter --dump-statistics-file yolov8n_neutron.statistics ...
Provide that file to the validation session via --neutron-statistics yolov8n_neutron.statistics. Without the statistics file the timing is still captured — only the labels become opaque IDs.
Verifying the install
edgefirst-profiler login
edgefirst-profiler # opens TUI on F1 Help; F4 auto-populates the delegate path
Then run a validation session — see Validation from Studio or Validation from the Profiler.