Native libraries for React Native ExecuTorch, built from software-mansion-labs/executorch @ @ms/separate-backends-1.4.1 (249a515d).
Rebuilds the Vulkan backend, the core library and the MLX backend. vulkan-android-arm64-v8a, vulkan-android-x86_64, core-android-arm64-v8a, core-android-x86_64, core-ios and mlx-ios change; the other seven artifacts are the v0.10.3-libs files byte for byte.
Vulkan picks up the pointwise conv hoist and tile changes, the im2col threshold, the 5x5 depthwise Mali tile, the conv2d local-workgroup fix and a narrower int4 linear tile on Mali (upstream pytorch/executorch#22909).
Core fixes a program whose constant segment holds only zero-length tensors being sent down the deprecated constant_buffer path, which is compiled out and aborts at load with 0x23 (upstream pytorch/executorch#22788). Any fully delegated model hits this; RF-DETR on Vulkan could not load before.
MLX bounds the lazy graph: the interpreter built a whole method before evaluating anything, so every intermediate was live at once (upstream pytorch/executorch#22932, issue #22513). It now evaluates once pending intermediates exceed a byte budget, so only methods that actually allocate pay for it. iPhone 16, whisper-small int8, full pipeline: peak 1194.4 -> 692.8 MB and 885 -> 831 ms, i.e. 1.72x less memory and slightly faster. macOS peaks: whisper tiny 550 -> 343 MB, small encode 1106 -> 350 MB, SmolLM2-135M 1197 -> 497 MB. Output bit-identical. ET_MLX_EVAL_BUDGET_MB=0 restores the old path.
Measured on device, median of 21 pooled iterations per arm, old runtime vs new:
| model | Mali-G76 | Adreno 840 |
|---|---|---|
| efficientnet_v2_s | 3.79x faster | 1.04x faster |
| blazeface | 2.23x faster | - |
| yolo26_seg_n 640 | 1.94x faster | - |
| selfie_seg | 1.77x faster | 1.13x faster |
| pp_ocrv6 | 3.73x faster | 1.11x faster |
| rfdetr_nano | aborted 0x23 -> runs | aborted 0x23 -> runs |
| all-MiniLM-L6-v2 | unchanged | unchanged |
Provenance: rebuilding the control commit 0e18ed63 reproduced the published v0.10.3-libs arm64 libvulkan_executorch_backend.so and libxnnpack_executorch_backend.so md5s exactly, and libexecutorch.so to every byte outside its 20-byte GNU build-id.
The sweep covered 29 of the 30 published Vulkan variants on both GPUs, 3 interleaved rounds each. No regression: every row that read slower overlaps across its own rounds. The two LLM/VL files are deferred to a separate LLM sweep.