Add manifest-driven E2E release evaluation - #1411
Conversation
4aa8314 to
329b28f
Compare
329b28f to
7511674
Compare
Resolve wrapped build artifact paths without ambiguous mtime fallback. Preserve adapter input dtypes and genuine bool tensors. Generate synthetic calibration samples lazily with deterministic per-index RNGs and add regression coverage.
Qiong Wu (qiowu) (DingmaomaoBJTU)
left a comment
There was a problem hiding this comment.
Reviewed the release manifest/target selection, explicit-argument conflicts, recipe matching and fallback, build-artifact recovery, download timeout supervision, lazy calibration/dtype changes, external-weight QDQ conversion/restoration, recipe relabeling and catalog update. No blocking findings identified. Locally, 45 focused runner tests passed in an isolated harness covering argument parsing, artifact-path extraction, failure classification and result paths/IO (native EP deduction stubbed; 306 other cases deselected; three harness warnings). Also verified 50 unique release model/task cases with 16 consistent targets, 43 catalog entries, and a clean git diff --check. All currently reported PR CI checks pass. Full hardware release execution, large-model QDQ and calibration suites were not rerun locally; historical accuracy/hardware claims remain scoped to the evidence described in the PR.
## Summary - Extract deployment artifacts only from `Final artifact:` or `Existing artifact found:`, preferring the final artifact over reused or intermediate outputs. - Preserve ANSI stripping and Rich-wrapped paths, separate captured stderr/stdout, and handle `OSError`/`ValueError` when checking candidate files. - Add regression coverage for stage output, invalid paths, cache fallback, output-stream boundaries, and final-artifact precedence. Apply the configured formatting hooks to the two touched files. ## Root Cause The wrapped-path reconstruction introduced in #1411 also parsed stage-level `Artifact:` lines. Those lines include a size suffix, such as `..._export.onnx (335.3 MB)`, so the `.endswith(".onnx")` stop condition never matched. Subsequent warning and Optimize output was appended to the candidate filename. On the affected Windows agent, `Path.is_file()` raised `WinError 1113` after the build subprocess had already exited successfully. Stage artifacts are not necessarily the deployment-ready model and must not be selected as a fallback for the final build summary. ## Validation - Complete E2E runner unit tests after formatting: **364 passed**, including **15 artifact-path cases**. - Configured pre-commit hooks passed for both changed files; editor diagnostics and `git diff --check` passed. - Real local Windows E2E reruns of `openai/clip-vit-base-patch32` with QNN package **2.2480.49.0**, matching the version reported in the failing logs: | Task | Target | Runner job labels | Result | | --- | --- | --- | --- | | feature-extraction | QNN NPU | fp32, w8a16 | 2/2 PASS; runner exit 0 | | zero-shot-image-classification | QNN NPU | w8a8, w8a16 | 2/2 PASS; runner exit 0 | | zero-shot-image-classification | QNN GPU | default | 1/1 PASS; runner exit 0 | All three runs used `--eval-type perf --timeout 1800 --raw-output` with isolated temporary output/cache directories. Builds exercised the stage-output parsing path, and all eight component perf subprocesses exited 0. No path-parser exceptions occurred. Saved result JSON confirms all five jobs passed. This validates the perf workflows from the three reported failures; accuracy was not rerun. The portable unit regression uses actual Rich output and injects the affected Windows filesystem exception; the hardware E2E reruns use real build/perf subprocesses. Temporary models, raw logs, and historical evaluation results are not part of this PR. --------- Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Summary
--releaseevaluation for 50 model/task cases across 16 machine-specific EP/device targets, with a precision-selection JSON manifest and Markdown historical evidence links, including NVIDIA DML.--priorityremains P0-P3 with all four enabled by default, and non-release single-model, custom-registry, build-only and baseline modes remain available.winml catalogto the 43 model/task pairs that passed perf on all 16 release targets, keeping the existing display and JSON export formats.Release Contract
--priority,--hf-model,--registry,--task,--group,--model-type,--build-onlyand--update-baselineonly when--releaseis set. Default values are not conflicts.<machine>/<EP>_<device>pair in--output-dir; unrelated ancestor names do not select a target.Target Availability
[SKIP]and return exit code 0 before model selection or result-directory creation.Precision Labels
fp16recipes withquant: nulltofp32without changing their configuration contents; update the manifest and displayed target labels accordingly.fp32link can still point to a historical__fp16directory.--continuedoes not reuse old directory names.QNN Regression Fixes
Large-Model QDQ Fix
EncodeError: Failed to serialize protoafter materializing 2,275,216,132 weight bytes.Catalog Refresh
(model_id, task)pairs selected from the2026-09-14evaluation results: each pair has a booleanperf.passed == trueon all 16 machine-specific EP/device targets, including NVIDIA TensorRT ARM.version/modelsschema, entry fields, EP/device mapping format, CLI table columns, filtering options, and JSON output/save format unchanged.size_mbfield.Validation
56dc59b7: 122 catalog CLI/unit tests passed. The actual CLI JSON output was verified to match the 43 fully passing model/task pairs exactly; editor diagnostics and whitespace checks passed.2ff1732f: 14 affected static-quantization/publication tests passed; scoped Ruff, editor diagnostics and whitespace checks passed.BAAI/bge-reranker-v2-m3 / text-classification / w8a16was rerun throughrun_eval.pyon Intel AI Boost with OpenVINO NPU and passed. Original int32/bool inputs, sequence length 1024 and W8A16 were retained; the final rerun measured 514.429 ms mean latency. Generated result files belong to the separate artifacts workspace, not this code commit.tests/unit/eval/test_run_eval_script.py,tests/unit/export,tests/unit/config,tests/unit/datasets, andtests/unit/quant/calibration.InputTensorSpec.to_tensorcall sites.Limitations
kredor/punctuate-alltemporary-directory error (WinError 145) did not reproduce in local debugging or the original-config forced rebuild. Local DML perf passed on NVIDIA RTX 5070, not Intel GPU, so the Intel GPU failure record remains unchanged. No cleanup error suppression was added.CopyFrom; that unrelated test/implementation was not changed or skipped. The full suite was not rerun for this QDQ follow-up.QDQ Subgraph and CI Follow-up (2026-09-17)