microsoft / microsoft/winml-cli

Bug: test_reshape_openvino_npu_quick hangs in EPChecker.check_compile (env/driver issue, not code regression)

Open
#419 2 comments 0 reactions 2 assignees View on GitHub

@chinazhangchao is already working on this.

Since May 11, 2026.

bug hardware P2 static-analyzer triaged
Dominant language
Python
Stars
40
Forks
11
Avg merge
1d 8h
Merged PRs (30d)
50

Description

Symptom

tests/integration/analyze/runtime_checker/test_reshape_openvino.py::test_reshape_openvino_npu_quick hangs indefinitely on a developer machine that has an Intel NPU + OpenVINO drivers installed (i.e. expected to be a green path).

The hang traces to:

tests/integration/analyze/runtime_checker/test_helper.py:63   list(test_results_iter)
src/winml/modelkit/pattern/op_input_gen/op_input_gen.py:1546  check_on_ep
src/winml/modelkit/analyze/runtime_checker/runner.py:294      future.result(timeout=self.timeout_sec)

The worker subprocess never returns from EPChecker.check_compile for OpenVINOExecutionProvider on OrtHardwareDeviceType.NPU. The internal timeout eventually fires; faulthandler dumps the worker stack and pytest exits non-zero.

Reproduction

uv run pytest tests/integration/analyze/runtime_checker/test_reshape_openvino.py::test_reshape_openvino_npu_quick -v --timeout=180

Bisection — not an in-tree regression

Commit Description Result
77d553b (recent main) Phase-3 telemetry HUNG
5d9fcfc^ (parent of #357 "kill timeout process") "add ms gelu" HUNG
2a24d0f "update qdq for deepseek" HUNG
a86f347 first public commit HUNG

Test reproduces the hang back to the first public commit on this hardware, so the issue is not a code regression. The hang is upstream of the timeout/kill code path that #357 modified — future.result is waiting on a worker that is stuck inside the actual OpenVINO compile call.

Hypothesis — environment / driver layer

The OpenVINO NPU Compile call hangs in the worker subprocess. Likely candidates:

  • OpenVINO Python package version mismatched with the installed NPU driver
  • NPU driver state (e.g. residual context from a previous crashed run)
  • ORT NPU device enumeration interaction

Suggested investigation

  1. uv pip show openvino — record version on the affected machine
  2. Compile a minimal Reshape-only ONNX model directly via the OpenVINO Python API targeting NPU — does the standalone path also hang?
  3. Reproduce on a CI agent with NPU — if it also hangs there, this is an OpenVINO/driver compatibility issue at the EPChecker.check_compile layer; file upstream.
  4. If only reproducible on developer boxes, document the required driver / OpenVINO versions in the contributing guide.

Out of scope for this issue

This is not about ModelKit's timeout handling code (that path is fine; the test never gets that far). It is about why the actual NPU compile call doesn't return.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.