Fabian (@onthexitter69) asked for someone with a 256–512 GB M3 Ultra to test oMLX PR #3059 — experimental DeepSeek-V4-Flash hybrid ANE prefill, which splits three dense projections per layer across both ANEs, an optional CPU slice, and the GPU during prompt processing. This box qualifies: M3 Ultra, 512 GB, macOS 26.5.1.
625.3 vs 581.9 tok/s prefill. Matches Fabian's +7.5% exactly.
616.8 vs 595.0 tok/s, MTP off. Fabian measured +4.3%.
Chunks stay at 2048 tokens, below the 4096 ANE shape. Nothing dispatches.
Same harness as the PR's own benchmarks: oMLX's built-in throughput benchmark (code_python corpus, TG=128, greedy), prompt lengths 16,384 and 32,768, a fresh server and a cleared SSD cache for every configuration, PR-default ANE settings (4096 fixed shape, 12.5% CPU share, 12 threads). Branch deepseek-ane at head f77c2ba, isolated source build.
| Checkpoint | MTP | Prompt | GPU PP | Hybrid PP | Change | Fabian's |
|---|---|---|---|---|---|---|
| 0731-oQ2.5e | Off | 16k | 598.7 | 637.3 | +6.4% | +6.3% |
| 0731-oQ2.5e | Off | 32k | 581.9 | 625.3 | +7.5% | +7.5% |
| 0731 fp8 | Off | 16k | 612.9 | 631.0 | +3.0% | +3.5% |
| 0731 fp8 | Off | 32k | 595.0 | 616.8 | +3.7% | +4.3% |
| 0731 fp8 | On | 16k | 595.3 | 615.6 | +3.4% | +3.6% |
| 0731 fp8 | On | 32k | 578.0 | 596.7 | +3.2% | +4.4% |
Checkpoints: Jundot/DeepSeek-V4-Flash-0731-oQ2.5e (public export; Fabian's -mtp variant is gated on HF, so its MTP rows are absent — his oQ2.5e column above is that variant with MTP off) and official deepseek-ai/DeepSeek-V4-Flash-0731 fp8, the same checkpoint on both rigs. PP figures are the benchmark's reported processing_tps. Decode throughput was unaffected in every configuration, matching the PR's claim that decode and DSpark verification stay on the GPU.
Two full benchmark matrices ran before any ANE work actually happened. Both looked like they were testing the feature. Neither was.
--no-cache, our usual honest-prefill protocol): with no paged cache there is no block realignment, prompt chunks stay at the 2048-token default, and every prefill logs ane_full_tiles=0. Hybrid PP equalled GPU PP to within noise: 614.3 vs 612.9 at 16k.SchedulerConfig.prefill_step_size defaults to 2048 and the boundary logic only ever shrinks chunks to block edges. It never widens them. Still zero ANE execution: 613.6 vs 612.9.The trap is that everything reports success. The load log says Eagerly compiled 86 DeepSeek ANE procedures ... into 2 instance-pinned ANE programs. The benchmark's feature check passes, because it verifies that procedures compiled — not that any chunk was ever wide enough to dispatch one. The equivalent Qwen path logs an explicit warning for exactly this shape mismatch; the DeepSeek path inherits the machinery but the default step still silently loses to the 4096 shape.
Next to the PR's existing block-size assignment in omlx/engine/batched.py:
if scheduler_config.prefill_step_size < ane_prefill_sequence_length:
scheduler_config.prefill_step_size = ane_prefill_sequence_length
After that, the serve log shows effective_step=4096 and chunk_tokens=4096 on every full chunk, and every gain in the table above appears immediately. Nothing else was changed.
One trace-tooling footnote: the per-request ane_full_tiles counter reads 0 even when the ANE is genuinely running — it keys off a benchmark field only the Qwen settings path populates. chunk_tokens in the serve log is the reliable signal.
prefill_step_size floor alongside the existing block realignment (or a loud runtime warning like the Qwen path's). On Fabian's rig the chunks evidently arrive at 4096; on a stock config here they did not, and the next tester will hit the same silent no-op.ane_full_tiles trace counter so the serve log tells the truth for this model family too.onthehub97/omlx @ deepseek-ane (f77c2ba), custom kernels compiled. Production oMLX on this box (brew 0.6.3rc2, the :8020 service) untouched; everything ran on :8022.mtp.* tensors and oMLX correctly reports it mtp_compatible: false.Round 2 retest at the updated head (chunking fix upstream, combined dispatch): oMLX PR #3059 Round 2. Related earlier work on this site: oMLX Dual-ANE Prefill on Three Macs (the Qwen-family ANE story on Ultra/M4/M5). Sources: PR #3059, Fabian's test request.