Skip to content

catalog: publish Apple M4 speed cells, and cap weak-machine targets - #225

Merged
cjpais merged 2 commits into
mainfrom
bench/m4-reference
Oct 22, 2026
Merged

cjpais merged 2 commits into
mainfrom
bench/m4-reference

Conversation

@cjpais

@cjpais cjpais commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

No description provided.

The catalog's only Apple reference was an M4 Max, Apple's most expensive
machine, so its numbers were quoted as if they were typical of a Mac. A
base M4 (10-core, 16 GB) is a better baseline for "will this run on my
Mac". Its CPU column also generalizes: measured against paired M4 Max
cells, the M4 is a median 1.54x slower on CPU -- and faster in 19 of 258
cells -- while Metal is a median 2.50x slower, so the difference between
the two machines is almost entirely GPU.

M4 becomes a target in all three publication profiles: 516 new ASR cells
(73 variants x Q8_0/Q4_K_M x jfk/dots, or the single-language clip
equivalents, x cpu/metal) and 12 language-ID cells (3 quants x ru-long
10s/30s x cpu/metal). Every row is stamped db678a0, the commit this was
measured on. The diarizer is not an ASR publication record and refuses
the run as "model does not serve the requested role"; voxtral-small-24b
stays out of scope, see below.

Targets can now declare max_model_gib. A capped target is a weak
reference machine: it is only required to run variants whose Q8_0
publication footprint fits (largest published quant when there is no
Q8_0), and larger models are published on the strong reference alone.
m4 and ryzen-4750u are capped at 5 GiB; m4-max is not capped. The cap is
requirement policy, not a measurement filter, and every consumer already
sees it through profiles.expected_speed(): check.py stops requiring the
cells, run.py --profile stops running them, ingest_perf.py never writes a
cell outside the expected set. The langid and vad drivers now fail with
the policy that excluded a model instead of an empty cell list.

This replaces the three hand-written voxtral-small-24b exceptions
(m4-max cpu, ryzen cpu, ryzen vulkan) with one cap plus the one exception
that is not about size: CPU execution of a 24B model on M4 Max.

The gate is green at 1552 ASR + 36 language-ID + 5 VAD required speed
cells, 0 missing, 0 invalid, 0 extra. test_profiles.py pins the boundary
semantics (inclusive cap, Q8_0 preference with largest-quant fallback,
unknown size never waives) and the shipped policy that keeps both
Voxtral minis and drops the 24B.
Adding the m4 target to asr-publication-v2 gave the machine a display
name, so the sortformer page's provenance line now renders "Apple M4"
instead of the bare slug; re-render it so render.py --check passes.

run.py --profile silently matched no cells for a model outside a capped
target's max_model_gib and exited 0. It now drops such variants up front
with the admission reason (so --dry-run no longer lists them either),
and the existing "no cells to run" error exits non-zero when nothing is
left. This matches the langid and vad drivers.

Run scripts/catalog/test_profiles.py in the catalog workflow so the cap
policy has CI coverage.
@cjpais
cjpais merged commit 41738b5 into main Oct 22, 2026
2 checks passed
cunba-ai pushed a commit to cunba-ai/transcribe.cpp that referenced this pull request Oct 27, 2026
…r#220, handy-computer#223, handy-computer#222, handy-computer#225, handy-computer#224)

- handy-computer#220 causal_lm: alias the packed gate+up projection onto the
  existing weights (no duplicate conversion copies at load)
- handy-computer#223 scripts/bench: memory.py peak-memory harness
- handy-computer#222 moonshine_streaming: bounded encoder memory past the 82 s
  training window and an out-of-bounds read fix; input-cap smoke
  replaces the truncation test
- handy-computer#225 catalog: Apple M4 speed cells published; weak-machine targets
  capped
- handy-computer#224 qwen3-asr nar: encoder graph memory bounded

Fork note: no fork-owned files in the conflict set.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant