
最近,一位开发者通过逆向工程破解了苹果的私有 API,成功解锁了苹果神经引擎(Apple Neural Engine,简称 ANE)用于训练神经网络的能力。这意味着,搭载 Apple Silicon 芯片的 Mac 设备,在 AI 模型训练方面拥有了新的可能性。消息源自 X 平台的一条推文,其中展示的 GitHub 项目 maderix/ANE 迅速引发了广泛关注。推文称,ANE 的算力可与一张 NVIDIA RTX 3060 Ti 显卡相媲美,但功耗却仅为后者的四十分之一,而这块强大的芯片在大多数时间里可能都处于闲置状态。

这究竟是一项怎样的技术突破?它能否真正让个人开发者在自己的 Mac 上高效训练 AI 模型?我们来深入解析一下这个项目的背景、原理和实际应用。
ANE 是什么?苹果为什么“藏私”?
苹果神经引擎(ANE)是苹果自 2017 年 iPhone X 开始集成在芯片中的专用 AI 加速器。发展到 M4 芯片,其峰值浮点运算能力(TFLOPS)已相当可观,远超苹果官方宣传的整数运算性能(TOPS)。它主要用于设备端的机器学习推理任务,如 Siri、照片处理和面容 ID,特点是高效率、低功耗。
然而,苹果官方仅允许通过 CoreML 框架使用 ANE 进行模型推理(即运行已训练好的模型),明确禁止了训练功能(即从数据中学习模型参数)。官方解释是硬件限制,但许多开发者怀疑,这一限制更多是出于商业和生态策略的考虑。
而 ANE 项目正是对这一限制的直接挑战。开发者 maderix 通过逆向工程,挖掘并直接调用了苹果的私有 API,证明了 ANE 硬件本身完全支持包括前向传播和反向传播在内的完整训练流程。该项目已在 GitHub 开源,获得了大量关注。
项目核心原理:逆向工程如何“解锁” ANE?
项目的核心技术在于绕过官方的 CoreML 限制,直接与 ANE 的底层驱动交互。苹果的 ANE 使用一种名为 MIL(Model Intermediate Language)的中间语言来描述计算图,但官方 API 不暴露训练接口。
maderix 的方法是通过 Objective-C 在内存中动态生成 MIL 程序,然后利用逆向发现的私有函数(如 _ANECompiler)进行编译,最后通过 _ANEClient 等接口将编译好的模型提交给 ANE 执行。输入和输出数据通过 IOSurface 共享内存进行传递,避免了不必要的数据拷贝开销。
整个训练流程分为两部分:
- 前向传播:ANE 负责处理 RMSNorm、QKV 投影、Scaled Dot-Product Attention(SDPA)和前馈网络(FFN)。模型权重作为常量嵌入到 MIL 程序中,每个训练批次都需要重新编译程序。
- 反向传播:ANE 负责计算输入数据的梯度(dx),而权重梯度(dW)的计算则由 CPU 的 Accelerate 框架(如
cblas_sgemm)处理。项目通过精心设计的 6 个 ANE 计算内核来实现整个流程。
项目包含多项性能优化:
- 通道优先布局:优化数据排布,减少转置操作。
- 异步计算:让 CPU 的梯度计算与 ANE 的前向传播并行执行。
- 操作融合:将多个操作融合进单个内核,减少内核调用次数。
- 绕过编译限制:ANE 驱动对单个进程的编译次数有限制,项目通过
exec() 重启进程来绕过。
从项目仓库的 train_large.m 文件中,可以一窥其核心代码逻辑(已简化):
// 生成MIL程序
MILProgram *fwdAttn = generateFwdAttnMIL(dim, seq);
// 编译并提交
ANEModel *model = compileInMemory(fwdAttn);
dispatchToANE(model, inputSurface, outputSurface);
根据测试数据,在单个 Transformer 层(dim=768, seq=512)上,每一步训练耗时约 9.3 毫秒,实测算力约为 1.78 TFLOPS,ANE 硬件利用率约为 11.2%。相比最初的基线版本,性能已有显著提升。
关键功能与支持操作
这个项目并非简单的概念验证,它已经支持一个完整的训练循环:
- 支持模型:目前主要针对单层 Transformer 进行优化,为扩展至多层奠定了基础。
- 覆盖操作:支持前向传播(如 RMSNorm、SwiGLU FFN)和反向传播(如 SiLU_bwd、softmax grad)中的关键操作。
- CPU 辅助:残差连接、损失函数计算、Adam 优化器等步骤由 CPU 处理。
- 基准测试工具:提供了测量 ANE 峰值算力和 SRAM 带宽的工具。
项目仓库结构清晰,主要代码位于 training/ 目录下。当然,它也存在一些局限性,例如 ANE 利用率仍有较大提升空间,某些复杂操作(如因果掩码)的支持还不完善,目前主要使用合成数据进行训练。
安装与快速上手
环境要求很简单:搭载 Apple Silicon 的 Mac,运行 macOS 15 或更高版本。无需额外的第三方依赖库。
编译命令如下:
xcrun clang -O2 -framework Foundation -framework IOSurface \
-framework CoreML -framework Accelerate -ldl -lobjc \
-o train_large training/train_large.m
运行编译后的程序:
./train_large
程序运行后会输出类似下面的训练日志:
Step 0: Loss=10.5, Time=9.3ms
Step 1: Loss=9.8, Time=9.3ms
对于初学者,建议从 tiny_train.m 这个更简单的示例开始。仓库内还包含一系列单元测试(test_*.m),可以用来验证各个计算内核的正确性。
实际应用场景与潜在影响
这一技术突破打开了新的想象空间:你可以利用家中闲置的 Mac Mini,在本地隐私安全地微调一个小型语言模型。其应用场景可能包括:
- 个人AI助理:在本地微调个性化模型,完全保障数据隐私。
- 边缘计算:为手机、iPad 等设备上的小型模型提供本地训练能力。
- 教育与科研:大幅降低学生和研究人员进行 AI 实验的硬件门槛和成本。
社区反响热烈,有人计划将其集成到更大的机器学习框架中,也有人担心苹果会在未来的系统更新中封堵这些私有 API。项目作者 maderix 也明确表示,这目前是一个研究原型,而非 ready-for-production 的工具。
面临的挑战与未来展望
挑战不仅来自技术层面:
- 性能瓶颈:当前 ANE 利用率不高,扩展到多层模型需要更复杂的调度。
- 兼容性与风险:仅支持较新的 Apple Silicon 和 macOS 版本,且依赖私有 API,存在被苹果后续系统更新封堵的法律和技术风险。
- 开发门槛:需要深入了解 Objective-C、ANE 架构和 MIL,对开发者要求较高。
尽管如此,ANE 项目揭示了一个重要的方向:AI 训练的民主化可能正从我们的桌面电脑开始。它促使人们思考,如何更充分地利用已有的硬件算力。未来,如果苹果能官方开放更多 API,或者社区能持续优化此类项目,个人设备作为 AI 工作站的潜力将不可小觑。
如果你对底层 AI 加速和硬件探索感兴趣,不妨去 GitHub 上查看这个项目,尝试运行一下示例代码,亲身体验这种前沿的技术探索。欢迎在云栈社区与其他开发者交流你的实践心得和看法。
参考链接: