苹果神经引擎:架构、编程与性能

2026-08-20 07:07:53

Apple芯片的专有核心

Apple神经网络引擎 (ANE) 是一种专用的机器学习加速器,已成为苹果硬件策略的基石。自A11和M1芯片以来,ANE已集成到每部iPhone和Mac中,为FaceID、Siri和实时图像处理等关键系统功能提供动力。尽管已部署在超过25亿台设备中,但ANE的内部工作原理在很大程度上仍未公开。与拥有公共指令集的CPU和GPU不同,ANE通常只能通过Core ML等高级框架进行访问。

图0:ANE是Apple SoC中的一个独立组件,与CPU和GPU共享统一内存架构。

最近的研究成功逆向工程了ANE,全面阐述了其架构、编程模型和性能。这项工作将ANE从一个“黑盒”转变为一个透明表征的加速器。通过分析从芯片内部数值到系统级固件的一切,研究人员已经确定了ANE优于其他片上处理器的特定“最佳点”,以及可能瓶颈性能的硬性限制。

硬件架构:fp16数据路径和宽累加器

ANE被设计为一个固定功能的乘法累加 (MAC) 数组,针对16位浮点 (fp16fp16fp16) 运算进行了优化。虽然现代神经网络通常使用各种数据类型,但ANE架构是严格的fp16fp16fp16端到端。即使开发者提供fp32fp32fp32或int32int32int32注释,硬件后端也会将其转换为fp16fp16fp16进行执行。

ANE架构中的一个关键发现是使用了“宽累加器”。标准的fp16fp16fp16算术在长时间的加法序列(例如大型矩阵乘法中)容易出现精度损失。为了缓解这个问题,ANE采用了一个更宽的、fp32fp32fp32级的累加器来维护运行和。这使得引擎能够处理大型操作,例如将16,00016,00016,000个1相加,其保真度远高于标准的半精度硬件。

图1:ANE计算几何涉及一个多核MAC阵列,它使用跨步轮询分配来分发输出通道 (CoutC_{out}Cout​)。

计算核心的几何结构随代际扩展。例如,M1/H13M1/H13M1/H13芯片包含四个物理计算核心,而M5/H17M5/H17M5/H17芯片则扩展到16个核心。在每个核心内,输出通道以组为单位进行处理。研究确定了一个特定公式,用于硬件如何根据核维度 (kW,kH,kDk_W, k_H, k_DkW​,kH​,kD​) 划分这些通道:

OCG=min⁡(⌊8/(kW⋅kH⋅kD)⌋,byte_cap)\text{OCG} = \min(\lfloor 8 / (k_W \cdot k_H \cdot k_D) \rfloor, \text{byte\_cap})OCG=min(⌊8/(kW​⋅kH​⋅kD​)⌋,byte_cap)

这种精确的划分决定了硬件能够为不同卷积尺寸有效地饱和其MAC单元的程度。

软件栈:从Core ML到芯片

访问ANE涉及一个复杂的、多层级的软件栈。对于大多数开发者来说,其过程始于Core ML,它充当放置规划器。然而,底层的执行由一个名为Espresso的私有运行时管理。

图2:软件栈从高级应用层一直延伸到在引擎本身上运行的实时固件 (styxstyxstyx)。

执行模型遵循“一次编译,多次调度”的范式。神经网络首先被降级为专有中间表示 (MIL),然后降级为 ANE 的后端方言 (anec.∗anec.*anec.∗)。这会生成一个编译后的程序包(通常为 .e5 或 .hwx 格式)。当应用程序运行模型时,系统守护进程 (aned) 协调对硬件的访问,验证程序签名并确保安全隔离。

此堆栈的一个独特功能是能够保持“常驻状态”。在典型的加速器中,每次操作数据都必须在主机和设备之间来回移动。ANE 支持缓冲区别名,使其能够将数据(例如大型语言模型的 KV-缓存)在多次调度中常驻在加速器上。这显著降低了自回归任务的开销。

性能特征:ANE 屋脊线

为了理解 ANE 的性能限制,研究人员构建了一个“屋脊线模型”。该模型确定了两个主要上限:计算上限(MAC 单元的工作速度)和内存上限(数据从 DRAM 移动的速度)。

