Downloads · 30 days
127
7% of all-time downloads
aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-FP16
Qwen3-ForcedAligner-0.6B-CoreML-FP16 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 at fp16 precision for Apple Silicon. Predicts word-level timestamps for audio + text pairs in a single non-autoregressive forward pass.
Downloads · 30 days
127
7% of all-time downloads
All-time downloads
1.9K
Public
Repo size
1.8 GB
Likes
0
Public
Click a slice to open those files.
.bin3.4 GB · 100%
From the Hugging Face model README
CoreML conversion of Qwen/Qwen3-ForcedAligner-0.6B at fp16 precision 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; fixed 30 s mel input, returns audio_embeddings + real output_length | ~605 MB |
text_decoder.mlmodelc / .mlpackage | 28-layer non-AR decoder + 5000-class classify head; fixed T=768 | ~853 MB |
embed_tokens.fp16.bin | Raw little-endian fp16 token embedding table, shape [152 064, 1024] | ~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.
import Qwen3ASR
let aligner = try await CoreMLForcedAligner.fromPretrained(
modelId: "aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-FP16")
let aligned = try aligner.align(
audio: pcmSamples,
text: "Can you guarantee that the replacement part will be shipped tomorrow?",
sampleRate: 16000,
language: "English")
for word in aligned {
print("[\(word.startTime)s - \(word.endTime)s] \(word.text)")
}
CLI: speech align audio.wav --engine coreml
| Metric | Value |
|---|---|
| RTF | 0.015 (67× faster than real-time) |
| Peak RSS | 1071 MB |
| Median alignment time | ~297 ms |
Per-stage profile (COREML_ALIGN_PROFILE=1):
mel=150ms encoder=90ms embedding=0.5ms splice=0ms decoder=44ms 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-INT8 — kmeans-palettized text decoder + audio encoder, ~880 MB, similar RTF, ~35% lower peak memory.For pure MLX paths (no CoreML), see the 4bit, 5bit, 8bit, and bf16 siblings under the same HuggingFace org.