Skip to content

recipe(vitpose): add SynthPose Base CPU recipes#1135

Draft
ssss141414 wants to merge 2 commits into
mainfrom
ssss141414/add-stanfordmimi-synthpose-vitpose-recipe
Draft

recipe(vitpose): add SynthPose Base CPU recipes#1135
ssss141414 wants to merge 2 commits into
mainfrom
ssss141414/add-stanfordmimi-synthpose-vitpose-recipe

Conversation

@ssss141414

@ssss141414 ssss141414 commented Jul 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds CPU fp32 and genuine fp16 support for stanfordmimi/synthpose-vitpose-base-hf, a top-down 52-keypoint human-pose model. Revised scope is Effort L2 / Goal L2 / Outcome L2: two recipes correct the processor-derived graph-input range, and a model-agnostic perf fix forwards persisted ranges into dummy-input generation. Both CPU tuples reached L2 PASS against pinned PyTorch eager; task evaluation remains CLI-BLOCKED because the available default is COCO-17, not this checkpoint's 52-keypoint layout.

Model metadata

What the model does

SynthPose ViTPose Base consumes an RGB person crop derived from an externally supplied person bounding box and emits 52 heatmaps: 17 COCO keypoints plus 35 motion-capture/anatomical markers for denser kinematic analysis. Confidence: verified from the pinned model card and checkpoint, configuration, and exported I/O contract.

Primary user stories

  • Supply an image and detected person boxes to obtain 52 image-space keypoint coordinates and confidence scores for markerless motion capture and kinematic analysis.
  • Supply person crops to obtain the standard 17 COCO joints plus 35 denser anatomical markers for visualization or downstream biomechanical analysis.

Both are verified from the pinned model card.

Supported tasks

  • keypoint-detection ??? verified across the checkpoint pipeline tag, Transformers VitPoseForPoseEstimation / VitPoseImageProcessor, Optimum's VitPoseOnnxConfig, and WinML's existing VitPose mapping.

Model architecture

VitPoseForPoseEstimation (90,003,508 parameters)
????????? ViTPose backbone
???   ????????? Patch projection: RGB 256x192 -> 192 tokens x 768 (16x16 patches)
???   ????????? Learned positional embeddings
???   ????????? Encoder block x 12
???   ???   ????????? LayerNorm -> self-attention (12 heads, head width 64) -> residual
???   ???   ????????? LayerNorm -> MLP (768 -> 3072 -> 768, GELU) -> residual
???   ????????? Final LayerNorm -> feature map [B,768,16,12]
????????? Classic pose decoder
???   ????????? ConvTranspose 768 -> 256, upsample to 32x24 + BatchNorm + ReLU
???   ????????? ConvTranspose 256 -> 256, upsample to 64x48 + BatchNorm + ReLU
???   ????????? 1x1 Conv 256 -> 52 heatmaps [B,52,64,48]
????????? Runtime-only VitPoseImageProcessor post-processing:
    heatmaps + person boxes -> 52 (x,y,score) keypoints
  • Source/confidence: pinned checkpoint configuration and Transformers 4.57.6 VitPoseForPoseEstimation source (verified).

Validation and support evidence

Baseline

The frozen recipe-free baseline is clean origin/main commit e7509b1e908c74beff0a5655b8f8d7de69c5afae, WinML 0.2.0. Exact provenance outputs were:

git rev-parse HEAD
> e7509b1e908c74beff0a5655b8f8d7de69c5afae

winml --version
> winml, version 0.2.0

Recipe-free build exited 0, passed ONNX checking, and produced pixel_values float32[1,3,256,192] -> heatmaps float32[1,52,64,48], 423 nodes, opset 17. The frozen baseline perf run used 10 warmups and 100 measured iterations: mean 90.12 ms, p50 88.63 ms, throughput 11.1 samples/s, model-load RSS delta 354.13 MB, total RSS delta 379.67 MB. A fresh detached recheck at the same immutable SHA again exited 0 (Build complete in 40.3s) and measured mean/p50 96.643/96.707 ms, 10.35 samples/s, and 379.84 MB total RSS delta.

