|
Download mlx/NOTES.md from software-mansion/SSDlite320-MobileNetV3-Large-ExecuTorch: direct link, hf CLI and curl.
- Browser
- Download file 3.45 kB
-
https://huggingface.co/software-mansion/SSDlite320-MobileNetV3-Large-ExecuTorch/resolve/main/mlx/NOTES.md
- Command line
-
hf download hf://software-mansion/SSDlite320-MobileNetV3-Large-ExecuTorch/mlx/NOTES.md
-
curl -L -o NOTES.md https://huggingface.co/software-mansion/SSDlite320-MobileNetV3-Large-ExecuTorch/resolve/main/mlx/NOTES.md
3.45 kB
| # MLX is not shipped for this model | |
| The MLX artifacts for this model were removed deliberately. The exporter in | |
| `export-scripts` is kept so the decision can be re-tested against a future | |
| ExecuTorch/MLX release, but no `.pte` or `config.json` is published here. | |
| ## Why | |
| Measured on device (iPhone 16, ExecuTorch 1.4.1, Release build, 3 warmup runs + | |
| 15 timed runs, median), on ssdlite320 (mobilenet_v3_large): | |
| | backend | precision | median latency | | |
| |---|---|---| | |
| | Core ML | fp32 (precision matched) | 9.2 ms | | |
| | MLX | fp32 (only precision offered) | 17.0 ms | | |
| | Core ML | fp16 (shipped default) | **9.7 ms** | | |
| MLX is **1.9x slower than Core ML at matched precision**, and **1.75x slower than | |
| the Core ML build that actually ships**. | |
| These exporters only ever declared an MLX fp32 variant, so fp32-vs-fp32 is the | |
| fair comparison and it is deliberately the conservative one: MLX still loses it. | |
| **Caveat specific to this model.** The 1.75x margin against the shipped Core ML | |
| default was the narrowest in this study. A follow-up compute-unit sweep has since | |
| improved the Core ML side: pinning `compute_unit=CPU_ONLY` gives 7.2 ms, so the | |
| real margin is **2.4x** (17.0 vs 7.2 ms). The removal therefore stands more | |
| firmly than the table above suggests. | |
| **Correction.** An earlier revision of this file stated that Core ML fp16 is | |
| *slower* than its own fp32 for this model (9.7 vs 9.2 ms). That was measured on a | |
| single run and did not reproduce: a repeat gave fp32 9.6 ms and fp16 9.5 ms, i.e. | |
| the ordering flipped, and both gaps sit inside run-to-run variance of about | |
| 0.5 ms with fully overlapping min/p90 distributions. The correct statement is | |
| that **fp16 buys no speed on this model**, not that it is slower. | |
| The reason is that the Apple Neural Engine is a net loss here. Pinned compute | |
| units, fp16, iPhone 16: | |
| | compute unit | median | | |
| |---|---| | |
| | ALL (default) | 9.5 ms | | |
| | CPU_AND_NE | 9.7 ms | | |
| | CPU_AND_GPU | 11.8 ms | | |
| | **CPU_ONLY** | **7.2 ms** | | |
| `ALL` and `CPU_AND_NE` are indistinguishable, so the default routes to the ANE, | |
| and dropping the ANE is 24% faster. That also explains why fp16 shows no gain: | |
| on the ANE path, conv math precision is not the bottleneck. This is a question | |
| about Core ML compute-unit defaults, not about MLX. | |
| ## Context | |
| MLX was measured behind Core ML on every convolutional vision model tested. The | |
| margin varies widely with architecture, so each model carries its own number | |
| rather than a blanket figure. | |
| Two things compound the gap. MLX weight quantization cannot shrink a conv model: | |
| `quantize_model_` only rewrites `nn.Linear` and embedding modules, and | |
| EfficientNet-V2-S holds just 6.0% of its parameters in its single `nn.Linear`, | |
| so 4-bit quantization buys about 5% file size. Core ML by contrast reaches the | |
| convolutions. | |
| ## Scope | |
| This concerns convolution-dominated vision models. It does **not** generalize: | |
| - `rfdetr-nano` (conv + transformer) measured only **1.24x** behind Core ML. | |
| - The `lfm2.5` text encoders measured **2.7-3.1x faster on MLX** than XNNPACK. | |
| MLX suits matmul-heavy graphs. The right backend depends on model class, so this | |
| file is not a statement about MLX in general. | |
| ## Availability history | |
| MLX for this model was only ever published on `main` / `v0.10.0`. No earlier tag | |
| (`v0.9.0` and below) carried an MLX artifact for it, so there is no pinned | |
| revision from which these files can still be fetched. They remain recoverable | |
| from this repository's git history. | |