Skip to content

Tracking: Whisper-class offline ASR on Android — engine-side P0 #1282

Description

@michalharakal

Goal

Make SKaiNET the obvious engine for a fully offline, Whisper-class transcription app on Android. The reference case is an existing app on LiteRT (Whisper large-v3-turbo split encoder/decoder on OpenCL FP16, Parakeet TDT 0.6B, Silero VAD on ONNX Runtime, a 350M LLM for titles on LiteRT-LM): three native runtimes in one APK, hand-written mel/FFT/resampler/tokenizers/decode loops, and model-file surgery plus byte-patched runtime AARs to work around GPU numerics bugs. Its author's Pixel 7 Pro numbers are the bar:

Path 14 s memo RTF
LiteRT CPU, XNNPACK, 2×3 threads 82.2 s 5.9
LiteRT GPU, OpenCL FP16 34.4 s 2.5

Target for this milestone: CPU-only SKaiNET Whisper large-v3-turbo at or below 82 s on the same class of device, token-identical to whisper.cpp, with the audio side and VAD served by SKaiNET libraries.

What 0.54.0 already provides

Engine-side P0 (this repo)

Out of this repo, tracked with the ASR projects

  • Whisper v3 128-mel MelConfig in the audio library (HF-exact constants).
  • Whisper large-v3-turbo model + self-attention KV cache + timestamp rules + long-form windowing in the Whisper project, on top of the current engine pin.
  • Consumer docs: the artifact picker must list skainet-backend-jni-cpu; the AndroidGguf KDoc still says packed tensors heap-stage (fixed in 0.50.0).

Follow-ups already identified (P1, separate issues when P0 lands)

  • AndroidGguf.loader over an AssetFileDescriptor so a noCompress GGUF is mapped straight from the APK instead of copied out.
  • Windowed mapping to lift the 2 GB single-region cap.
  • HF tokenizer.json byte-level BPE loader for Whisper vocab.
  • Parakeet TDT cartridge reusing Lstm and the 128-mel config.

Exit criterion

whisper-tiny.en runs on a Pixel-class phone through the JNI tier with mapped weights and the M2-A5 harness names the kernel behind every matmul; the encoder is ≥ 5× faster than the 0.54.0 scalar path; Silero VAD matches ONNX Runtime within 1e-4 with no ORT dependency.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    compute-backendCompute backends and graphsskill:androidAndroid target/build/kernel worktrackingParent/tracking issue with sub-issues

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions