Views
No views yet
| 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 |
vImageConvert_Planar16FtoPlanarF, which costs ~0.5 ms per alignment instead of the ~70 ms an mlpackage round-trip would cost.1import Qwen3ASR
2
3let aligner = try await CoreMLForcedAligner.fromPretrained(
4 modelId: "aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-FP16")
5let aligned = try aligner.align(
6 audio: pcmSamples,
7 text: "Can you guarantee that the replacement part will be shipped tomorrow?",
8 sampleRate: 16000,
9 language: "English")
10for word in aligned {
11 print("[\(word.startTime)s - \(word.endTime)s] \(word.text)")
12}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 |
COREML_ALIGN_PROFILE=1):mel=150ms encoder=90ms embedding=0.5ms splice=0ms decoder=44ms argmax=7msMLComputeUnits = .all because its 28 layers exceed the ~26-layer ANE graph cap; the encoder runs on .cpuAndNeuralEngine.<ts> word <ts> slots), then argmax at the timestamp positions, then LIS monotonicity correction.-1e4 fill value (not -inf) so the fp16 softmax cannot produce NaN.aufklarer/Qwen3-ForcedAligner-0.6B-CoreML-INT8 — kmeans-palettized text decoder + audio encoder, ~880 MB, similar RTF, ~35% lower peak memory.4bit, 5bit, 8bit, and bf16 siblings under the same HuggingFace org.