Skip to content

QVAC-27393 fix[speech]: ship the Adreno OpenCL q8_0 GEMM fix (ggml-speech 2026-10-23, speech-cpp 2026-10-23#2) - #5326

Merged
freddy311082 merged 3 commits into
mainfrom
QVAC-27393/ggml-speech-adreno-q8-fix
Oct 23, 2026
Merged

freddy311082 merged 3 commits into
mainfrom
QVAC-27393/ggml-speech-adreno-q8-fix

Conversation

@Zbig9000

@Zbig9000 Zbig9000 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Why

All four speech addons override ggml-speech at 2026-10-07#1. In that version the default Adreno q8_0 prefill GEMM keeps its sums in fp16, so a dot product past 65504 comes back as inf. TranscribePsy's first feed-forward block reaches 66k on some 60 s windows; the inf becomes NaN and attention spreads it over the window. On a Galaxy S25 GPU, long recordings lost most of their text after the first window: 54 % WER on a 374 s English recording where the CPU is at 0 %.

The fix is tetherto/qvac-ext-ggml#129, published by tetherto/qvac-registry-vcpkg#446 as ggml-speech 2026-10-23. With it, the S25's OpenCL transcripts equal its CPU transcripts on English and French recordings, and differ by two words at one language switch on the mixed ones, at 1.5 % more encoder time. The measurements are in tetherto/qvac-fabric-speech.cpp#365.

speech-cpp 2026-10-23#2 (tetherto/qvac-registry-vcpkg#447) requires ggml-speech >= 2026-10-23, the same version, so the addons move to it in the same step.

Changes

Verification

  • node .github/scripts/check-speech-ggml-lockstep.mjs: passes. All four pin ggml-speech 2026-10-23 and speech-cpp 2026-10-23#2, and every prebuild triplet plans the same ggml-speech:
    • arm64-android: [core,opencl,vulkan]
    • Apple: [core,metal]
    • Linux and Windows: [core,vulkan]
  • node --test .github/scripts/test/speech-ggml.test.mjs .../check-speech-ggml-builds.test.mjs: 26/26.
  • build-backends tests: asr-ggml 12/12, audiogen-ggml 5/5, tts-ggml 2/2. The bci-whispercpp one only asserts the manifest shape (one override, no floors).
  • Real vcpkg install --triplet arm64-android of asr-ggml's manifest (NDK 29, binary cache off) built speech-cpp[whisper,parakeet,vulkan,opencl] against ggml-speech[core,opencl,vulkan] 2026-10-23. That build was at speech-cpp 2026-10-20#1; for 2026-10-23#2 this PR's prebuild CI is the build check.

Interplay with open PRs

🤖 Generated with Claude Code

…eech 2026-10-23)

The speech addons override ggml-speech at 2026-10-07#1, whose default
Adreno q8_0 prefill GEMM keeps its sums in fp16. A dot product past 65504
comes back as inf; TranscribePsy's first feed-forward block reaches 66k on
some 60 s windows, the inf becomes NaN and attention spreads it over the
window, so long recordings on Adreno OpenCL lost most of their text after
the first window. qvac-ext-ggml#129 fixed the kernel and registry #446
published it as ggml-speech 2026-10-23.

- asr-ggml, audiogen-ggml, bci-whispercpp, tts-ggml: ggml-speech override
  2026-10-07#1 -> 2026-10-23 and qvac["ggml-speech"] to match, in lockstep.
  The override wins over speech-cpp's version>= floor, so moving it is what
  ships the fix. speech-cpp stays at 2026-10-20#1.
- The jump also brings ggml-speech 2026-10-19 (Adreno KQ/KQV image kernels
  no longer miscompute attention over 32+ query tokens with unpadded
  lengths) and 2026-10-20 (WebGPU backend, an opt-in feature these addons
  do not enable). 2026-10-07#2 only kept Hexagon out of the build.
- CHANGELOG entries under [Unreleased] in all four.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Zbig9000
Zbig9000 requested review from a team as code owners October 23, 2026 12:43
@github-actions

github-actions Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Review Status

Current Status: ❌ PENDING
Approvals so far: none

Pending reviews: Needs 1 Management or Team Lead, and 1 more from Management, Team Lead, or Member.

@github-actions

Copy link
Copy Markdown
Contributor

License compliance — clean

No new dependency license findings in this PR.

Warn-only (shadow) mode — this check does not block merges yet.

Updated automatically by the canonical license compliance workflow.

NOTICE presence (advisory)

