Document why Core ML is not shipped
Browse filesConverts fine (fp16, ~710 MB) but the .pte fails to LOAD with 0x23 in the portable tensor parser. Distinct from the coremltools#2825 dynamic-shape crash, which fails at execute.
- coreml/NOTES.md +36 -0
coreml/NOTES.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Core ML is not shipped for this model
|
| 2 |
+
|
| 3 |
+
The Core ML exporter exists in `export-scripts` and converts successfully, but the
|
| 4 |
+
artifact it produces cannot be loaded, so no `.pte` or `config.json` is published
|
| 5 |
+
here. Use the XNNPACK or MLX build instead.
|
| 6 |
+
|
| 7 |
+
## Why
|
| 8 |
+
|
| 9 |
+
Conversion succeeds (fp16, about 710 MB). Loading it in the ExecuTorch runtime
|
| 10 |
+
does not:
|
| 11 |
+
|
| 12 |
+
```
|
| 13 |
+
[tensor_parser_portable.cpp:192] getTensorDataPtr() failed: 0x23
|
| 14 |
+
[method.cpp:606] Failed parsing tensor at index 0: 0x23
|
| 15 |
+
```
|
| 16 |
+
|
| 17 |
+
Note what this is **not**. It is not the dynamic-shape crash that disables Core ML
|
| 18 |
+
on the other text models in this project (apple/coremltools#2825). That one fails
|
| 19 |
+
at execute; this fails at **load**, inside the *portable* tensor parser. Ops the
|
| 20 |
+
Core ML partitioner did not claim kept their constants in the ExecuTorch program,
|
| 21 |
+
and that data is unreadable. The artifact size or a constant-segment issue is the
|
| 22 |
+
plausible cause.
|
| 23 |
+
|
| 24 |
+
Because it never executed, the dynamic-shape question remains **open** for
|
| 25 |
+
LFM2.5-ColBERT-350M. It never got far enough to hit it.
|
| 26 |
+
|
| 27 |
+
Re-tested on 2026-08-20 with the software-mansion-labs fork toolchain, rebuilt and
|
| 28 |
+
loaded under the fork runtime: identical `0x23`. So this is not an artifact of the
|
| 29 |
+
PyPI wheel, unlike the YOLO fp16 MLX case that the fork did fix.
|
| 30 |
+
|
| 31 |
+
## Two deliberate differences from the other backends
|
| 32 |
+
|
| 33 |
+
The Core ML variant loads the model in **float32**, because Core ML has no
|
| 34 |
+
bfloat16 input dtype, and does **not** apply `quantize_model_`, which packs
|
| 35 |
+
weights for the MLX runtime. So the Core ML build is unquantized, and its size is
|
| 36 |
+
not comparable to the MLX one.
|