card: GSM8K 100q across all three runtimes (98/97/95) + the two-pass budget note
Browse files
README.md
CHANGED
|
@@ -150,6 +150,50 @@ spellings will run to the budget on every request, and it looks like a verbose
|
|
| 150 |
model rather than a broken bundle. Check `generation_config.json`'s `eos_token_id`
|
| 151 |
against what the bundle actually declares.
|
| 152 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
## Gates
|
| 154 |
|
| 155 |
| stage | result |
|
|
|
|
| 150 |
model rather than a broken bundle. Check `generation_config.json`'s `eos_token_id`
|
| 151 |
against what the bundle actually declares.
|
| 152 |
|
| 153 |
+
## Quality: it is the lightest artifact and does not pay for it
|
| 154 |
+
|
| 155 |
+
The speed table above compares three artifacts at three different weights, and Core AI's
|
| 156 |
+
is the smallest. That invites the obvious objection — some of the speed could just be
|
| 157 |
+
fewer bytes. Measured, it isn't:
|
| 158 |
+
|
| 159 |
+
| | weights | GSM8K, 100 questions |
|
| 160 |
+
| --- | ---: | ---: |
|
| 161 |
+
| **Core AI** `int4hu` | **16.35 GB** | **98** |
|
| 162 |
+
| ExecuTorch `k-quant-17G` | 17.9 GB | 97 |
|
| 163 |
+
| MLX 4-bit | 18 GB | 95 |
|
| 164 |
+
|
| 165 |
+
Greedy, same 100 questions, scored by Yardstick's `scripts/parity_gsm8k.py` — the same
|
| 166 |
+
question set, CoT suffix, extractor and scoring the Gemma-4 campaign uses. That file was
|
| 167 |
+
not edited; the two arms it lacks (ExecuTorch via Meta's own `solo_runner`, MLX via
|
| 168 |
+
`mlx_vlm` because `mlx_lm` does not know `muse_glimmer`) are added around it.
|
| 169 |
+
|
| 170 |
+
**Three questions apart is not a resolvable difference at n=100.** The honest reading is
|
| 171 |
+
"no arm is meaningfully worse", not "Core AI wins". Meta's published 1.0% degradation for
|
| 172 |
+
this quant is below what 100 questions can see at all.
|
| 173 |
+
|
| 174 |
+
### Two-pass budget, and why a one-pass number would have been wrong
|
| 175 |
+
|
| 176 |
+
`llm-runner`'s wall time is `5 s + 0.037 x max_tokens` on this bundle — **independent of
|
| 177 |
+
how many tokens are actually generated.** It keeps stepping to the budget after the stop
|
| 178 |
+
token halts output, so a budget wide enough for the longest answer taxes every question.
|
| 179 |
+
(ExecuTorch does not pay for unused budget.)
|
| 180 |
+
|
| 181 |
+
So pass 1 runs at 700 and pass 2 re-runs only the questions that hit it, at 2048. This is
|
| 182 |
+
not just a speed trick — **it changes the result**. At budget 700 Core AI scored 87/100;
|
| 183 |
+
32 of those answers were truncated, and re-running them un-truncated took it to 98. A
|
| 184 |
+
truncated answer is not blank, it is *a wrong number the extractor picks up from the
|
| 185 |
+
middle of the reasoning* — and sometimes a right one by accident. One-pass at 700 would
|
| 186 |
+
have published 87 and called it accuracy.
|
| 187 |
+
|
| 188 |
+
Truncation rates differ per arm (Core AI 32, MLX 26, ExecuTorch 14), so a single fixed
|
| 189 |
+
budget would have penalised the arms that reason longer — a quality table measuring
|
| 190 |
+
verbosity.
|
| 191 |
+
|
| 192 |
+
**Residue, stated:** 3 questions (Core AI), 2 (MLX), 1 (ExecuTorch) still hit 2048 and are
|
| 193 |
+
scored from truncated output. Core AI and MLX also generate noticeably longer answers than
|
| 194 |
+
ExecuTorch for the same questions (median 532 / 453 / 326 tokens); that is unexplained and
|
| 195 |
+
does not show up in the score.
|
| 196 |
+
|
| 197 |
## Gates
|
| 198 |
|
| 199 |
| stage | result |
|