aufklarer commited on
Commit
c453c17
·
verified ·
1 Parent(s): 788a603

Upload Nemotron-3.5 ASR Streaming 0.6B variant

Browse files
README.md ADDED
@@ -0,0 +1,189 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: nvidia-software-and-model-evaluation-license
4
+ license_link: https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-software-and-model-evaluation-license/
5
+ language:
6
+ - en
7
+ - es
8
+ - de
9
+ - fr
10
+ - it
11
+ - pt
12
+ - ru
13
+ - hi
14
+ - zh
15
+ - ja
16
+ - ko
17
+ - ar
18
+ - nl
19
+ - pl
20
+ - tr
21
+ - uk
22
+ - ro
23
+ - el
24
+ - cs
25
+ - hu
26
+ - sv
27
+ - da
28
+ - fi
29
+ - 'no'
30
+ - sk
31
+ - hr
32
+ - bg
33
+ - lt
34
+ - et
35
+ - lv
36
+ - sl
37
+ - th
38
+ - vi
39
+ - id
40
+ - ms
41
+ - bn
42
+ - ur
43
+ - fa
44
+ - ta
45
+ - te
46
+ - mr
47
+ - gu
48
+ - kn
49
+ - ml
50
+ - si
51
+ - ne
52
+ - km
53
+ - sw
54
+ - am
55
+ - ha
56
+ - zu
57
+ - yo
58
+ - ig
59
+ - af
60
+ - rw
61
+ - so
62
+ - ny
63
+ - ln
64
+ - 'or'
65
+ - he
66
+ - ku
67
+ - az
68
+ - ka
69
+ - hy
70
+ - uz
71
+ - tg
72
+ - ky
73
+ - qu
74
+ - ay
75
+ - gn
76
+ - mi
77
+ - haw
78
+ - sm
79
+ - to
80
+ - mt
81
+ tags:
82
+ - automatic-speech-recognition
83
+ - nemotron
84
+ - streaming
85
+ - conformer
86
+ - rnn-t
87
+ - multilingual
88
+ - coreml
89
+ base_model: nvidia/nemotron-3.5-asr-streaming-0.6b
90
+ library_name: coreml
91
+ pipeline_tag: automatic-speech-recognition
92
+ ---
93
+
94
+ # Nemotron-3.5 ASR Streaming 0.6B — CoreML INT8
95
+
96
+ Cache-aware streaming Conformer + RNN-T from NVIDIA, ported to CoreML (`.mlmodelc`) for on-device inference on Apple Silicon. 600 M params, 76 languages, native punctuation and capitalization. INT8 palettized encoder, FP16 decoder + joint. Ships `.mlmodelc` (compiled) — `.mlpackage` is not shipped because on-device `MLModel.compileModel()` produces non-deterministic output across iOS simulator vs device runtimes.
97
+
98
+ ## Model
99
+
100
+ | | |
101
+ |---|---|
102
+ | Parameters | 600 M |
103
+ | Architecture | FastConformer-CacheAware-RNN-T with language-conditioning prompt kernel |
104
+ | Languages | 76 (see frontmatter) |
105
+ | Sample rate | 16 kHz mono |
106
+ | Streaming chunk | 320 ms (`att_context_size = [56, 3]`) |
107
+ | Encoder quantization | INT8 palettized |
108
+ | Decoder / joint dtype | FP16 |
109
+ | On-disk size | 612 MB |
110
+
111
+ ## Files
112
+
113
+ | File | Size | Description |
114
+ |------|------|-------------|
115
+ | `encoder.mlmodelc/` | 565 MB | 24-layer cache-aware Conformer encoder + prompt kernel |
116
+ | `decoder.mlmodelc/` | 29 MB | RNN-T prediction net (2-layer LSTM, 640 dim) |
117
+ | `joint.mlmodelc/` | 18 MB | Joint network (vocab=13088) |
118
+ | `vocab.json` | 230 KB | SentencePiece pieces, id → string |
119
+ | `languages.json` | 2 KB | Language tag → prompt slot (e.g. `"en-US": 0`) |
120
+ | `config.json` | <1 KB | Streaming geometry + dims for the loader |
121
+
122
+ ## Performance
123
+
124
+ M5 Pro (Apple Silicon), 50 samples per language from FLEURS test, streaming 320 ms chunks, compute units `.all`. Scoring uses Whisper `EnglishTextNormalizer` for English and `BasicTextNormalizer(split_letters=True)` for hi/ja (char-level), `BasicTextNormalizer` for de/fr/ar.
125
+
126
+ ### Accuracy
127
+
128
+ | lang | WER % | CER % | Δ WER vs fp32 source |
129
+ |------|------:|------:|---------------------:|
130
+ | en_us | 9.59 | 4.26 | +0.26 |
131
+ | de_de | 10.41 | 5.37 | +0.19 |
132
+ | fr_fr | 12.18 | 4.84 | +1.05 |
133
+ | ar_eg | 13.37 | 3.80 | +0.10 |
134
+ | hi_in | 4.42 | 3.61 | −0.84 |
135
+ | ja_jp | 17.66 | 12.09 | +0.69 |
136
+
137
+ Quantization is essentially lossless. For ja/hi the published WER is char-level (matches NVIDIA's CJK methodology); CER is the more interpretable number for those scripts.
138
+
139
+ ### Streaming throughput + memory
140
+
141
+ M5 Pro, 60 s long-form en_us audio, single thread, `.all` compute units:
142
+
143
+ | metric | value |
144
+ |--------|------:|
145
+ | RTF (encode + decode) | 0.068 |
146
+ | p50 chunk latency | 18.6 ms |
147
+ | p99 chunk latency | 23.4 ms |
148
+ | RSS post-load | 1046 MB |
149
+ | RSS peak (mid-stream) | 1238 MB |
150
+
151
+ ## Usage
152
+
153
+ ### Python (coremltools)
154
+
155
+ ```python
156
+ import coremltools as ct
157
+ import numpy as np
158
+ import json
159
+ from huggingface_hub import snapshot_download
160
+
161
+ bundle = snapshot_download("aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8")
162
+ encoder = ct.models.CompiledMLModel(f"{bundle}/encoder.mlmodelc")
163
+ decoder = ct.models.CompiledMLModel(f"{bundle}/decoder.mlmodelc")
164
+ joint = ct.models.CompiledMLModel(f"{bundle}/joint.mlmodelc")
165
+
166
+ slots = json.load(open(f"{bundle}/languages.json"))["promptDictionary"]
167
+ lang_mask = np.zeros((1, 128), dtype=np.float32)
168
+ lang_mask[0, slots["en-US"]] = 1.0
169
+ # Feed 320 ms chunks; persist caches across calls (see inference reference below).
170
+ ```
171
+
172
+ ### Swift
173
+
174
+ ```swift
175
+ import NemotronStreamingASR
176
+
177
+ let model = try await NemotronStreamingASRModel.fromPretrained()
178
+ let text = try model.transcribeAudio(audio, sampleRate: 16000, language: "en-US")
179
+ ```
180
+
181
+ ## Source
182
+
183
+ Upstream: [nvidia/nemotron-3.5-asr-streaming-0.6b](https://huggingface.co/nvidia/nemotron-3.5-asr-streaming-0.6b).
184
+
185
+ ## Links
186
+
187
+ - [speech-swift](https://github.com/soniqo/speech-swift) — Apple SDK with `NemotronStreamingASR`
188
+ - [soniqo.audio](https://soniqo.audio)
189
+ - [blog](https://soniqo.audio/blog)
config.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "modelName": "nemotron-3.5-asr-streaming-0.6b",
3
+ "numMelBins": 128,
4
+ "sampleRate": 16000,
5
+ "nFFT": 512,
6
+ "hopLength": 160,
7
+ "winLength": 400,
8
+ "preEmphasis": 0.97,
9
+ "encoderHidden": 1024,
10
+ "encoderLayers": 24,
11
+ "subsamplingFactor": 8,
12
+ "attentionLeftContext": 56,
13
+ "convCacheSize": 8,
14
+ "decoderHidden": 640,
15
+ "decoderLayers": 2,
16
+ "vocabSize": 13087,
17
+ "blankTokenId": 13087,
18
+ "numPrompts": 128,
19
+ "streaming": {
20
+ "chunkMs": 320,
21
+ "chunkSize": 4,
22
+ "rightContext": 3,
23
+ "lookaheadMs": 240,
24
+ "melFrames": 32,
25
+ "preCacheSize": 9,
26
+ "outputFrames": 4
27
+ }
28
+ }
decoder.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4d58297228f44ca23752d3850c60a0559af78a6d4455b348cd8dc6364b8ed0d4
3
+ size 243
decoder.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:15a3baf01a47f013b388b76b940ab5ec33ba84a8bc6025e5d5dba1ec9bf28762
3
+ size 404
decoder.mlmodelc/model.mil ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.3)
2
+ [buildInfo = dict<string, string>({{"coremlc-component-MIL", "3520.4.1"}, {"coremlc-version", "3520.5.1"}, {"coremltools-component-torch", "2.11.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
3
+ {
4
+ func main<ios18>(tensor<fp16, [2, 1, 640]> c, tensor<fp16, [2, 1, 640]> h, tensor<int32, [1, 1]> token) {
5
+ int32 y_1_axis_0 = const()[name = string("y_1_axis_0"), val = int32(0)];
6
+ int32 y_1_batch_dims_0 = const()[name = string("y_1_batch_dims_0"), val = int32(0)];
7
+ bool y_1_validate_indices_0 = const()[name = string("y_1_validate_indices_0"), val = bool(false)];
8
+ tensor<fp16, [13088, 640]> decoder_prediction_embed_weight_to_fp16 = const()[name = string("decoder_prediction_embed_weight_to_fp16"), val = tensor<fp16, [13088, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(64)))];
9
+ string token_to_int16_dtype_0 = const()[name = string("token_to_int16_dtype_0"), val = string("int16")];
10
+ tensor<int16, [1, 1]> token_to_int16 = cast(dtype = token_to_int16_dtype_0, x = token)[name = string("cast_6")];
11
+ tensor<fp16, [1, 1, 640]> y_1_cast_fp16_cast_uint16 = gather(axis = y_1_axis_0, batch_dims = y_1_batch_dims_0, indices = token_to_int16, validate_indices = y_1_validate_indices_0, x = decoder_prediction_embed_weight_to_fp16)[name = string("y_1_cast_fp16_cast_uint16")];
12
+ tensor<int32, [3]> input_1_perm_0 = const()[name = string("input_1_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
13
+ int32 split_0_num_splits_0 = const()[name = string("split_0_num_splits_0"), val = int32(2)];
14
+ int32 split_0_axis_0 = const()[name = string("split_0_axis_0"), val = int32(0)];
15
+ tensor<fp16, [1, 1, 640]> split_0_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_0_cast_fp16_1 = split(axis = split_0_axis_0, num_splits = split_0_num_splits_0, x = h)[name = string("split_0_cast_fp16")];
16
+ int32 split_1_num_splits_0 = const()[name = string("split_1_num_splits_0"), val = int32(2)];
17
+ int32 split_1_axis_0 = const()[name = string("split_1_axis_0"), val = int32(0)];
18
+ tensor<fp16, [1, 1, 640]> split_1_cast_fp16_0, tensor<fp16, [1, 1, 640]> split_1_cast_fp16_1 = split(axis = split_1_axis_0, num_splits = split_1_num_splits_0, x = c)[name = string("split_1_cast_fp16")];
19
+ tensor<int32, [1]> input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0 = const()[name = string("input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
20
+ tensor<fp16, [1, 640]> input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_layer_0_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_0)[name = string("input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16")];
21
+ tensor<int32, [1]> input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0 = const()[name = string("input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
22
+ tensor<fp16, [1, 640]> input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_layer_0_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_0)[name = string("input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16")];
23
+ string input0_1_lstm_layer_0_direction_0 = const()[name = string("input0_1_lstm_layer_0_direction_0"), val = string("forward")];
24
+ bool input0_1_lstm_layer_0_output_sequence_0 = const()[name = string("input0_1_lstm_layer_0_output_sequence_0"), val = bool(true)];
25
+ string input0_1_lstm_layer_0_recurrent_activation_0 = const()[name = string("input0_1_lstm_layer_0_recurrent_activation_0"), val = string("sigmoid")];
26
+ string input0_1_lstm_layer_0_cell_activation_0 = const()[name = string("input0_1_lstm_layer_0_cell_activation_0"), val = string("tanh")];
27
+ string input0_1_lstm_layer_0_activation_0 = const()[name = string("input0_1_lstm_layer_0_activation_0"), val = string("tanh")];
28
+ tensor<fp16, [2560, 640]> concat_1_to_fp16 = const()[name = string("concat_1_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(16752768)))];
29
+ tensor<fp16, [2560, 640]> concat_2_to_fp16 = const()[name = string("concat_2_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(20029632)))];
30
+ tensor<fp16, [2560]> concat_0_to_fp16 = const()[name = string("concat_0_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(23306496)))];
31
+ tensor<fp16, [1, 1, 640]> input_1_cast_fp16 = transpose(perm = input_1_perm_0, x = y_1_cast_fp16_cast_uint16)[name = string("transpose_1")];
32
+ tensor<fp16, [1, 1, 640]> input0_1_lstm_layer_0_cast_fp16_0, tensor<fp16, [1, 640]> input0_1_lstm_layer_0_cast_fp16_1, tensor<fp16, [1, 640]> input0_1_lstm_layer_0_cast_fp16_2 = lstm(activation = input0_1_lstm_layer_0_activation_0, bias = concat_0_to_fp16, cell_activation = input0_1_lstm_layer_0_cell_activation_0, direction = input0_1_lstm_layer_0_direction_0, initial_c = input0_1_lstm_layer_0_lstm_c0_squeeze_cast_fp16, initial_h = input0_1_lstm_layer_0_lstm_h0_squeeze_cast_fp16, output_sequence = input0_1_lstm_layer_0_output_sequence_0, recurrent_activation = input0_1_lstm_layer_0_recurrent_activation_0, weight_hh = concat_2_to_fp16, weight_ih = concat_1_to_fp16, x = input_1_cast_fp16)[name = string("input0_1_lstm_layer_0_cast_fp16")];
33
+ tensor<int32, [1]> input0_1_lstm_h0_squeeze_axes_0 = const()[name = string("input0_1_lstm_h0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
34
+ tensor<fp16, [1, 640]> input0_1_lstm_h0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_h0_squeeze_axes_0, x = split_0_cast_fp16_1)[name = string("input0_1_lstm_h0_squeeze_cast_fp16")];
35
+ tensor<int32, [1]> input0_1_lstm_c0_squeeze_axes_0 = const()[name = string("input0_1_lstm_c0_squeeze_axes_0"), val = tensor<int32, [1]>([0])];
36
+ tensor<fp16, [1, 640]> input0_1_lstm_c0_squeeze_cast_fp16 = squeeze(axes = input0_1_lstm_c0_squeeze_axes_0, x = split_1_cast_fp16_1)[name = string("input0_1_lstm_c0_squeeze_cast_fp16")];
37
+ string input0_1_direction_0 = const()[name = string("input0_1_direction_0"), val = string("forward")];
38
+ bool input0_1_output_sequence_0 = const()[name = string("input0_1_output_sequence_0"), val = bool(true)];
39
+ string input0_1_recurrent_activation_0 = const()[name = string("input0_1_recurrent_activation_0"), val = string("sigmoid")];
40
+ string input0_1_cell_activation_0 = const()[name = string("input0_1_cell_activation_0"), val = string("tanh")];
41
+ string input0_1_activation_0 = const()[name = string("input0_1_activation_0"), val = string("tanh")];
42
+ tensor<fp16, [2560, 640]> concat_4_to_fp16 = const()[name = string("concat_4_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(23311680)))];
43
+ tensor<fp16, [2560, 640]> concat_5_to_fp16 = const()[name = string("concat_5_to_fp16"), val = tensor<fp16, [2560, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(26588544)))];
44
+ tensor<fp16, [2560]> concat_3_to_fp16 = const()[name = string("concat_3_to_fp16"), val = tensor<fp16, [2560]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(29865408)))];
45
+ tensor<fp16, [1, 1, 640]> input0_1_cast_fp16_0, tensor<fp16, [1, 640]> input0_1_cast_fp16_1, tensor<fp16, [1, 640]> input0_1_cast_fp16_2 = lstm(activation = input0_1_activation_0, bias = concat_3_to_fp16, cell_activation = input0_1_cell_activation_0, direction = input0_1_direction_0, initial_c = input0_1_lstm_c0_squeeze_cast_fp16, initial_h = input0_1_lstm_h0_squeeze_cast_fp16, output_sequence = input0_1_output_sequence_0, recurrent_activation = input0_1_recurrent_activation_0, weight_hh = concat_5_to_fp16, weight_ih = concat_4_to_fp16, x = input0_1_lstm_layer_0_cast_fp16_0)[name = string("input0_1_cast_fp16")];
46
+ int32 var_33_axis_0 = const()[name = string("op_33_axis_0"), val = int32(0)];
47
+ tensor<fp16, [2, 1, 640]> h_out = stack(axis = var_33_axis_0, values = (input0_1_lstm_layer_0_cast_fp16_1, input0_1_cast_fp16_1))[name = string("op_33_cast_fp16")];
48
+ int32 var_34_axis_0 = const()[name = string("op_34_axis_0"), val = int32(0)];
49
+ tensor<fp16, [2, 1, 640]> c_out = stack(axis = var_34_axis_0, values = (input0_1_lstm_layer_0_cast_fp16_2, input0_1_cast_fp16_2))[name = string("op_34_cast_fp16")];
50
+ tensor<int32, [3]> output_1_perm_0 = const()[name = string("output_1_perm_0"), val = tensor<int32, [3]>([1, 0, 2])];
51
+ tensor<fp16, [1, 1, 640]> decoder_output = transpose(perm = output_1_perm_0, x = input0_1_cast_fp16_0)[name = string("transpose_0")];
52
+ } -> (decoder_output, h_out, c_out);
53
+ }
decoder.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dcdeccd4ccf46e2675224f9f030d46c1a89e2bda4abb316e901e1a21f1597f8f
3
+ size 29870592
encoder.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cdd661c54b5e6f6389b58567c144cba6fad0d9e2c998d8a9048f87e857f9f32b
3
+ size 243
encoder.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c37a6fb1813130e71e0a19e58c235974234f1b9b3984ec1afa9323bf3c192e8d
3
+ size 701
encoder.mlmodelc/model.mil ADDED
The diff for this file is too large to render. See raw diff
 
encoder.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5fab9a684e34183d5f19cd1c63c19eefd7b02cc5a68af1367c6489702e746508
3
+ size 591932416
joint.mlmodelc/analytics/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e76f3618638fd5cf64805d4ba57942cbc7fcb1b38edd13851a151978871e57c4
3
+ size 243
joint.mlmodelc/coremldata.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1b4924670d16462ab2de77fb7e5f7fa721af139939e5ab2ddcd903734894ce9d
3
+ size 355
joint.mlmodelc/model.mil ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ program(1.3)
2
+ [buildInfo = dict<string, string>({{"coremlc-component-MIL", "3520.4.1"}, {"coremlc-version", "3520.5.1"}, {"coremltools-component-torch", "2.11.0"}, {"coremltools-source-dialect", "TorchScript"}, {"coremltools-version", "8.3.0"}})]
3
+ {
4
+ func main<ios18>(tensor<fp16, [1, 1, 640]> decoder_output, tensor<fp16, [1, 1, 1024]> encoder_output) {
5
+ int32 var_6 = const()[name = string("op_6"), val = int32(-1)];
6
+ tensor<fp16, [640, 1024]> joint_enc_weight_to_fp16 = const()[name = string("joint_enc_weight_to_fp16"), val = tensor<fp16, [640, 1024]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(64)))];
7
+ tensor<fp16, [640]> joint_enc_bias_to_fp16 = const()[name = string("joint_enc_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(1310848)))];
8
+ tensor<fp16, [1, 1, 640]> linear_0_cast_fp16 = linear(bias = joint_enc_bias_to_fp16, weight = joint_enc_weight_to_fp16, x = encoder_output)[name = string("linear_0_cast_fp16")];
9
+ tensor<fp16, [640, 640]> joint_pred_weight_to_fp16 = const()[name = string("joint_pred_weight_to_fp16"), val = tensor<fp16, [640, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(1312192)))];
10
+ tensor<fp16, [640]> joint_pred_bias_to_fp16 = const()[name = string("joint_pred_bias_to_fp16"), val = tensor<fp16, [640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(2131456)))];
11
+ tensor<fp16, [1, 1, 640]> linear_1_cast_fp16 = linear(bias = joint_pred_bias_to_fp16, weight = joint_pred_weight_to_fp16, x = decoder_output)[name = string("linear_1_cast_fp16")];
12
+ tensor<int32, [1]> f_3_axes_0 = const()[name = string("f_3_axes_0"), val = tensor<int32, [1]>([2])];
13
+ tensor<fp16, [1, 1, 1, 640]> f_3_cast_fp16 = expand_dims(axes = f_3_axes_0, x = linear_0_cast_fp16)[name = string("f_3_cast_fp16")];
14
+ tensor<int32, [1]> g_3_axes_0 = const()[name = string("g_3_axes_0"), val = tensor<int32, [1]>([1])];
15
+ tensor<fp16, [1, 1, 1, 640]> g_3_cast_fp16 = expand_dims(axes = g_3_axes_0, x = linear_1_cast_fp16)[name = string("g_3_cast_fp16")];
16
+ tensor<fp16, [1, 1, 1, 640]> input_3_cast_fp16 = add(x = f_3_cast_fp16, y = g_3_cast_fp16)[name = string("input_3_cast_fp16")];
17
+ tensor<fp16, [1, 1, 1, 640]> var_25_cast_fp16 = relu(x = input_3_cast_fp16)[name = string("op_25_cast_fp16")];
18
+ tensor<fp16, [13088, 640]> joint_joint_net_2_weight_to_fp16 = const()[name = string("joint_joint_net_2_weight_to_fp16"), val = tensor<fp16, [13088, 640]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(2132800)))];
19
+ tensor<fp16, [13088]> joint_joint_net_2_bias_to_fp16 = const()[name = string("joint_joint_net_2_bias_to_fp16"), val = tensor<fp16, [13088]>(BLOBFILE(path = string("@model_path/weights/weight.bin"), offset = uint64(18885504)))];
20
+ tensor<fp16, [1, 1, 1, 13088]> linear_2_cast_fp16 = linear(bias = joint_joint_net_2_bias_to_fp16, weight = joint_joint_net_2_weight_to_fp16, x = var_25_cast_fp16)[name = string("linear_2_cast_fp16")];
21
+ tensor<fp16, [1, 1, 1, 13088]> logits_1_softmax_cast_fp16 = softmax(axis = var_6, x = linear_2_cast_fp16)[name = string("logits_1_softmax_cast_fp16")];
22
+ fp32 logits_1_epsilon_0 = const()[name = string("logits_1_epsilon_0"), val = fp32(0x1p-149)];
23
+ tensor<fp16, [1, 1, 1, 13088]> logits_1_cast_fp16 = log(epsilon = logits_1_epsilon_0, x = logits_1_softmax_cast_fp16)[name = string("logits_1_cast_fp16")];
24
+ tensor<int32, [1]> var_31_axes_0 = const()[name = string("op_31_axes_0"), val = tensor<int32, [1]>([2])];
25
+ tensor<fp16, [1, 1, 13088]> logits = squeeze(axes = var_31_axes_0, x = logits_1_cast_fp16)[name = string("op_31_cast_fp16")];
26
+ } -> (logits);
27
+ }
joint.mlmodelc/weights/weight.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c0ef0a3a6598f962d2aad598dc6850e4428874033419817121e11f1fff4a9cfe
3
+ size 18911744
languages.json ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "numPrompts": 128,
3
+ "promptDictionary": {
4
+ "en-US": 0,
5
+ "en": 0,
6
+ "en-GB": 1,
7
+ "enGB": 1,
8
+ "es-ES": 2,
9
+ "esES": 2,
10
+ "es-US": 3,
11
+ "es": 3,
12
+ "zh-CN": 4,
13
+ "zh-ZH": 4,
14
+ "zh-TW": 5,
15
+ "hi-IN": 6,
16
+ "hi": 6,
17
+ "hi-HI": 6,
18
+ "ar-AR": 7,
19
+ "ar": 7,
20
+ "fr-FR": 8,
21
+ "fr": 8,
22
+ "de-DE": 9,
23
+ "de": 9,
24
+ "ja-JP": 10,
25
+ "ja-JA": 10,
26
+ "ru-RU": 11,
27
+ "ru": 11,
28
+ "pt-BR": 12,
29
+ "pt-PT": 13,
30
+ "pt": 13,
31
+ "ko-KR": 14,
32
+ "ko": 14,
33
+ "ko-KO": 14,
34
+ "it-IT": 15,
35
+ "it": 15,
36
+ "nl-NL": 16,
37
+ "nl": 16,
38
+ "pl-PL": 17,
39
+ "pl": 17,
40
+ "tr-TR": 18,
41
+ "tr": 18,
42
+ "uk-UA": 19,
43
+ "uk": 19,
44
+ "ro-RO": 20,
45
+ "ro": 20,
46
+ "el-GR": 21,
47
+ "el": 21,
48
+ "cs-CZ": 22,
49
+ "cs": 22,
50
+ "hu-HU": 23,
51
+ "hu": 23,
52
+ "sv-SE": 24,
53
+ "sv": 24,
54
+ "da-DK": 25,
55
+ "da": 25,
56
+ "fi-FI": 26,
57
+ "fi": 26,
58
+ "no-NO": 27,
59
+ "no": 27,
60
+ "nb-NO": 103,
61
+ "nb": 103,
62
+ "nn-NO": 104,
63
+ "nn": 104,
64
+ "sk-SK": 28,
65
+ "sk": 28,
66
+ "hr-HR": 29,
67
+ "hr": 29,
68
+ "bg-BG": 30,
69
+ "bg": 30,
70
+ "lt-LT": 31,
71
+ "lt": 31,
72
+ "et-EE": 60,
73
+ "et": 60,
74
+ "lv-LV": 61,
75
+ "lv": 61,
76
+ "sl-SI": 62,
77
+ "sl": 62,
78
+ "th-TH": 32,
79
+ "vi-VN": 33,
80
+ "id-ID": 34,
81
+ "ms-MY": 35,
82
+ "bn-IN": 36,
83
+ "ur-PK": 37,
84
+ "fa-IR": 38,
85
+ "ta-IN": 39,
86
+ "te-IN": 40,
87
+ "mr-IN": 41,
88
+ "gu-IN": 42,
89
+ "kn-IN": 43,
90
+ "ml-IN": 44,
91
+ "si-LK": 45,
92
+ "ne-NP": 46,
93
+ "km-KH": 47,
94
+ "sw-KE": 48,
95
+ "am-ET": 49,
96
+ "ha-NG": 50,
97
+ "zu-ZA": 51,
98
+ "yo-NG": 52,
99
+ "ig-NG": 53,
100
+ "af-ZA": 54,
101
+ "rw-RW": 55,
102
+ "so-SO": 56,
103
+ "ny-MW": 57,
104
+ "ln-CD": 58,
105
+ "or-KE": 59,
106
+ "he-IL": 64,
107
+ "ku-TR": 65,
108
+ "az-AZ": 66,
109
+ "ka-GE": 67,
110
+ "hy-AM": 68,
111
+ "uz-UZ": 69,
112
+ "tg-TJ": 70,
113
+ "ky-KG": 71,
114
+ "qu-PE": 80,
115
+ "ay-BO": 81,
116
+ "gn-PY": 82,
117
+ "nah-MX": 83,
118
+ "mi-NZ": 96,
119
+ "haw-US": 97,
120
+ "sm-WS": 98,
121
+ "to-TO": 99,
122
+ "fr-CA": 100,
123
+ "mt-MT": 102,
124
+ "auto": 101
125
+ },
126
+ "autoSlot": 101
127
+ }
vocab.json ADDED
The diff for this file is too large to render. See raw diff