This document is relevant for: Inf1, Inf2, Trn1, Trn2, Trn3
Neuron Explorer Troubleshooting & FAQs#
This page covers common issues, error codes, and frequently asked questions when using Neuron Explorer for profiling Trainium and Inferentia workloads.
Error codes and processing failures#
Profile processing errors#
Error |
Cause & Resolution |
|---|---|
|
Profile processing failed before completion. Common causes:
Fix: Verify NEFF and NTFF UUIDs match (numeric hash in filenames must be identical). Check total size <5 GB. Check the Explorer processing logs for more specific error details. |
|
Explorer cannot parse the uploaded directory as a valid system profile. Common causes:
Fix: For device-only profiles, use “Individual Files” upload or
CLI |
|
Upload rejected by the server. Common causes:
Fix: For files >5 GB, consider filtering capture to specific NeuronCores to reduce file size. Check the Explorer processing logs for detailed error information. |
Profile stuck in |
Processing started but never completed, or upload succeeded but processing didn’t begin. Common causes:
Fix: Wait 10-15 minutes for large profiles. If still stuck after
30 minutes, try uploading without source code (if that works, check
source is |
Non-fatal processing messages#
These messages appear in logs but don’t affect profile usability:
ERRO[0012] Unable to process node with uid <hash> for exec 6
ERRO[0110] invalid DMA duration - transfer rate is invalid
ERRO[0183] Unable to convertToInt64. Cannot convert empty string "" to int64 for field ModelId.
These indicate minor issues with individual events. The overall profile is still viewable and accurate for the remaining data.
UI and connection errors#
Symptom |
Resolution |
|---|---|
|
Tools not installed, or |
UI doesn’t load (connection refused) |
Explorer server not running, or SSH tunnel misconfigured. Run
|
UI loads but shows no data / blank widgets |
Only port 3001 forwarded. Must tunnel both 3001 and 3002:
|
500 error when opening a profile |
Profile processed on a different Explorer version than the one
serving it. Re-process: upload again or re-run
|
Browser tab freezes/crashes on profile open |
Profile has too many instructions for the browser to render.
Try filtering to specific NeuronCores, or use
|
|
File permission issue after reference was acquired. Usually occurs when profile files are moved/deleted while Explorer is running. Restart Explorer and re-upload. |
Profiling and capture issues#
No output / empty profiles#
Symptom |
Resolution |
|---|---|
Empty output directory when capturing a system profile |
Profiling wasn’t enabled or workload didn’t execute on Neuron.
Verify |
“No profiling data” in viewer |
Viewer pointed at the wrong directory. Use
|
|
In PyTorch, this is expected when the process initializes more
NeuronCores than it executes on. For example, if the process
controls 64 NeuronCores but runs on NeuronCore 0 only, NTFFs
for cores 1–63 will be empty. Use |
No |
For system profiles: NEFFs are in a separate compiler cache. Set
|
Only |
System-only capture ( |
Unequal number of NEFF and NTFF files |
With session-based device profiling (the default in PyTorch), a 1:1
NEFF-to-NTFF mapping is not required — this is expected behavior.
For |
NEFF/NTFF UUID mismatch |
Files are from different compilations. Recompile and recapture in the same session to ensure matching UUIDs. |
Missing data in profiles#
Symptom |
Resolution |
|---|---|
DMA variable shows |
DGE notifications not enabled. Set
|
Source Code Viewer widget is empty |
Source code was not uploaded alongside the profile. Upload source
as a |
Device Trace events missing source code information |
Debug info not captured. Set |
NKI source location points to non-existent files |
Source paths in debug info are absolute from the compilation host.
If viewing on a different machine, paths won’t resolve. Upload
source as a |
No framework events in system trace |
Framework trace ( |
No arrows from aten ops to device execution |
Dependency chain requires Native PyTorch profiler integration
( |
Tensor Engine events missing from profile |
Known issue with certain workloads. Verify the workload actually
uses matmul operations. If yes, try recapturing with the latest
|
Instructions show as “unknown” or “Operation(N)” |
Profiler version doesn’t recognize newer opcodes (e.g.,
|
MFU/HFU shows 0 despite continuous PE activity |
Known issue when the profile contains only non-matmul Tensor Engine
instructions (e.g., transposes only). MFU counts only matmul FLOPs.
Check |
|
DGE notifications are not collected by default. Recapture with
|
Dependency highlighting doesn’t show for some instructions |
Known issue with E2E (end-to-end) profiles where dependency metadata may be incomplete for certain instruction types. |
Events appear/disappear based on zoom level |
Virtualization optimization: Explorer only renders events visible at the current zoom. Zoom in to see smaller events. This is expected behavior for performance. |
Duplicate DMA packets in timeline |
Known profiler issue where the same DMA packet appears multiple times. Under investigation. Does not affect DMA size calculations in the summary. |
Dropped events in system profile ( |
Trace buffers filled and oldest events were overwritten.
|
Incomplete JAX profiles (fewer events than expected) |
Check:
|
Performance issues#
Symptom |
Resolution |
|---|---|
Profile too slow to interact with (laggy pan/zoom) |
Large profiles with many instructions degrade UI performance. Use region selection or annotations to focus on a subset. Filter to specific NeuronCores during capture. |
Processing takes >30 minutes |
Expected for very large profiles (>2 GB NTFF). Use
|
Out-of-memory during profiling |
|
|
Known issue profiling MPMD workloads (e.g., TP2+EP2). Workaround: profile with single process group, or use session-based capture. |
Timing and measurement issues#
Symptom |
Resolution |
|---|---|
Model execution shows ~0.2 ms (impossibly fast) |
Async dispatch: you’re measuring queue submission time, not
execution. Add |
Profile shows compilation instead of execution |
Model wasn’t warmed up. Run 3+ forward passes before starting the profiler to ensure you capture execution, not compilation. |
Collective input/output sizes off by 2x |
Known issue with SB2SB collective reporting. The profiler may report 2x more data transfer than actually occurs for SB2SB collectives. Under investigation. |
ProfilerMFU vs mfu_estimated_percent discrepancy |
|
Frequently asked questions#
Capture and setup#
- How do I determine NEFF execution time without profiling?
There is no built-in non-profiling timer for NEFF execution. The recommended approach is to use
torch.neuron.synchronize()around your workload and measure wall-clock time:torch.neuron.synchronize() t0 = time.time() for _ in range(50): model(x) torch.neuron.synchronize() avg_ms = (time.time() - t0) / 50 * 1000
- What’s the difference between ``model`` and ``session`` device profiling?
model(or1): Captures the first execution of each NEFF per NeuronCore. Good for compiled-graph workloads (torch.compile).session: Captures all device activity in one continuous NTFF. Required for inference serving (vLLM), eager mode, or when you need to see multiple executions of the same NEFF.
- How do I profile vLLM / inference serving workloads?
Set
NEURON_RT_INSPECT_DEVICE_PROFILE=session(not1/model). The standardmodelmode only captures the first execution, which misses the continuous serving behavior.- How do I profile eager mode (torch.eager) workloads?
Eager mode generates many NEFFs (one per op). Profile from the 1st iteration (no compilation step). Use
sessionmode and setneff_cache_dirin NeuronConfig to ensure all NEFFs are captured. Expect potentially hundreds of NEFF/NTFF pairs.- Can I profile MPMD workloads (different NEFF per rank)?
Currently limited.
neuron-explorer captureon a single NEFF captures all NeuronCores running that NEFF. For true multi-NEFF-per-rank visibility, use environment-variable capture withNEURON_RT_INSPECT_DEVICE_PROFILE=sessionand collect per-rank output.- How much profiler overhead is there?
System-only: <2% CPU overhead
Device profiling: reserves ~5 GB HBM on Trn2/Trn3 for notification buffers. Runtime overhead to NEFF execution is negligible due to hardware support. The main overhead comes from transferring profile data from device to host memory and saving it to disk.
DGE notifications: adds DMA traffic proportional to transfer count
- Why do I need to recompile after setting debug environment variables?
NEURON_FRAMEWORK_DEBUG,NKI_DEBUG_INFO,XLA_IR_DEBUG, andXLA_HLO_DEBUGaffect what metadata the compiler embeds in NEFFs. Previously-cached NEFFs don’t have this metadata. Delete the compiler cache or set a newneff_cache_dirto force recompilation.
Viewing and analysis#
- What is the difference between MFU and HFU?
MFU (Model FLOPs Utilization): Only counts FLOPs from useful matrix multiplications (model progress). The metric you optimize toward.
HFU (Hardware FLOPs Utilization): Counts all Tensor Engine FLOPs including transposes, padding, and overhead. Always ≥ MFU.
If HFU >> MFU: hardware is busy but doing non-useful work (transposes, padding).
- Why is MFU 0 even though Tensor Engine is active?
MFU only counts MATMUL instructions. If the Tensor Engine is active but only running transposes or weight loads, MFU will be 0. Check HFU for total Tensor Engine utilization.
- How do I export annotations or profile data to CSV/Excel?
Use the Database Viewer to run SQL queries and export results. For annotations, there is no direct CSV export — use the annotation save/load feature to persist them as JSON.
- Can I view multi-rank profiles (one NEFF, many NTFFs per rank)?
Multi-rank device-only profiles (without system trace) are not yet supported as a single unified view. You can upload each rank’s NEFF+NTFF pair as a separate profile and compare side-by-side. For unified multi-rank viewing, capture a system profile which aggregates all ranks.
- How do I isolate metrics for specific model layers (e.g., MoE vs attention)?
Use the Hierarchy Viewer to identify layer boundaries, then create annotations at those boundaries. The Current Selection Summary and Box Selection Summary show metrics for the selected region only.
- Why do system and device timelines use different clocks?
System profiles use the host CPU clock (wall time). Device profiles use the NeuronCore device clock (cycle-accurate). They are correlated via
nc_exec_runningevents but are currently not exactly synchronized due to clock domain differences.- What does “NKI instruction coverage” mean in the Summary?
The percentage of instructions on each engine that were generated from NKI kernel code vs the Neuron compiler. Low NKI coverage (<50%) means most execution is compiler-generated — writing NKI kernels for those operations could improve performance.
- Is ``summary-json`` still supported?
Yes. Use
neuron-explorer view -d <dir> --output-format summary-jsonto get machine-readable summary metrics. The output schema may change between versions — pin to a specific Explorer version for automation.- How do I see PSUM and SB usage in profiles?
SBUF and PSUM buffer usage data is included by default. If it appears missing, verify you are using the latest
neuron-explorerversion. To explicitly disable it (e.g., for faster processing of very large profiles), use-F ignore-nc-buf-usage=true.- How do rows reorder on zoom reset in system profiles?
Dragged row positions in the System Trace Viewer reset on zoom changes. This is a known UX limitation. Row positions don’t persist across zoom levels.
Compatibility#
- Are my existing Neuron Profiler/Profiler 2.0 profiles compatible?
Yes. Existing profile files must be reprocessed by Neuron Explorer but don’t need recapturing. Upload them and Explorer will re-ingest.
- Is Neuron Explorer replacing Neuron Profiler?
Yes. Neuron Profiler and Profiler 2.0 entered end-of-support in Neuron 2.29. Use Neuron Explorer for all new profiling work.
- Which Python versions are supported?
Neuron Explorer supports Python 3.9, 3.10, 3.11, 3.12, and 3.13 (version support follows the Neuron SDK release).
- Does Neuron Explorer work on Inf1?
No. Neuron Explorer is not supported on Inf1. It supports Inf2, Trn1, Trn2, and Trn3 instances.
This document is relevant for: Inf1, Inf2, Trn1, Trn2, Trn3