File size: 3,587 Bytes
a4b7895
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Provenance — the second encoder form

The records behind `macos-encoder-split7-30s/` in the Hugging Face repository of this model: the EmbeddingGemma 2
audio encoder cut in two after conformer layer 7, as two JIT `.aimodel` bundles for the Mac. They are copied from the
conversion's work directory with its paths replaced by placeholders (`<work>` = the work directory,
`<eg2-transcribe>` = the reader / app repository, `<venv>`, `<caches>`, `<home>`). `SOURCES.tsv` lists each copy, the
record it was copied from, the speed-ladder rows it backs, the sha256 of the record as written and the sha256 of the
copy.

| File | Record |
|---|---|
| `mac-gate.json` | the gate of the pair on the 20 fixture clips (Mac M4 Max, the AOT h16c compile of each graph): one window at a time, twice (drift 0), the red arm, the front alone and the body alone against PyTorch float32, and the two-in-flight order against the sequential pass |
| `mac-timing.json` | the timing of the same pair: one window at a time (front, host cast and body per call) and two windows in flight |
| `mac-timing-window.json` | the measurement window it ran in and the forms compared in it |
| `mac-one-bundle-gpu-same-window-timing.json` | the one-bundle fp16 encoder on the GPU in that window (40.04 ms per window) |
| `strip_eg2_front_layer7_fp32_T3000.json`, `strip_eg2_body_layer7_fp16_T3000.json` | the two published bundles are the gated `.aimodel` bundles with their MLIR debug locations removed (coreai-torch `strip_debug_info`): the op counts and the `coreai-build inspect` summaries are unchanged, no local path is left, `main.hash` is new |
| `compare_mac.json` | the published pair on the Mac, the 20 fixture clips: hidden states and soft tokens bit-identical to the gated `.aimodel` pair and to the AOT h16c pair of the gate, its own gate table equal to `mac-gate.json`'s, two windows in flight bit-identical to one at a time |

## Contract

- `eg2_front_layer7_fp32_T3000.aimodel` (subsampling + conformer layers 0–7, float32): `features [1, 3000, 128]` +
  `half_mask [1, 1500]`, float32 → `hidden [1, 750, 1024]`, float32. Load it with the GPU preferred.
- The host casts `hidden` to float16.
- `eg2_body_layer7_fp16_T3000.aimodel` (conformer layers 8–11 + `embed_audio`, float16): `hidden [1, 750, 1024]`,
  float16 → `soft_tokens [1, 750, 512]`, float16. Load it with the Neural Engine preferred.
- The log-mel, `half_mask` and the 30 s windows are those of the one-bundle encoder (the model card).
- Two windows in flight: issue the front of window i + 1 together with the body of window i (two bundles: the GPU and
  the Neural Engine at once). Never issue two calls of one bundle's function together: on the one-bundle encoder that
  returns wrong soft tokens (max |Δ| 8.04 against the sequential pass).
- When it is faster: long recordings on a Mac. 20 windows in a row take 30.96 ms per window (the wall time divided by
  20) against 40.04 ms for the one-bundle encoder in the same measurement window; one window alone takes 57.40 ms.
- Not for the iPhone: on the iPhone 18 Pro the body is placed on the GPU with the Neural Engine preferred, its Neural
  Engine AOT h19p fails to load (`failedToSpecialize`), and the float32 front alone takes 124.4 ms per 30 s window;
  two windows in flight take 144.0–144.6 ms per window against 58.4–60.9 ms for the one-bundle fp16 encoder in the
  same launch. `ios/` and `ios-h19p/` do not have it.
- The app of the eg2-transcribe repository does not download it: the app fetches `macos/`, and this folder sits at the
  root of the repository.