Auto-config exited 0 and resolved VitPoseForPoseEstimation, keypoint-detection, input pixel_values [1,3,256,192] float32, output heatmaps, CPU/CPUExecutionProvider; it emitted value_range: [0,1]. The fp16 config also exited 0 and emitted the generated fp16 conversion declaration. [0,1) was the unrefined dummy range: pinned VitPoseImageProcessor metadata derives valid float32 values from -2.1179039478302 through 2.640000104904175, and the semantic crop observed -2.1179039478302 through 2.5702831745147705.

Optimum probe: keypoint-detection is vendor-supported before and after WinML (VENDOR+OVERRIDE; WinML adds no task). Baseline/L3 eval is CLI-BLOCKED: the absent default dataset is COCO-17, while this checkpoint emits 52 heatmaps and has no supplied pinned 52-keypoint dataset or defensible 52-value OKS sigma vector.

Goal

The reviewer-discovered range contradiction caused an explicit charter re-issue from L0/L2/L0 to Effort L2 / Goal L2 / Outcome L2. Success requires both CPU fp32 and fp16 tuples to pass L0 structure and persisted-range checks, L1 default plus processor-semantic perf, and L2 PyTorch heatmap plus 52-keypoint parity. Coverage is full for the committed CPU precision plan; there are no deferred tuples.

Outcome

Shipped tier: L2. Highest reached: L2 PASS. Coverage: full. Producer shipment commit: ee6f4072b3d280f7e1e607bf48fb6838f11a06aa. The exact four-file generalized fix is:

  • examples/recipes/stanfordmimi_synthpose-vitpose-base-hf/cpu/cpu/keypoint-detection_fp32_config.json
  • examples/recipes/stanfordmimi_synthpose-vitpose-base-hf/cpu/cpu/keypoint-detection_fp16_config.json
  • src/winml/modelkit/commands/perf.py
  • tests/unit/commands/test_perf_cli.py

No models 5???8, README, skill, scratch, or unrelated files are changed. Model knowledge is durable in Lane A commits ef623cc54ee8f75217e0abaaa85947b4aba1c1ee and refreshed 19db1325e38a0c60cb4739b866a753ef93e4e007, both on origin/shzhen/model-breakdown-skill and limited to VitPose knowledge.

No methodology friction observed. The generalized defect is already covered by _meta-017; no new methodology finding or skill edit was needed.

Per-EP/device/precision results ??? including perf and eval data

Tier EP / device Precision Verdict Evidence
L0 CPUExecutionProvider / cpu fp32 PASS Fresh build; ONNX checker PASS; 423 nodes; persisted range exact
L0 CPUExecutionProvider / cpu fp16 PASS Fresh build; ONNX checker PASS; 425 nodes; 90,004,536 FLOAT16 and 0 FLOAT initializer elements; persisted range exact
L1 CPUExecutionProvider / cpu fp32 PASS Default and processor-semantic perf completed; generated values used both negative and positive configured values
L1 CPUExecutionProvider / cpu fp16 PASS Default and processor-semantic perf completed; generated values used both negative and positive configured values
L2 CPUExecutionProvider / cpu fp32 PASS Pinned PyTorch eager parity; 52/52 heatmap peaks match
L2 CPUExecutionProvider / cpu fp16 PASS Pinned PyTorch eager parity; 52/52 heatmap peaks match

Perf

All rows use 10 warmups and 100 measured iterations; VRAM deltas are 0 MB on CPU.

Input Precision Mean p50 Throughput RSS total delta
Generic persisted-range fp32 90.082 ms 88.513 ms 11.10 samples/s 380.80 MB
Generic persisted-range fp16 120.723 ms 118.815 ms 8.28 samples/s 390.76 MB
Processor-semantic crop fp32 91.666 ms 89.780 ms 10.91 samples/s 381.02 MB
Processor-semantic crop fp16 119.135 ms 117.704 ms 8.39 samples/s 392.17 MB

Generic fp32 generated range: min -2.117901563644409, max 2.639974355697632; generic fp16: min -2.1178860664367676, max 2.6399428844451904. Both remain inside [-2.1179039478302, 2.640000343322754) and contain negative and positive values.

Numeric parity

Reference: transformers.VitPoseForPoseEstimation PyTorch eager at revision e1f00dc65c23aedd629089ba44b46154e84a7778, using the identical processor crop and person box [70,115,280,250].

