maderix/ANE:在 Apple Neural Engine 上逆向出训练
本页是 NPU 路线路线 B 的社区起点(见 端侧训练): GitHub 项目 maderix/ANE [1] 用逆向出的 Apple 私有 API,第一次在 Apple Neural Engine(ANE)上跑通了 Transformer 的 forward + backward——证明 ANE 硬件本身能训练, 障碍从来只是软件支持。
本页源码引用基于固定 commit
d91c984。
1. 逆向了什么
Apple 通过 Core ML 把 ANE 限制为 inference-only。该项目绕开 Core ML, 逆向三个私有入口 [1]:
_ANEClient/_ANECompiler:直接向 ANE 编译并执行自定义计算图;- MIL(Model Intermediate Language)格式:运行时手写生成 MIL 程序文本
(conv 代替线性层、matmul、softmax、逐元素算子),在内存中编译,
不落盘
mlmodelc。
数据面用 IOSurface 共享内存零拷贝传张量([1, C, 1, S] 布局,
FP16 直接 I/O 更快约 37%)。
2. 训练管线:dx 在 ANE,dW 在 CPU
动态管线把权重打包进输入的空间维度,权重更新无需重新编译。 分工:
- ANE:forward + (输入梯度);
- CPU:(权重梯度,Accelerate cblas)、Adam、RMSNorm/残差/loss (vDSP 向量化),并异步重叠以隐藏等待;
- INT8 W8A8 量化:MIL
quantize/dequantize+constexpr_affine_dequantize, 吞吐 1.88×(FP16 峰值 18.6 TOPS → INT8 35.1 TOPS)。
实测训练吞吐(M4,动态管线)[1]:
| 模型 | 参数量 | 单步 |
|---|---|---|
| Stories110M(12L,MHA) | 109M | 91 ms |
| Qwen3-0.6B(28L,GQA) | 596M | 412 ms |
另有 GPU↔ANE 零拷贝推理管线(GPU prefill → ANE decode)。
3. 诚实的限制
作者明确定位为研究项目而非生产框架 [1]:
- ANE 利用率仅约 5–9% 峰值 [1],大量逐元素算子仍回落 CPU;
- causal mask:ANE 的 SDPA 忽略
attn_mask,只能拆成 Q@K^T(ANE)→ mask+softmax(CPU)→ scores@V(ANE); - 每进程约 119 次编译上限(编译器泄漏资源),用
exec()重启绕过; - FP16 梯度下溢:backward matmul 需要 loss scaling(
256 × 层数); - 单输入约束:多输入请求报 0x1d 错误,只能打包进空间维度。
_ANEClient 等),无稳定性保证,随系统更新可能失效;仅限研究用途 [1]。
💡 意义 它回答了"ANE 能不能训练"——能。在此刻画工作的基础上, Orion 把 ANE 训练做成了完整的端到端系统。
参考文献
[1] maderix. ANE: training neural networks on Apple Neural Engine via reverse-engineered private APIs[EB/OL]. GitHub, 2026. https://github.com/maderix/ANE (commit d91c984,2026-09-21 访问)
© 2026 Yang Huan · yanghuan9812@qq.com