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 + dxdx(输入梯度);
  • CPUdWdW(权重梯度,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 错误,只能打包进空间维度。
⚠️ 使用私有未文档化 API(_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

results matching ""

    No results matching ""