Precision Heatmap cosine Heatmap max abs Peak-grid matches Keypoint max Euclidean error
fp32 0.9999999999998754 8.940696716308594e-07 52/52 3.411968959808029e-05 px
fp16 0.9999999266198872 0.0007346272468566895 52/52 0.012464815032744195 px

Eval

EP / device Precision Verdict Dataset / revision / metric Exact blocker
CPUExecutionProvider / cpu fp32 CLI-BLOCKED none / none / none Default local COCO dataset absent and structurally COCO-17; model emits 52 heatmaps; no compatible pinned dataset or defensible 52-value OKS sigma vector supplied
CPUExecutionProvider / cpu fp16 CLI-BLOCKED none / none / none Same blocker; exact eval attempt exited 1 and produced no result JSON

Delta

Both recipes change /export/input_tensors/0/value_range from auto-config [0,1] to processor-derived high-exclusive [-2.1179039478302,2.640000343322754]. The fp16 recipe additionally changes /quant from null to the generated fp16 declaration; fp32 otherwise retains the generated config.

generate_random_inputs() now forwards every persisted io_config.input_value_ranges entry without model-ID/model-type branches. Float bounds remain [low, high); integer high-exclusive bounds are adapted to the legacy inclusive NumPy generator without admitting high; unspecified floats retain [0,1). Regressions cover a negative [-9,-8) float sentinel, singleton/exclusive integer bounds, unspecified-float fallback, and a real WinMLSession loading a co-located build config. The focused no-recipe gate passed 80 tests; the final relevant gate passed 363, skipped 6, and xfailed 1; changed-file Ruff, pre-commit, and diff checks passed. At final head ee6f4072b3d280f7e1e607bf48fb6838f11a06aa, the test-local ONNX imports are consolidated to from onnx import TensorProto, helper, save and onnx.save(...) is replaced by save(...) with no semantic change; the remediation-focused 80 tests, file Ruff, file pre-commit, diff check, and GitHub CodeQL/check rollup passed. The production recipe README remains untouched.

Analyze summary ??? component level and op level

ANALYZE-PARTIAL-SUCCESS: public rules v0.2.0 produced complete 11/11 result payloads for each artifact, while command exit 1 reflects partial/unknown classifications. This is static rule analysis, not runtime execution; every row reported runtime support false.

Component-level summary

Artifact Architecture coverage Mapping Actionable EP findings
fp32 embeddings; 12x encoder attention/MLP; final LayerNorm; token-to-map reshape; 2x deconvolution + 52-heatmap head 423 mapped, 0 partial, 0 unmapped QNN NPU/GPU partial: Div, Erf, Add, Mul; none unsupported
fp16 same regions plus I/O Casts 425 mapped, 0 partial, 0 unmapped QNN NPU/GPU partial: Div, Erf, Add, Mul; none unsupported

Op-level summary

Artifact Graph Dominant ops EP roll-up
fp32 423 ops / 13 types Add 110; MatMul 96; Reshape 50; Transpose 50; Mul 48; LayerNormalization 25 QNN NPU/GPU partial as above; TensorRT RTX and OpenVINO CPU/GPU/NPU unknown for ConvTranspose
fp16 425 ops / 14 types Add 110; MatMul 96; Reshape 50; Transpose 50; Mul 48; LayerNormalization 25; Cast 2 Same actionable/unknown findings

CPU, CUDA, MIGraphX, DML, and VitisAI are all-unknown under this rules bundle. There are no component-mapping gaps.

Reproduce commands

Portable public commands for the exact baseline/config gates and shipped artifacts:

$MODEL='stanfordmimi/synthpose-vitpose-base-hf'
$OUT='temp/synthpose-vitpose-repro'
New-Item -ItemType Directory -Force -Path $OUT | Out-Null

git rev-parse HEAD
winml --version

# Recipe-free baseline and starting auto-config.
winml config -m $MODEL --task keypoint-detection --ep cpu --device cpu --no-compile -o $OUT/baseline_config.json --overwrite --no-color
winml build -m $MODEL -o $OUT/baseline --ep cpu --device cpu --no-analyze --no-optimize --no-quant --no-compile --rebuild --no-color
winml perf -m $OUT/baseline/model.onnx --ep cpu --device cpu --iterations 100 --warmup 10 --memory --output $OUT/baseline_perf.json --overwrite --format json --no-color

