Some further info on M6, (but also expeiencing the same issue on A20):
Same issue here on an M6 Mac mini (Mac18,5, Core AI architecture h18g), macOS 27.0 (26A425), Xcode 27.0, so it isn’t limited to A20 Pro. In our case, attention isn’t involved: the slow graphs are long unrolled LSTM recurrences.
Model: a music source-separation network split into 22 FP16 Core ML components, loaded with .cpuAndNeuralEngine. MLComputePlan places every device-assigned operation on the Neural Engine.
Cold first load on M6, per component (cached reloads are 0.01–0.04 s):
6 stage prefixes (57-step bidirectional LSTM): 12.7–12.9 s each
3 recurrent cells (52 steps): 8.0–8.2 s each
3 recurrent cells (34 steps): 4.9–5.0 s each
Conv encoders/decoder: 1.1–3.1 s each
Whole model (22 components): about 123–145 s
The same compiled .mlmodelc files on M4:
An isolated 26-step LSTM: 1.3 s on M4 vs 4.4 s on M6.
The 26/17-step variant of the whole model: about 25 s on M4 vs about 103 s on M6.
Compile time grows with the number of unrolled steps. For one LSTM: 8 steps 1.2 s, 19 steps 3.1 s, 57 steps 11.7 s. Almost all of it is ANECompilerService CPU time. Loading components in parallel only reduced the total from 145 s to 121 s, because the compiler largely processes them one at a time.
Compiler crash: a 338-step LSTM graph that loads in 21 s on M4 crashes ANECompilerService on M6, with “Thread stack size exceeded due to excessive recursion” in SubgraphIdentification::ComputeReachableMap (called from ComputeReachabilityMaps / AddBoundaryTensorsForAcyclicCluster). Core ML retries, caches nothing, and every later load takes about 113 s again.
Core AI didn’t help us. For the 57-step prefix component:
Core ML: 12.8 s
Core AI precompiled with coreai-build compile --architecture h18g --preferred-compute neural-engine: 16.3 s (still runs ANECompilerService on first load)
Core AI source .aimodel specialized on device: 161.6 s
Just to note, model specialization on an iphone 16 pro max finished in about 30 seconds (iOS 27)