Missing NOTICE (advisory, does not block):

  • ./.github/actions/release-merge-guard
  • ./packages/embed-llamacpp/benchmarks/server
  • ./packages/embed-llamacpp/benchmarks/performance
  • ./packages/fabric/test/integration
  • ./packages/asr-ggml/benchmarks/server
  • ./packages/inference-addon-cpp/mobile
  • ./packages/llm-llamacpp/benchmarks/server
  • ./packages/llm-llamacpp/benchmarks/performance
  • ./packages/vla-ggml/sim/server
  • ./packages/sdk/e2e
  • ./docs/website

mexxik
mexxik previously approved these changes Oct 23, 2026
GustavoA1604
GustavoA1604 previously approved these changes Oct 23, 2026
…23#2

speech-cpp 2026-10-23#2 (registry #447) requires ggml-speech >= 2026-10-23,
the version this PR already overrides, so all four addons move their
speech-cpp override from 2026-10-20#1 in lockstep.

The CHANGELOGs record what the range adds to the prebuilds: the Core ML
diarizer sidecars, Mosaic loading and the Nemotron 3 Diarization loader fix
(asr-ggml), the Parler-TTS Core ML DAC sidecar and non-finite logit error
(tts-ggml), and the whisper fit capacity query (asr-ggml, bci-whispercpp).
Its Hexagon, WebGPU and MiniMax Core ML routes are not built: the port
refuses Hexagon ggml, webgpu is opt-in and audiogen-ggml does not enable
coreml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Zbig9000
Zbig9000 dismissed stale reviews from GustavoA1604 and mexxik via 21b78a8 October 23, 2026 13:20
@Zbig9000 Zbig9000 changed the title QVAC-27393 fix[speech]: ship the Adreno OpenCL q8_0 GEMM fix (ggml-speech 2026-10-23) QVAC-27393 fix[speech]: ship the Adreno OpenCL q8_0 GEMM fix (ggml-speech 2026-10-23, speech-cpp 2026-10-23#2) Oct 23, 2026
@freddy311082
freddy311082 merged commit e409ce5 into main Oct 23, 2026
83 checks passed
@freddy311082
freddy311082 deleted the QVAC-27393/ggml-speech-adreno-q8-fix branch October 23, 2026 13:39
Zbig9000 added a commit that referenced this pull request Oct 23, 2026
#5326 moved all four speech addons to ggml-speech 2026-10-23 and
speech-cpp 2026-10-23#2. Releasing asr-ggml next to audiogen-ggml 0.9.0,
bci-whispercpp 0.14.0 and tts-ggml 0.14.0 keeps every published speech addon
on the same ggml-speech build. The [Unreleased] block becomes
[0.11.1] - 2026-10-23 with the PR links added.

pnpm-lock.yaml is unchanged: pnpm-workspace.yaml excludes packages/asr-ggml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
freddy311082 pushed a commit that referenced this pull request Oct 23, 2026
…hispercpp 0.14.0 and tts-ggml 0.14.0 (#5327)

* QVAC-27419 chore: release audiogen-ggml 0.9.0, bci-whispercpp 0.14.0 and tts-ggml 0.14.0

Minor bumps for the speech addons other than asr-ggml, which shipped 0.11.0
in #5289. Each [Unreleased] CHANGELOG block becomes its release section
dated 2026-10-23, with the PR links added; the entries are unchanged.

All three already pin speech-cpp 2026-10-20 port-version 1 in vcpkg.json,
matching the changelogs; vcpkg-configuration.json is untouched.

@qvac/sdk and @qvac/inference keep ^0.8.0 / ^0.13.0, so the lockfile now
resolves them to the published versions instead of the workspace links.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* QVAC-27419 chore: release asr-ggml 0.11.1 with the other speech addons

#5326 moved all four speech addons to ggml-speech 2026-10-23 and
speech-cpp 2026-10-23#2. Releasing asr-ggml next to audiogen-ggml 0.9.0,
bci-whispercpp 0.14.0 and tts-ggml 0.14.0 keeps every published speech addon
on the same ggml-speech build. The [Unreleased] block becomes
[0.11.1] - 2026-10-23 with the PR links added.

pnpm-lock.yaml is unchanged: pnpm-workspace.yaml excludes packages/asr-ggml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Zbig9000 added a commit that referenced this pull request Oct 23, 2026
main moved the speech addons to speech-cpp 2026-10-23#2 (#5326), which
contains qvac-fabric-speech.cpp#353, and released them (#5327) with the
diarizer and Nemotron loader entries. main's vcpkg.json and CHANGELOG
files are taken as-is, so this branch no longer changes the pins. What
remains is asr-ggml's assessFit coremlBytes field (binding, types,
integration test), the Core ML diarizer README rows and guidance, and an
Unreleased CHANGELOG entry for the field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

4 participants