# Both exact config-vs-recipe gates.
winml config -m $MODEL --task keypoint-detection --ep cpu --device cpu --precision fp32 --no-compile -o $OUT/generated_fp32.json --overwrite --no-color
winml config -m $MODEL --task keypoint-detection --ep cpu --device cpu --precision fp16 --no-compile -o $OUT/generated_fp16.json --overwrite --no-color

winml build -c examples/recipes/stanfordmimi_synthpose-vitpose-base-hf/cpu/cpu/keypoint-detection_fp32_config.json -m $MODEL -o $OUT/fp32 --ep cpu --device cpu --precision fp32 --no-analyze --no-compile --rebuild --no-color
winml perf -m $OUT/fp32/model.onnx --ep cpu --device cpu --precision fp32 --iterations 100 --warmup 10 --memory --output $OUT/perf_fp32.json --overwrite --format json --no-color
winml eval -m $OUT/fp32/model.onnx --model-id $MODEL --task keypoint-detection --ep cpu --device cpu --precision fp32 --output $OUT/eval_fp32.json --overwrite --no-color
winml analyze --model $OUT/fp32/model.onnx --ep all --device all --htp-metadata $OUT/fp32/export_htp_metadata.json --output $OUT/analyze_fp32.json --overwrite --format json --no-color

winml build -c examples/recipes/stanfordmimi_synthpose-vitpose-base-hf/cpu/cpu/keypoint-detection_fp16_config.json -m $MODEL -o $OUT/fp16 --ep cpu --device cpu --precision fp16 --no-analyze --no-compile --rebuild --no-color
winml perf -m $OUT/fp16/model.onnx --ep cpu --device cpu --precision fp16 --iterations 100 --warmup 10 --memory --output $OUT/perf_fp16.json --overwrite --format json --no-color
winml eval -m $OUT/fp16/model.onnx --model-id $MODEL --task keypoint-detection --ep cpu --device cpu --precision fp16 --output $OUT/eval_fp16.json --overwrite --no-color
winml analyze --model $OUT/fp16/model.onnx --ep all --device all --htp-metadata $OUT/fp16/export_htp_metadata.json --output $OUT/analyze_fp16.json --overwrite --format json --no-color

uv run pytest tests/unit/commands/test_perf_cli.py -q

@ssss141414 ssss141414 added the model-scale-by-skill Model support PR created or maintained by the adding-model-support skill label Jul 19, 2026
@ssss141414

Copy link
Copy Markdown
Contributor Author

Independent reviewer verdict: REQUEST_CHANGES

Scope reviewed: model 4 only (stanfordmimi/synthpose-vitpose-base-hf); models 5–8 were not reviewed.

Blocking findings

  1. Explainer — restore the mandatory public baseline/config reproduction evidence. The current Reproduce commands start at recipe builds. They omit the recipe-free baseline command, both winml config commands used for the recipe-vs-autoconfig comparison, winml --version, and git rev-parse HEAD. Add those exact public commands and preserve the observed baseline/config outcomes. This is required by the reviewer contract's baseline-probe and recipe-vs-config gates.

  2. Explainer — add the mandatory methodology-evolution declaration and durable Lane A reference. The learner handoff says no_friction: true, but the PR Outcome is silent. Add the exact declaration “No methodology friction observed” and cite durable Lane A commit ef623cc54ee8f75217e0abaaa85947b4aba1c1ee, which is present on origin/shzhen/model-breakdown-skill and contains the model-4-only VitPose findings.

  3. Producer (planner if this generalizes) — resolve the recipe input-range contradiction. Both recipes declare pixel_values.value_range: [0,1], while the exact VitPoseImageProcessor output used by perf/L2 was float32[1,3,256,192] with observed min -2.1179039478302 and max 2.5702831745147705. Correct the recipes to a processor-derived representative normalized range, or provide a technically sufficient public/internal rationale proving [0,1] is intentionally the graph-input domain rather than an unrefined autoconfig dummy range. If processor metadata supports a safe class-wide rule, route back to planner for re-tiering; otherwise document the checkpoint-specific delta. Re-run config-diff, builds, perf, and L2 after any recipe change.