对于 M1/H13M1/H13M1/H13 ANE,针对开销隔离的矩阵乘法,峰值计算吞吐量约为 12 fp16 TFLOP/s12 \text{ fp16 TFLOP/s}12 fp16 TFLOP/s。然而,大型操作的实际持续性能通常更接近 4.8 fp16 TFLOP/s4.8 \text{ fp16 TFLOP/s}4.8 fp16 TFLOP/s。在内存方面,ANE 可以从内存控制器总共 85 GB/s85 \text{ GB/s}85 GB/s 的可用带宽中持续输出约 51 GB/s51 \text{ GB/s}51 GB/s 的权重流。

图 3:脊点表示从带宽受限状态过渡到计算受限状态所需的算术强度。

这两个上限的交点是“脊点”,对于 M1 ANE 来说,大约是 141 FLOP/byte141 \text{ FLOP/byte}141 FLOP/byte。算术强度低于此点的操作,例如简单的向量加法或 LLM 的解码阶段,受内存带宽限制。高于此点的操作,例如密集卷积,受 MAC 阵列的原始速度限制。

研究还量化了“调度下限”——每个操作约 0.23 ms0.23 \text{ ms}0.23 ms 的固定延迟开销。这意味着对于非常小的神经网络层,设置硬件所花费的时间超过了实际执行计算所花费的时间。在这种情况下,在 CPU 上运行操作实际上可能更快。

内存管理和工作集限制

对于开发人员来说,最重要的发现之一是 ANE 的片上内存阈值。ANE 使用高速内部 SRAM 来存储中间值(激活)。在 M1/H13M1/H13M1/H13 代中,此工作集限制精确为 2 MB2 \text{ MB}2 MB。

图 4:超过 SRAM 阈值的张量必须“平铺”并从 DRAM 流式传输,导致显著的性能损失。

如果单个层的激活超过此 2 MB2 \text{ MB}2 MB 限制,ANE 将无法再将数据完全保留在片上。它必须转而将数据流式传输到速度慢得多的统一 DRAM。这种转变会产生一个性能“悬崖”,其中张量大小的轻微增加可能导致速度多倍下降。新一代已经扩大了此限制,其中 M5/H17M5/H17M5/H17 提供了 4.72 MB4.72 \text{ MB}4.72 MB 的工作集。

操作能力和数值边缘情况

虽然 ANE 支持广泛的操作,但其“能力平面”并非无限。这项研究涉及对可达操作进行全面的“探测”,揭示了一些宣传的功能实际上并未在硬件后端中实现。例如,尽管编译器在技术上接受 3D3D3D 卷积,但它在多代 ANE 上均未能执行,通常会回退到 GPU 或 CPU。

此外,ANE 表现出与 IEEE 754 标准不同的特定数值行为:

符号处理: 有符号零在进行倒数运算前通常会失去其符号。

错误强制: 不确定形式常常被强制为正零,并且 NaN(非数字)被强制为正无穷大。

切片饱和: 在 M1/A14M1/A14M1/A14 芯片上存在一个显著的硬件危险,其中特定的“切片”操作可能导致超过 409440944094 的值悄无声息地溢出到无穷大。

这些边缘情况对于在 ANE 上进行科学计算或训练的研究人员至关重要,因为它们可能导致模型权重与标准 GPU 训练相比出现细微偏差。

机器学习部署的意义

ANE 的详细特性化为为不同任务选择合适的处理器提供了路线图。研究得出结论,由于其极高的能效,ANE 是视觉模型、编码器和中等规模矩阵乘法的卓越选择。在某些测试中,对于卷积密集型工作负载,ANE 的能效比 GPU 高出 14.514.514.5 倍。

然而,GPU 在以下方面仍然更胜一筹:

大型方阵乘法(超出 ANE 的核心扩展能力)。

长序列注意力(通常超过 2 MB2 \text{ MB}2 MB 的 SRAM 限制)。

带宽受限的任务,如 LLM 自回归解码。

对于科学任务,ANE 的 fp16fp16fp16 纯净数据路径和宽累加器使其能够高精度地处理复杂操作,例如离散傅里叶变换 (DFT),规模可达 N=2048N=2048N=2048。即使是小规模矩阵分解(最高 n=32/20n=32/20n=32/20)也可以展开成静态 ANE 图,以实现高速执行。

通过提供这些有记录的限制和行为,这项工作使开发人员能够超越试错优化。他们不再将 Apple 神经网络引擎视为一个神秘的黑盒,而是可以设计模型,使其有意地符合 2 MB2 \text{ MB}2 MB 的 SRAM 阈值,避免数值饱和点,并利用 12 TFLOP/s12 \text{ TFLOP/s}12 TFLOP/s 的计算上限来创建更快、更高效的设备端 AI。