逆向苹果神经引擎:用私有 API 在 ANE 上训练 Transformer 的技术突破与边界
逆向苹果神经引擎:用私有 API 在 ANE 上训练 Transformer 的技术突破与边界
核心观点:这是软件封锁被打破,而非硬件突破
这个项目(maderix/ANE)最值得关注的洞见,不是"ANE 能训练了",而是作者在 README 里直接点明的那句话:"the barrier has always been software support, not hardware capability"(障碍一直是软件支持,而非硬件能力)。
Apple 从 2017 年 A11 芯片开始内置 ANE,25 亿台以上的活跃设备都搭载了这颗专用加速器,但公开接口(CoreML)始终只允许推理。M4 芯片的 ANE 标称 FP16 算力达 15.8 TFLOPS,相当于一块功耗极低的 AI 协处理器,却被人为限制在"只出不进"的推理模式。这个项目通过逆向工程私有 API_ANEClient/_ANECompiler,直接构造 MIL(Model Intermediate Language)计算图,绕过 CoreML 的限制,实现了完整的前向传播 + 反向传播。
关键机制:动态权重打包是核心工程技巧
整个项目最巧妙的设计,是"动态权重不重新编译"这一技法。ANE 的计算模型天生是静态的——权重作为常量烘焙进程序后,改变权重就意味着重新编译。但作者的解法很聪明:
把激活(activation)和权重(weights)打包进同一个空间输入维度,在 MIL kernel 内部用切片(slice)分开。权重改变时,只需改变输入数据,kernel 本身无需重新编译。
这是当前实现 91ms/步(Stories110M, 109M 参数)和 412ms/步(Qwen3-0.6B, 596M 参数)的根本原因。相比之前学术论文 Orion v1.0 的"每步重新编译"方案(每步耗时 5108ms,其中编译占 83.9%),这一技法带来了量级上的速度差距。
分工设计:前向 + 反向 dx(输入梯度)在 ANE 上跑;dW(权重梯度)的 sgemm 运算放到 CPU(Accelerate cblas),再通过 GCD 异步调度与 ANE eval 重叠执行。这种"CPU 兜底 ANE 擅长"的分工,是在 ANE 不支持所有算子的约束下的务实选择,而不是理想状态。
对比:不同于 MLX 和 CoreML Training,这条路代价明确
相比同类路径:
- CoreML Training(官方):Apple 通过
MLUpdateTask开放了有限的迁移学习接口,但只支持固定拓扑、固定 batch,实质上是 fine-tune 而非 training,且无法控制计算是否落在 ANE 上。 - MLX(Apple 官方 ML 框架):基于 Metal GPU,在 Apple Silicon 上性能优秀,文档完整,但计算落在 GPU,不触及 ANE。
maderix/ANE(本项目):强制使用 ANE,跳过 CoreML/Metal 全部中间层,代价是依赖私有未文档化 API,可能随任意 macOS 更新失效。
从能效角度看,ane-guide.readthedocs.io(独立于本项目的 ANE 硬件研究资料)测量显示 ANE 在 256 通道 3×3 卷积上比同芯片 GPU快 3.8 倍、能效高 9 倍,每次浮点操作仅 0.37 皮焦。这意味着如果 ANE 的训练能力能被充分利用,能效收益是有实质意义的,而不仅仅是"我能在上面跑"的面子工程。
推演:这意味着 NPU 训练的软件生态即将被迫重估
目前 ANE 训练的利用率只有峰值的 5–9%,大量 element-wise 算子还在回退到 CPU。但这件事的推演价值并不在于"今天能训练什么大模型",而在于:
这证明了 NPU 的训练封锁是一个软件决策,而非硬件限制。当一个人用一个周末就能逆向出训练路径,这对其他 NPU 厂商(高通、联发科、三星)都构成压力——行业会加速推动 NPU 开放训练接口,或者逆向社区会重演同样的事情。
INT8 W8A8 量化已经实现 1.88× 吞吐提升(35.1 TOPS vs 18.6 TOPS),而这条路在 ANE 上才刚开始——随着 MIL 算子覆盖率提升、dW 梯度逐步迁移到 ANE、SDPA 因果掩码问题被硬件或编译器解决,利用率从 5–9% 提升到 30–40% 并非不可能。接下来,社区 fork(项目本身鼓励 fork,MIT 协议)将成为主要推力,作者已明确表示不打算维护成大型框架。
边界局限:五个具体的"不适用"
- 生产环境不可用:
_ANEClient等私有 API 无稳定性保证,macOS 小版本更新就可能静默失效。ANE Guide 也明确说明这类直接访问"不适合商业发布软件"。 - ANE 编译器有硬性限制:每个进程约 119 次编译后资源泄漏导致崩溃,目前通过
exec()重启 + checkpoint 绕过,这在生产系统中是不可接受的 workaround。 - 利用率低,不替代 GPU 训练:5–9% 的峰值利用率意味着,对于任何超过小型研究模型的任务,M4 GPU(通过 MLX 或 Metal)在今天仍然是更合理的训练选择。Orion 论文也发现 ANE 推理性能(170 tok/s)低于 CPU(283 tok/s),训练阶段更不可与 GPU 对比。
- SDPA 因果掩码无效:ANE 硬件级别忽略
attn_mask,导致因果注意力必须分解为 ANE + CPU 混合执行,这是硬件约束,不是工程问题。 - 仅验证 M4,macOS 15+:M1/M2/M3 上的行为未充分验证,部分约束可能不同。
交叉验证
信源一:ROM4AI 博客对 Orion 论文的分析(2026-03-16,独立于原作者)
Orion 系统是另一个基于同一私有 API 路径构建的独立研究项目。其结论与maderix/ANE高度吻合:
- 同样发现 ~119 次编译限制,通过 exec() 重启解决(两个项目独立发现同一问题,互相验证了这个 bug 的真实性)
- Orion 补充记录了 14 个新发现的 ANE 约束,包括 concat 操作被拒、GELU 激活失败、fp16 溢出(动态范围仅 ±65504)等,这些都是
maderix/ANE文档未完整覆盖的细节 - Orion v2.0 的增量编译(绕过
ANECCompiler()调用)与maderix/ANE的动态权重打包是两种不同的技术路径,均有效,说明绕过编译瓶颈的方案有多条
信源二:ane-guide.readthedocs.io(独立 ANE 硬件研究,2026-06-27 更新,完整覆盖 A11–A18 及 M1–M5 系列)
这份独立的 ANE 硬件指南为原文的核心主张提供了强有力的技术背书:
- 确认 CoreML 只提供"放置提示"而非强制调度,开发者无法确认计算是否真的落在 ANE 上,这与原文的出发点完全一致
- 确认 ANE 在标准卷积任务上比 GPU 快 3.8×、能效高 9×,为"训练的软件障碍而非硬件障碍"的论点提供了硬件数据支撑
- 同时指出:CoreML 文档与实际行为不一致(部分宣传算子从未真正下降到 ANE),这反映了 Apple 软件层对 ANE 的抽象并不可信,进一步说明逆向直接访问的必要性
两个信源均认同原文核心观点,并提供了不同角度的补充而非反驳。
个人启发:对不同角色的具体行动建议
对 ML 研究者:这个项目最有价值的部分不是训练结果本身,而是 MIL 动态权重打包、IOSurface 零拷贝、GCD 异步梯度重叠这三个具体工程技巧——即便你不用 ANE,这些模式在其他受限 NPU 上有直接参考价值。
对端侧 AI 应用开发者:现阶段,不要把这个项目用于生产。私有 API 依赖、119 次编译限制、exec() 重启这些问题意味着它是研究原型,不是可交付的 SDK 组件。真正有价值的时机是:等待社区 fork 中出现稳定的 C-callable 桥接层(项目已提供bridge/目录的雏形),或等 Apple 在压力下开放训练接口。
对平台工程师:这件事最重要的战略信号是——ANE 训练的软件壁垒已经被证明可以被打破,Apple 的 CoreML 推理专用策略会在未来面临社区持续压力。高通的 Hexagon NPU、联发科的 APU 同样是私有封闭接口,相同路径的逆向工程在移动端 SoC 上迟早会发生。
延伸思考
Apple 的应对策略会是什么:Apple 可以在任意 macOS 更新中修改私有 API 签名令整个项目失效,但也可以选择将训练接口正式开放(类比 Metal 最初也是封闭的)。如果 ANE 训练社区持续增长到足够大的体量,Apple 将面临"封堵还是拥抱"的战略决策——历史上 Metal 的开放先例表明,Apple 最终会在生态压力足够大时选择拥抱。
5–9% 利用率的上限在哪里:当前低利用率的根本原因是大量算子(element-wise、normalization、loss)仍在 CPU,以及 dW 梯度的 sgemm 也在 CPU 完成。如果这些算子逐步迁移到 ANE,利用率天花板在哪里?ANE 的 SRAM 容量(约 16MB)和 DMA 带宽是否会成为新的瓶颈?这需要专门的 SRAM 带宽 profiling 来回答。
这是否意味着联邦学习/端侧训练的真正可行路径:个性化模型的端侧微调(而非完整训练)是实际需求最明确的场景。ANE 的能效优势在长时间小 batch fine-tuning 场景下可能远比吞吐量数字重要——一个能在不充电情况下完成 LoRA 适配器更新的场景,才是 ANE 训练价值的正确应用框架,而不是"在 Mac 上训大模型"。
📚 参考来源
- GitHub - maderix/ANE: Training neural networks on Apple Neural Engine via reverse-engineered private APIs · GitHub