Independently verified at bed303bcc35d9641e1ef2011483554471de07a78

  • Main freshness/scope: origin/main=e7509b1e908c74beff0a5655b8f8d7de69c5afae, behind count 0; diff is exactly the two CPU recipes; production README unchanged.
  • Threads: 0 total, 0 open; 0 inline comments and 0 conversation comments; GraphQL page complete.
  • Config/default/build: fresh fp32/fp16 config generation exactly equaled each recipe; recipe-free default build and both recipe builds emitted Build complete and produced models.
  • Structure/fp16: fp32 is 423 nodes with pixel_values float32[1,3,256,192] -> heatmaps float32[1,52,64,48]; fp16 is 425 nodes, all 90,004,536 floating initializer elements are FLOAT16, zero FLOAT, two Casts, and external data is 180,004,864 vs 360,017,920 bytes. Perf printed Model Precision: fp16.
  • Fresh perf: fp32 mean/p50 97.158/99.367 ms, 10.29 samples/s, total RSS delta 379.35 MB; fp16 mean/p50 118.636/116.206 ms, 8.43 samples/s.
  • Fresh L2: fp32/fp16 heatmap cosine 0.9999999999998754 / 0.9999999266198872, max abs 8.940696716308594e-07 / 0.0007346272468566895; both matched 52/52 peaks and postprocessed 52 keypoints, max errors 3.411968959808029e-05 / 0.012464815032744195 px.
  • Eval blocker: both exact eval commands reproduced the missing coco_keypoints_val2017 dataset failure. Source inspection confirms defaults are COCO-17 and count validation rejects 52 predictions without a matching pinned 52-keypoint dataset, names, and defensible 52-value OKS sigmas.
  • Analyze/public command: fresh public-rules --ep all --device all --htp-metadata runs emitted 11 targets for each precision (423/13 and 425/14 ops/types). The full set is NvTensorRTRTX GPU, CUDA GPU, MIGraphX GPU, QNN NPU/GPU, OpenVINO NPU/GPU/CPU, DML GPU, CPU CPU, and VitisAI NPU.
  • HTP/Lane A: fresh HTP metadata shows 90,003,508 parameters, 78/197 traced modules, 156 execution steps, and top-level VitPoseBackbone/VitPoseClassicDecoder; Lane A records these plus top ops Add=110, MatMul=96, Reshape=50/Transpose=50 and the full EP set.
  • Quality/shipment: both recipe pre-commit checks passed; all GitHub CI checks including CodeQL are green; PR remains Draft with model-scale-by-skill; no local paths appear in the body. Local full-tree ruff has six unchanged-script diagnostics, but the PR has no Python diff and GitHub lint is green.

Please preserve Draft state while addressing these owner-routed items.

@ssss141414
ssss141414 force-pushed the ssss141414/add-stanfordmimi-synthpose-vitpose-recipe branch from bed303b to 04f84f8 Compare July 19, 2026 08:11
Comment thread tests/unit/commands/test_perf_cli.py Fixed
@ssss141414

Copy link
Copy Markdown
Contributor Author

Resolved reviewer comment 5014826762 for model 4 only.

The PR body now reflects the revised L2/L2/L2 charter and exact four-file generalized fix at 04f84f85e3a8c1084d8c0e6849f1dbe799417651: processor-derived high-exclusive input range, generic persisted-range forwarding and regressions, refreshed CPU perf/L2/analyze/eval-blocker evidence, exact baseline provenance outputs, the recipe-free baseline plus both winml config commands, and portable reproduction commands. It also includes the mandatory No methodology friction observed. declaration and durable Lane A citations ef623cc54ee8f75217e0abaaa85947b4aba1c1ee and 19db1325e38a0c60cb4739b866a753ef93e4e007. Models 5–8 were not entered.

@ssss141414

Copy link
Copy Markdown
Contributor Author

Independent reviewer verdict: REQUEST_CHANGES

Scope: PR #1135, model 4 only (stanfordmimi/synthpose-vitpose-base-hf). Models 5–8 were not reviewed.

