Model on the ANE
Core AI
LFM2.5-2.6B, prefill and decoding entirely on the Neural Engine, with the 328M-parameter DSpark drafter.
Energy-efficient local inference: ANE, GPU and heterogeneous execution
Established LLM engines execute on the GPU and leave the Neural Engine unused. Using Core AI, we ran inference entirely on the ANE and compared it with the GPU in terms of latency, energy, temperature and battery life.
Objective Determine whether LLM inference on the ANE, alone or combined with the GPU, can reduce energy consumption relative to MLX on the GPU while maintaining latency and output fidelity.
lower than MLX on the GPU
comparable to MLX on the GPU
within the 8-bit quality class
We implemented an ANE engine on Core AI and compared it with MLX on the GPU at 4-bit and 8-bit, with and without DSpark speculative decoding. Energy is the integral of whole-system power as reported by the System Management Controller.
Model on the ANE
Core AI
LFM2.5-2.6B, prefill and decoding entirely on the Neural Engine, with the 328M-parameter DSpark drafter.
Systems
3
Mac mini M2 Pro and M4 Pro, MacBook Pro M3 Pro on AC power, on battery and in Low Power Mode.
Workload
100
Assistant requests of 800 to 2,600 tokens, with and without tool calls; long context up to 32K tokens.
Quality
98.4%
Teacher-forced top-1 agreement with bf16, against 99.0% for MLX 8-bit, within the 8-bit quality class.
Decoding is memory-bound, since each token requires a full read of the model weights. The ANE attains only 44 to 70 percent of the GPU's effective memory bandwidth, whereas its compute throughput is 2.0 to 2.7 times higher. Efficient decoding on the ANE therefore requires amortizing each weight read over several tokens.
Four FFN blocks of the model, INT8 weights. The GPU runs the same Core AI program.
Tokens per call
One ANE call verifies a draft tree of up to 64 tokens, accepting the longest path that matches the target, plus the target's next token. Tokens and tree shape are illustrative.
M4 Pro, tok/s. With tree verification, ANE decoding throughput is about 5 percent lower than that of GPU 8-bit with DSpark.
Assistant requests with prompts of 800 to 2,600 tokens. ANE-only inference used the least energy on all three machines and had the lowest latency in the 8-bit quality class on the M2 Pro and M4 Pro; on the M3 Pro, GPU 8-bit with DSpark was 6 percent faster.
M4 Pro: ANE-only inference used 3.4× less energy than GPU 8-bit + DSpark and 4.1× less than GPU 8-bit, with −20% and −43% latency, respectively. The system drew 21 W against 48 W with GPU 8-bit.
less energy per request
than MLX 8-bit + DSpark; 3.0–4.1× less than MLX 8-bit
lower latency
than MLX 8-bit without speculation, on all three machines
lower latency
than MLX 8-bit + DSpark on the M4 Pro, 2.77 s against 3.45 s
The advantage arises in both phases. On the M4 Pro, ANE prefill was 1.9 times faster than GPU prefill and consumed about one fifth of the energy per token, while ANE decoding required 158 mJ per token, compared with 409 to 575 mJ for the 8-bit GPU configurations.
MacBook Pro with M3 Pro. Battery life is projected from 20 minutes of intermittent use; power, temperature and fan speed were recorded over 20 minutes of continuous requests, each run starting from an idle machine after a cooldown.
One request every 30 s. The idle projection without a model is 21.1 h.
1.5 to 1.8 times the GPU configurations. Projected from average discharge power, not measured to full discharge.
Hover over the chart to read values. No thermal throttling was observed in any configuration.
On the ANE, the cost of attention grows faster than the KV cache, so attention dominates each call at long context. MLX computes attention on the GPU in a single fused kernel that scales considerably better, whereas weight reads remain more energy-efficient on the ANE. Split execution therefore assigns only the weight-free attention core to the GPU and keeps all weight reads on the ANE.
M4 Pro, tree decoding with ANE-only and split execution.
Split prefill
Split tree decoding
split between the ANE and the GPU GPU
M4 Pro, 8-bit quality class, 256 generated tokens.
ANE only
Split tree decoding
Split prefill + GPU 8-bit
These rankings hold for 256-token answers. Longer answers favor split prefill, because at long context the GPU decodes faster than the ANE.
Local assistants may also rely on auxiliary models, for example a prompt router that selects a route or tool before generation. We evaluated such a router on the ANE, both in isolation and alongside chat generation on the GPU.
A 350M-parameter bidirectional encoder, M4 Pro.
128 tokens
1,024 tokens
128 tokens
1,024 tokens
faster
than MLX on the GPU at 128 tokens
less energy per call
than MLX on the GPU at 128 tokens
lower chat generation rate
with the router on the ANE, against 20% with it on the GPU
Neither unit was preferable for every workload. The results support selecting the execution backend per request, according to context size, power source, GPU load and user preference, such as a low-power mode. The configurations below had the lowest measured energy or latency on the tested machines.
Typical requests
ANE only
Lowest energy on every Mac; fastest at 8-bit quality on the M2 Pro and M4 Pro.
Lowest first-token latency
Co-prefill
ANE and GPU share the prefill; 2.3× lower time to first token on the M4 Pro.
Long contexts
Split execution
On the M4 Pro, 20–24% faster than GPU 4-bit at 58–61% less energy.
Battery and sustained load
ANE only
Projected battery life 1.5–1.8× longer than with the GPU configurations.
Routing next to generation
Encoder on the ANE
Leaves the GPU generation rate nearly unchanged at moderate call rates.
The tech note provides the implementation details, the experimental methodology, the full results on all three machines, and a discussion of their practical implications and limitations.