File size: 9,596 Bytes
35a42f2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | ---
license: other
license_name: openmdw-1.1
license_link: https://openmdw.ai/license/1-1/
base_model: nvidia/nemotron-3.5-asr-streaming-0.6b
library_name: fluidaudio
pipeline_tag: automatic-speech-recognition
tags:
- coreml
- apple-silicon
- ane
- streaming-asr
- rnnt
- on-device
language:
- en
- es
- fr
- it
- pt
- de
- zh
- ja
---
> Mirror of FluidInference/Nemotron-3.5-ASR-Streaming-Multilingual-0.6b-CoreML at revision 1a41b75758b0337ff67db7d5408280aaaf23074e, kept by the PrivateWispr team as a backup host. Licence: OpenMDW-1.1 (https://openmdw.ai/license/1-1/), unchanged; see the License & attribution section below. Original authors: NVIDIA (base model nvidia/nemotron-3.5-asr-streaming-0.6b, OpenMDW-1.1) and FluidInference (Core ML conversion). All model files are byte-identical to the upstream revision; only this header was added to the README.
# Nemotron 3.5 ASR Streaming Multilingual 0.6B β CoreML
To grant access please join the server https://discord.gg/S6m4ET3pX and message Sisyphu
CoreML / Apple Neural Engine ships of
[nemotron-3.5-asr-streaming-0.6b](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b)
(Conformer encoder + RNN-T decoder), optimized for on-device streaming ASR
on Apple Silicon. Benchmarked on Apple M5 Pro / macOS 26.5.
> Built on the **2026-05-29** base-checkpoint update.
**Two models Γ 4 latency tiers = 8 bundles.**
- **`latin/`** β one Latin-script-pruned vocab (2828 tokens) shared by
**en / es / fr / it / pt / de** (smaller, faster joint).
- **`multilingual/`** β the **full 13087-token vocab** covering every language,
including **zh / ja** (and 100+ more via `prompt_id`).
Each at four chunk sizes β **0.56 s / 1 s / 2 s / 4 s** β trading latency for
throughput. Pick the folder by script; pass the exact language at inference
(`--language de-DE`). FluidAudio's downloader auto-routes the language to the
right folder. Per-language results are in the table below and in
[`manifest.json`](manifest.json).
## Ship matrix (per-file RTFx, single-stream batch=1)
RTFx = real-time factor (audio-seconds processed per wall-second; higher is
faster). **WER** for Latin-script languages, **CER for zh/ja** (no word
boundaries). **All numbers are FLEURS test, full splits** (see methodology).
The **Folder** column is which bundle serves that language β the en/es/fr/it/pt/de
rows are all the *same* `latin/` model measured per language; zh/ja and
Multilingual are the *same* `multilingual/` model.
| Language | Folder | Vocab | 0.56 s (560 ms) β‘ | 1 s (1120 ms) | **2 s (2240 ms)** β | 4 s (4480 ms) | Test set |
|---|---|--:|--:|--:|--:|--:|---|
| **English** | `latin` | 2828 | 58 (9.43%) | 103 (8.89%) | **130 (8.96%)** | 122 (9.02%) | FLEURS en_us |
| **Spanish** | `latin` | 2828 | 58 (4.95%) | 106 (4.76%) | **140 (4.80%)** | 136 (4.77%) | FLEURS es_419 |
| **French** | `latin` | 2828 | 57 (9.68%) | 105 (9.44%) | **130 (9.52%)** | 124 (9.42%) | FLEURS fr_fr |
| **Italian** | `latin` | 2828 | 59 (5.68%) | 109 (5.45%) | **147 (5.41%)** | 150 (5.40%) | FLEURS it_it |
| **Portuguese** | `latin` | 2828 | 59 (6.38%) | 108 (6.11%) | **141 (6.14%)** | 141 (6.18%) | FLEURS pt_br |
| **German** | `latin` | 2828 | 59 (10.83%) | 107 (9.78%) | **144 (9.83%)** | 142 (9.83%) | FLEURS de_de |
| **Chinese** | `multilingual` | 13087 | 22 (19.48% C) | 27 (18.75% C) | **89 (18.57% C)** | 90 (18.05% C) | FLEURS cmn_hans_cn |
| **Japanese** | `multilingual` | 13087 | 21 (14.61% C) | 26 (13.77% C) | **84 (13.79% C)** | 89 (13.82% C) | FLEURS ja_jp |
| **Multilingual** | `multilingual` | 13087 | 23 (9.15%) | 71 (8.64%) | **80 (8.76%)** | 78 (8.78%) | FLEURS en_us |
β‘ **560 ms is the lowest-latency tier but off the trained attention tiling** β
lower throughput and a small quality cost vs 1120 ms. Use 1120 ms+ unless
sub-second latency is required.
> **Full-vocab models (zh / ja / multilingual) are tier-sensitive.** The
> 13087-vocab joint matmul only fits the ANE working-set efficiently at the
> **2 s** tier. At 560 ms the per-chunk joint overhead dominates and throughput
> collapses to β 21β23 RTFx; **use the 2 s tier for zh/ja/multilingual**
> (zh/ja β 84β90, multilingual-en β 80). Throughput at 1 s depends on output
> density β sparse Latin text (multilingual-en β 71 RTFx) fares far better than
> dense CJK (zh/ja β 26), since CJK hits the big joint on more decode steps.
> The Latin-script ships (small joint) are fast at every tier.
### Which tier to use
- **2 s (2240 ms) is the recommended default for every model.** Latin-script
ships run β 130β150 RTFx; zh/ja/multilingual peak here at β 84β90 RTFx.
WER/CER is at or near its best, at 2.5 s latency.
- **1 s (1120 ms)** for lower latency (1.25 s) on the Latin-script ships at
near-full quality (β 103β109 RTFx). Avoid for zh/ja/multilingual (β 26 RTFx).
- **0.56 s (560 ms)** only when sub-second latency is mandatory; off the trained
tiling, so throughput and quality both dip. Not recommended for
zh/ja/multilingual (β 21β22 RTFx).
- **4 s (4480 ms)** for offline/long-form. Within noise of 2 s for the
Latin-script ships, so 2 s usually dominates.
## Recipe
All ships share: **LAYERPOS [42,13] mixed-precision encoder** (first/last 3
Conformer layers INT8, middle 18 layers 6-bit palettized β ~55% encoder size
cut vs FP16, WER-neutral) + **B1 decoderβjoint fusion** + **triple-stage
pipelining**.
Vocab handling differs by script:
- **Latin-script languages (en/es/fr/it/pt/de)** share **one Latin-script-pruned
joint** β the keep-set is derived from the **writing system** (all Latin +
shared punctuation/digit tokens kept; CJK/Hangul/Cyrillic/Arabic/etc.
dropped), **not from any test corpus**. 2828 tokens, ~5Γ smaller joint, no
test-set overfit and no in-script OOV. One model file serves all six
languages.
- **Chinese / Japanese / multilingual** keep the **full 13087-vocab joint** β no
pruning, no OOV, full character coverage.
The encoder is **shared across all languages** (a multilingual encoder that
selects language via `prompt_id`) and is byte-identical across the Latin-script
and full-vocab ships at each tier β only the decode stack differs.
## Usage (FluidAudio)
Each `<model>/<tier>ms/` directory is a self-contained bundle. Pick the folder
by script (`latin` for en/es/fr/it/pt/de, `multilingual` for everything else)
and pass the exact language:
```bash
fluidaudiocli nemotron-multilingual-transcribe \
--input audio.wav \
--model-dir latin/2240ms \
--language de-DE
```
The FluidAudio auto-downloader routes `--language` to the correct folder
automatically. Models are shipped as compiled `.mlmodelc` (immediate load on
Apple Silicon).
## Folder layout
```
<model>/<tier>ms/
preprocessor.mlmodelc
encoder.mlmodelc # LAYERPOS [42,13], byte-identical across both models per tier
decoder.mlmodelc
joint.mlmodelc
decoder_joint.mlmodelc # B1 fusion (default decode path)
metadata.json
tokenizer.json
```
`<model>` β {latin, multilingual}; `<tier>` β {560, 1120, 2240, 4480}.
`latin` serves en/es/fr/it/pt/de (shared Latin-script vocab); `multilingual`
serves zh/ja and 100+ languages via `prompt_id` (full vocab). A top-level
[`manifest.json`](manifest.json) indexes both models, all tiers, and per-language
benchmark numbers.
### iOS 17
All `latin/` and `multilingual/` bundles target **iOS 17+ / macOS 14+**. The
encoder uses an iOS 17-compatible quantization (INT8 cuff via `affine_dequantize`
+ 6-bit palettized middle); the 6-bit middle is unchanged from the prior iOS 18
build. Speed and WER are identical to that iOS 18 build β verified on LibriSpeech
test-clean (M5 Pro, 2 s tier): **120 RTFx, 3.67% WER** for both targets.
## Notes
- **Latin-script ships are domain-general.** The vocab keep-set is defined by
the Latin writing system, not derived from any evaluation corpus, so there is
no test-set overfit and no out-of-vocabulary loss for any Latin-script text.
- **zh/ja use the full-vocab model** (no pruned keep-set), so they have no OOV
limitation and cover the full character inventory β at the cost of throughput
below the 2 s tier (use 2 s).
- The **multilingual** full-vocab model (13087) supports 100+ languages via
`prompt_id` β use it when broad coverage matters more than per-language speed.
## Benchmark methodology
Apple M5 Pro, macOS 26.5, coremltools 9.0, CoreML iOS 17 target,
`.cpuAndNeuralEngine` routing. Single-stream, batch=1, per-file sum-aggregate
RTFx (matches the Open ASR Leaderboard convention). **All languages evaluated
on FLEURS test, full splits.** WER for Latin-script languages, CER for zh/ja,
via HuggingFace normalization. No inverse text normalization is applied, so
FLEURS' digit-bearing utterances inflate WER by ~1β2 pp relative to
number-normalized references; FLEURS is also multi-domain, so these numbers run
higher than LibriSpeech/MLS would for the same model.
## License & attribution
Derived from the base model
[nemotron-3.5-asr-streaming-0.6b](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b),
released by NVIDIA under the
[OpenMDW-1.1 License](https://openmdw.ai/license/1-1/) and marked ready for
commercial use. This CoreML port is a derivative of those weights and is
distributed under the same **OpenMDW-1.1** license; commercial use and
redistribution are permitted under its terms. Retain this attribution to
NVIDIA and the OpenMDW-1.1 notice when redistributing.
Weights are quantized/pruned post-training only β **no retraining, no
fine-tuning, no calibration-data fitting.** |