Blocking finding

  • Producer — close the unresolved CodeQL import-hygiene thread. The complete conversation scan found 1 inline comment, 2 conversation comments, 1 review thread, 1 open thread, with GraphQL pagination complete. The open, non-outdated thread is discussion_r3610177908 at tests/unit/commands/test_perf_cli.py:931: the new test imports onnx and also imports TensorProto, helper from onnx. I independently confirmed both import forms are present. Use one import form, rerun the focused test/lint/CodeQL gates, reply to the thread, and resolve it. The reviewer contract is fail-closed on any unresolved thread, so this is the only remaining approval blocker.

Prior blockers independently re-verified as resolved at 04f84f85e3a8c1084d8c0e6849f1dbe799417651

  • Public provenance/commands: the body now includes exact git rev-parse HEAD, winml --version, recipe-free build/perf, both fp32/fp16 winml config commands, recipe builds, perf, eval, analyze, and focused pytest commands. Baseline SHA equals current origin/main (e7509b1e908c74beff0a5655b8f8d7de69c5afae), behind count 0.
  • Declaration/Lane A: exact No methodology friction observed. declaration is present. Remote Lane A commit 19db1325e38a0c60cb4739b866a753ef93e4e007 exists, changes only the VitPose knowledge file, and records the revised processor-range/generalized-perf finding.
  • Four-file scope: exactly two recipes, src/winml/modelkit/commands/perf.py, and tests/unit/commands/test_perf_cli.py; no models 5–8, README, skill, scratch, or unrelated files.
  • Corrected range/general implementation: recipes use high-exclusive [-2.1179039478302, 2.640000343322754). Generic generation forwards persisted per-input ranges without model branching, preserves unspecified float [0,1), and adapts integer high-exclusive bounds. Fresh proof generated negative and positive values inside the configured range for both artifacts; generic negative-float, singleton-integer, and fallback probes passed.
  • Tests/lint: focused perf suite passed 80/80. Full-tree Ruff has the same six diagnostic codes on current main and none in the changed files; GitHub lint is green.
  • Fresh builds/artifacts: recipe-free baseline and both recipe builds emitted Build complete; ONNX checker passed. fp32: 423 nodes, 360,017,920-byte external data, 90,004,536 FLOAT initializer elements. fp16: 425 nodes, 180,004,864-byte external data, 90,004,536 FLOAT16 and zero FLOAT initializer elements; perf detected fp16.
  • Fresh perf: default fp32 mean/p50 86.514/85.352 ms, 11.56 samples/s; semantic fp32 82.701/80.036 ms, 12.09 samples/s; default fp16 114.033/112.270 ms, 8.77 samples/s; semantic fp16 112.836/110.046 ms, 8.86 samples/s. All four exited 0 with memory output.
  • Fresh L2: fp32/fp16 heatmap cosine 0.9999999999998754 / 0.9999999266198872, max abs 8.94e-07 / 7.346e-04; both matched 52/52 peaks and postprocessed 52 keypoints.
  • Fresh analyze/eval: public-rules analyze produced parseable 11/11 target payloads for each precision with expected partial-success exit 1. Both eval attempts reproduced the absent/incompatible default coco_keypoints_val2017 blocker and produced no result JSON.
  • CI/shipment/leaks: all nine reported GitHub checks are successful. PR remains Draft with model-scale-by-skill; body has no local scratch paths.

Preserve Draft state. After the single open thread is fixed and resolved, re-review can proceed to APPROVE.

@ssss141414

Copy link
Copy Markdown
Contributor Author

Resolved reviewer comment 5015066676 for model 4 only at ee6f4072b3d280f7e1e607bf48fb6838f11a06aa. The ONNX import is consolidated with no semantic change; producer focused tests (80 passed), file Ruff, file pre-commit, and diff gate passed, and the current GitHub check rollup is fully successful including CodeQL. Replied to the inline finding: #1135 (comment). GraphQL thread PRRT_kwDORaJc5s6SECxT is resolved. The PR body was updated only for the current shipment head and this final delta/gate note; Draft state and model-scale-by-skill are preserved. Models 5–8 were not entered.

@ssss141414

