Two public ONNX speech models reproducibly take the host process down with an access violation
(0xC0000005) during InferenceSession creation on the Vitis AI EP. One of them is Silero VAD,
which is 2.2 MiB and about as widely deployed as an ONNX graph gets, so the repro is cheap.
This is not a caught error — no exception reaches managed code, no CPU fallback happens, and the
process exits 139. An application cannot log it or degrade around it.
Environment
|
|
| CPU |
AMD Ryzen AI 9 365 w/ Radeon 880M (Strix Point) |
| NPU driver |
32.0.20102.3930 (2026-05-06) |
| XRT |
2.21.0, hash 15e6319be8de1e76a6150111a3861729e988fdb5, 2026-05-07 |
| NPU firmware |
1.1.2.64 |
| OS |
Windows 11 Home 25H2, build 26200.8873 |
| EP |
VitisAIExecutionProvider, package MicrosoftCorporationII.WinML.AMD.NPU.EP.1.8 1.8.68.0 |
| EP acquisition |
Windows ML — ExecutionProviderCatalog.GetDefault() → EnsureReadyAsync(). The Ryzen AI SDK is not installed. |
| ONNX Runtime |
1.23.x as supplied by Windows ML; the EP device reports ep.version 1.23.2 |
| AI Engine Compiler |
RAI 1.8, build b69afd0, 2026-06-05, target aie2p |
The hardware and the EP are otherwise healthy
Establishing this first, because it rules out a broken install:
xrt-smi validate passes all three tests: latency 68.0 µs, throughput 60,837 op/s, GEMM 51.3 TOPS.
- Synthetic ONNX graphs compile through VAIML and execute on the array —
xrt-smi examine --report aie-partitions shows the process holding a hardware context across all 8 columns with
9,538 completed submissions and 0 errors.
- A static MatMul and a small Conv/Relu stack both compile and run correctly.
Repro 1 — Silero VAD
Model: silero_vad.onnx, 2.2 MiB, the standard published graph
(https://github.com/snakers4/silero-vad). Inputs input [1, N] float32, state [2, 1, 128] float32,
sr [1] int64.
Creating an InferenceSession with the Vitis AI EP appended crashes. Last log lines before the
fault:
WARNING: Logging before InitGoogleLogging() is written to STDERR
I... register_dynamicdispatch.cpp:49] Running DynamicDispatchOpRegister::register_ops
I... register_castavx.cpp:48] Running CastAvxOpRegister::register_ops
Exception Code: 0xC0000005
#0 0x00007fff9db31576 (...\ExecutionProvider\vaiml.dll+0x921576)
#1 0x00007fff9f136f36 (...\ExecutionProvider\vaiml.dll+0x1f26f36)
#2 0x00007fff9f136d52 (...\ExecutionProvider\vaiml.dll+0x1f26d52)
#3 0x00007fffa0886734 (...\ExecutionProvider\vaiml.dll+0x3676734)
#4 0x00007fff9d5a1d05 (...\ExecutionProvider\vaiml.dll+0x391d05)
...
#28 0x00007ff85038e957 (C:\WINDOWS\System32\KERNEL32.DLL+0x2e957)
#29 0x00007ff85252ad6c (C:\WINDOWS\SYSTEM32\ntdll.dll+0xaad6c)
Process exit code 139. The full 30-frame stack is all vaiml.dll offsets and can be attached if
useful.
Note the graph contains an If around an RNN — If_0_then_branch__Inline_0__/decoder/rnn/Squeeze
is a node name in it. AMD's MIGraphX EP fails on the same model differently, with a clean parse
error naming that node, rather than crashing.
Repro 2 — NVIDIA Streaming Sortformer diarizer
Model: NVIDIA Streaming Sortformer 4spk v2.1 exported to ONNX, 452.6 MiB. Same EP, same crash code,
faulting one frame higher:
Fatal error.
0xC0000005
at Microsoft.ML.OnnxRuntime.InferenceSession.Init(System.String,
Microsoft.ML.OnnxRuntime.SessionOptions,
Microsoft.ML.OnnxRuntime.PrePackedWeightsContainer)
This graph carries an explicit state tensor in and out across chunks and has no If/Loop.
Minimal C# repro
using Microsoft.ML.OnnxRuntime;
using Microsoft.Windows.AI.MachineLearning;
var catalog = ExecutionProviderCatalog.GetDefault();
await catalog.EnsureAndRegisterCertifiedAsync();
var env = OrtEnv.Instance();
var dev = env.GetEpDevices().First(d => d.EpName == "VitisAIExecutionProvider");
var opts = new SessionOptions();
opts.AppendExecutionProvider(env, new[] { dev }, new Dictionary<string, string>());
// crashes here — 0xC0000005, process exits 139
using var session = new InferenceSession(@"silero_vad.onnx", opts);
net10.0-windows10.0.26100.0, Microsoft.WindowsAppSDK 1.8.250916003, with
<WindowsPackageType>None</WindowsPackageType> set so the bootstrapper initialises.
What I would expect instead
Either compile the graph, or decline it and let ONNX Runtime place those nodes on the CPU — which is
what the EP does cleanly for every other unsupported construct I tested. In a matrix of eight
minimal graphs covering LSTM, GRU, If, Loop, carried state and control flow wrapping
recurrence, none crashed; each was either compiled or declined, and the declines were recorded
properly in graph_partition_trace.csv. So the crash is not simply "unsupported operator" — the
decline path exists and works.
Not a duplicate of
Happy to attach full logs, the preliminary-vaiml-pass-summary.txt / graph_partition_trace.csv
from the cache, or a trimmed repro project if that helps.
Two public ONNX speech models reproducibly take the host process down with an access violation
(
0xC0000005) duringInferenceSessioncreation on the Vitis AI EP. One of them is Silero VAD,which is 2.2 MiB and about as widely deployed as an ONNX graph gets, so the repro is cheap.
This is not a caught error — no exception reaches managed code, no CPU fallback happens, and the
process exits 139. An application cannot log it or degrade around it.
Environment
15e6319be8de1e76a6150111a3861729e988fdb5, 2026-05-07VitisAIExecutionProvider, packageMicrosoftCorporationII.WinML.AMD.NPU.EP.1.81.8.68.0ExecutionProviderCatalog.GetDefault()→EnsureReadyAsync(). The Ryzen AI SDK is not installed.ep.version 1.23.2b69afd0, 2026-06-05, targetaie2pThe hardware and the EP are otherwise healthy
Establishing this first, because it rules out a broken install:
xrt-smi validatepasses all three tests: latency 68.0 µs, throughput 60,837 op/s, GEMM 51.3 TOPS.xrt-smi examine --report aie-partitionsshows the process holding a hardware context across all 8 columns with9,538 completed submissions and 0 errors.
Repro 1 — Silero VAD
Model:
silero_vad.onnx, 2.2 MiB, the standard published graph(https://github.com/snakers4/silero-vad). Inputs
input [1, N] float32,state [2, 1, 128] float32,sr [1] int64.Creating an
InferenceSessionwith the Vitis AI EP appended crashes. Last log lines before thefault:
Process exit code 139. The full 30-frame stack is all
vaiml.dlloffsets and can be attached ifuseful.
Note the graph contains an
Ifaround an RNN —If_0_then_branch__Inline_0__/decoder/rnn/Squeezeis a node name in it. AMD's MIGraphX EP fails on the same model differently, with a clean parse
error naming that node, rather than crashing.
Repro 2 — NVIDIA Streaming Sortformer diarizer
Model: NVIDIA Streaming Sortformer 4spk v2.1 exported to ONNX, 452.6 MiB. Same EP, same crash code,
faulting one frame higher:
This graph carries an explicit state tensor in and out across chunks and has no
If/Loop.Minimal C# repro
net10.0-windows10.0.26100.0,Microsoft.WindowsAppSDK1.8.250916003, with<WindowsPackageType>None</WindowsPackageType>set so the bootstrapper initialises.What I would expect instead
Either compile the graph, or decline it and let ONNX Runtime place those nodes on the CPU — which is
what the EP does cleanly for every other unsupported construct I tested. In a matrix of eight
minimal graphs covering
LSTM,GRU,If,Loop, carried state and control flow wrappingrecurrence, none crashed; each was either compiled or declined, and the declines were recorded
properly in
graph_partition_trace.csv. So the crash is not simply "unsupported operator" — thedecline path exists and works.
Not a duplicate of
cached-graph timeout,
ERT_CMD_STATE_TIMEOUT. This is an immediate access violation.xir_deserialize_cif, PP-DocLayoutV3, MAX+ 395) — that faults after a successful AIEcompilation. These two fault before any compile output is produced.
Happy to attach full logs, the
preliminary-vaiml-pass-summary.txt/graph_partition_trace.csvfrom the cache, or a trimmed repro project if that helps.