Downloads · 30 days
158
6% of all-time downloads
aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8
Qwen3-ForcedAligner-0.6B-CoreML-INT8 is a audio classification model from aufklarer. Use it for the audio classification task on the model card, and read the license before you ship it in a product. The card lists the license as apache-2.0.
CoreML conversion of Qwen/Qwen3-ForcedAligner-0.6B with INT8 kmeans palettization on the two transformer bundles, for Apple Silicon.
Downloads · 30 days
158
6% of all-time downloads
All-time downloads
2.4K
Public
Repo size
1.1 GB
Likes
2
Public
Click a slice to open those files.
.bin2.1 GB · 100%
From the Hugging Face model README
CoreML conversion of Qwen/Qwen3-ForcedAligner-0.6B with INT8 kmeans palettization on the two transformer bundles, for Apple Silicon.
Predicts word-level timestamps for audio + text pairs in a single non-autoregressive forward pass.
| File | Role | Size |
|---|---|---|
audio_encoder.mlmodelc / .mlpackage | 24-layer block-attention encoder (INT8-palettized); fixed 30 s mel input | ~304 MB |
text_decoder.mlmodelc / .mlpackage | 28-layer non-AR decoder + 5000-class classify head (INT8-palettized); fixed T=768 | ~427 MB |
embed_tokens.fp16.bin | Raw little-endian fp16 token embedding table, shape [152 064, 1024] (not palettized) | ~297 MB |
config.json | Runtime config — variant, classify_num, timestamp_segment_time, fixed shapes | small |
vocab.json, merges.txt, tokenizer_config.json | Qwen3 BPE tokenizer files | ~5 MB |
The embed-tokens table is shipped as a raw fp16 binary rather than a CoreML package — the Swift runtime memory-maps the file and gathers rows with vImageConvert_Planar16FtoPlanarF, which costs ~0.5 ms per alignment instead of the ~70 ms an mlpackage round-trip would cost. Keeping the embedding at fp16 (not palettized) preserves classify-time accuracy across the full vocabulary; the palettization budget is spent on the two large transformer bundles, where it matters most for disk and ANE memory.
import Qwen3ASR
let aligner = try await CoreMLForcedAligner.fromPretrained(
modelId: "aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8")
let aligned = try aligner.align(
audio: pcmSamples,
text: "Can you guarantee that the replacement part will be shipped tomorrow?",
sampleRate: 16000,
language: "English")
CLI: speech align audio.wav --engine coreml --aligner-model aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8
| Metric | Value |
|---|---|
| RTF | 0.014 (69× faster than real-time) |
| Peak RSS | 697 MB |
| Median alignment time | ~289 ms |
Per-stage profile (COREML_ALIGN_PROFILE=1):
mel=150ms encoder=78ms embedding=0.5ms splice=0ms decoder=54ms argmax=7ms
The decoder uses MLComputeUnits = .all because its 28 layers exceed the ~26-layer ANE graph cap; the encoder runs on .cpuAndNeuralEngine.
Same model as the upstream Qwen3-ForcedAligner. Inference is non-autoregressive: one forward pass over a chat-template prompt (system + audio + assistant + <ts> word <ts> slots), then argmax at the timestamp positions, then LIS monotonicity correction.
The causal mask is baked into the exported graph as a constant with a finite -1e4 fill value (not -inf) so the fp16 softmax cannot produce NaN.
Conversion source: soniqo/speech-models/models/forced-aligner/export/convert_coreml.py.
aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-FP16 — full precision, ~1.7 GB, highest fidelity.For pure MLX paths (no CoreML), see the 4bit, 5bit, 8bit, and bf16 siblings under the same HuggingFace org.