Copy link
Copy Markdown
Contributor Author

Independent reviewer verdict: APPROVE

Scope: PR #1135, model 4 only (stanfordmimi/synthpose-vitpose-base-hf). Models 5–8 were not reviewed.

Final re-entry gate

  • Exact head: local detached checkout, remote PR head, and shipment reference all resolve to ee6f4072b3d280f7e1e607bf48fb6838f11a06aa. Commit 04f84f85e3a8c1084d8c0e6849f1dbe799417651 is its ancestor.
  • CodeQL remediation: the only post-evidence file delta is tests/unit/commands/test_perf_cli.py. The mixed imports were consolidated to from onnx import TensorProto, helper, save, and onnx.save(...) became save(...); no recipe or production-code delta followed the prior model verification.
  • Independent local gates at final head: uv run pytest tests/unit/commands/test_perf_cli.py -q80 passed; file pre-commit → PASS. Full uv run ruff check reports the same six diagnostic locations as clean current origin/main, all outside changed files; the PR introduces no Ruff regression.
  • GitHub checks enumerated: Analyze (Python), lint, test (analyze), test (models), test (optim), test (commands), test (remaining), CodeQL, and license/cla are all COMPLETED / SUCCESS.

Conversation gate

  • Enumerated 2 inline comments, 4 conversation comments, 2 submitted reviews, and 1 review thread, with pagination complete.
  • Open review threads: 0.
  • Thread PRRT_kwDORaJc5s6SECxT / discussion_r3610177908 is resolved and outdated. The producer replied at discussion_r3610226707 with commit ee6f4072; the independent diff and passing CodeQL rollup confirm the stated fix.

Prior evidence and engineering review

  • Baseline remains current: cited baseline e7509b1e908c74beff0a5655b8f8d7de69c5afae equals fetched origin/main; behind count 0.
  • Prior independently reproduced L0–L2 evidence remains applicable because 04f84f85..ee6f4072 changes only the test import: both recipe builds passed; default and processor-semantic perf passed for fp32/fp16; persisted ranges generated valid negative and positive values; ONNX structure is pixel_values float32[1,3,256,192] -> heatmaps float32[1,52,64,48]; fp16 has 90,004,536 FLOAT16 and 0 FLOAT initializer elements with external data approximately half fp32; PyTorch parity reached cosine 0.9999999999998754 fp32 and 0.9999999266198872 fp16 with 52/52 peak matches.
  • L3 remains honestly CLI-BLOCKED: the available default is COCO-17 while this checkpoint emits 52 heatmaps and has no pinned compatible dataset/defensible 52-value OKS sigma vector.
  • Analyze evidence remains complete and parseable for both artifacts: 11/11 requested EP payloads, 423/425 mapped nodes, zero unmapped nodes, component and op summaries present; nonzero command exits are disclosed as ANALYZE-PARTIAL-SUCCESS.
  • Engineering scope is right-sized for revised Effort L2 / Goal L2 / Outcome L2: exactly two recipes, generic persisted-range forwarding in src/winml/modelkit/commands/perf.py, and focused regression coverage. The implementation has no model-ID/type branch, preserves unspecified float fallback, and adapts high-exclusive integer ranges to the legacy inclusive generator.
  • Recipe review passed: processor-derived high-exclusive range is consistent across fp32/fp16; fp16 quant declaration and artifact evidence agree; production recipe README is unchanged. No model 5–8, skill, scratch, or unrelated paths are present.
  • PR body passes the required hierarchy and evidence sections; it names current main and final head, records baseline/config/reproduction commands, recipe-vs-config delta, full CPU tuple matrix, perf/numeric/eval/analyze evidence, exact four-file scope, durable Lane A commits ef623cc5 and 19db1325, and No methodology friction observed.
  • Both cited Lane A commits resolve remotely and modify only the VitPose knowledge file.

Shipment state

  • PR remains OPEN / DRAFT with label model-scale-by-skill.
  • Coverage is full for the committed CPU fp32/fp16 precision plan; deferred tuples: none.
  • The draft state must be preserved; this approval does not promote the PR to ready-for-review.

APPROVE.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

model-scale-by-skill Model support PR created or maintained by the adding-model-support skill

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants