CI: gate MTP acceptance rate alongside gsm8k accuracy#1557
Merged
Conversation
Contributor
🏷️ CI GuideRuns automatically on every eligible PR before approval:
Heavy model tests:
|
The native ATOM accuracy pipeline already scrapes the MTP/spec-decode acceptance rate from the server log during the gsm8k run (atom_ci_metadata.mtp_acceptance_rate) and publishes it to the dashboard, but nothing gates on it. gsm8k accuracy alone cannot guard MTP: speculative decoding is lossless w.r.t. the target model, so a broken draft head leaves accuracy unchanged and only craters acceptance. Add a "Check MTP acceptance rate" step to atom-test.yaml that reads the already-recorded acceptance rate from the accuracy result JSON and fails the job when it drops below a per-model threshold (or is missing, which signals MTP stats were never emitted). No extra inference run — it reuses the same gsm8k pass as the accuracy check. Thresholds (mtp_accept_threshold, fraction 0-1) are added to all 10 ATOM-backend spec-decode entries in models_accuracy.json, set to each model's dashboard-observed minimum minus 1.5 points. FP4 MTP uses its healthy pre-regression minimum, so the current ~36% drop is caught rather than baked in. The catalog schema gains mtp_accept_threshold / mtp_per_pos_threshold so validate_catalog.py accepts the new fields. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8cfb910 to
a010ce8
Compare
valarLip
approved these changes
Jul 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a MTP acceptance-rate gate to the native ATOM accuracy CI (
atom-test.yaml), so a spec-decode regression fails the job instead of silently passing.Why
The pipeline already scrapes MTP/spec-decode acceptance from the server log during the gsm8k run (
atom_ci_metadata.mtp_acceptance_rate) and publishes it to the benchmark dashboard, but nothing gates on it. gsm8k accuracy alone cannot guard MTP: speculative decoding is lossless w.r.t. the target model, so a broken draft head leaves accuracy unchanged and only craters acceptance/throughput.Concrete example this catches:
DeepSeek-R1-0528-FP4 MTPwas stable at ~61% from 6/16 through 7/8, then dropped to ~36% on 2026-07-08 and has stayed there — invisible to the accuracy gate.Changes
.github/workflows/atom-test.yaml— newCheck MTP acceptance ratestep afterCheck accuracy test results. Reuses the same gsm8k pass (no extra inference run), reads the recorded rate, fails if it drops below the per-model threshold or is missing (missing = MTP stats never emitted = treat as regression). Only runs for models that declaremtp_accept_threshold..github/benchmark/models_accuracy.json—mtp_accept_thresholdadded to all 10 ATOM-backend spec-decode entries, set to each model's dashboard-observed minimum minus 1.5 points. FP4 MTP uses its healthy pre-regression minimum, so the current ~36% is caught rather than baked in..github/benchmark/schema/accuracy_catalog.schema.json— addsmtp_accept_threshold/mtp_per_pos_thresholdsovalidate_catalog.pyaccepts the new fields.Thresholds (fraction 0-1, = hist min − 1.5 pts)
*healthy pre-regression minimum. Run-to-run jitter is <1%, so 1.5pt headroom avoids false failures while catching real draft-head breaks.
Test
python .github/scripts/validate_catalog.py→ all catalogs OK.🤖 Generated with Claude Code