逆向工程 Apple Neural Engine (ANE) 架构

Apple Neural Engine 是一个固定功能的 CNN 加速器

Apple Neural Engine (ANE) 并不是一个拥有独立指令集架构 (ISA) 的通用处理器;相反,它是一个专门为卷积神经网络 (CNN) 的密集张量归约和可预测重用模式设计的固定功能数据流引擎。虽然它可以执行 transformer 工作负载,但它是通过将这些负载映射到针对 2017 年时代图像处理优化的数据路径上实现的,这导致了在现代 LLM 推理中的显著性能瓶颈。

计算架构与 MAC 数据路径

ANE 由 16 个计算核心组成,每个核心包含 128 个 FP16 (或 256 INT8) 并行乘累加 (MAC) 通道。

时间维度的标量归约

每个 MAC 通道在时间维度上执行标量归约,将两个操作数相乘并将乘积加到一个 32 位累加器寄存器中。一个 16 核 ANE 提供 2,048 个并行 MAC 通道,在芯片上进行空间归约。硬件并不编码特定的层类型(例如 4 通道 CNN);相反,操作数的映射和任务的调度决定了该操作是点积、矩阵乘法还是卷积。

精度与累加

内部归约使用定点数学进行。乘法器是 16 位的,结果在作为 FP16 输出之前,以 Q16.16 格式累加在 32 位寄存器中。累加器在 $\pm 2^{15}$ 处饱和,这对应于具有 16 位小数位的有符号 32 位定点值的范围。

非线性激活与 LUTs

ANE 使用一个包含 33 个条目的分段线性查找表 (LUT) 来实现非线性激活(例如 tanh)。硬件将输入缩放到 LUT 坐标,并在相邻条目之间进行线性插值以产生平滑的输出。该激活块直接融合在 post-MAC 路径中,从而避免了中间内存的往返传输。

调度器与任务描述符

与解析变长指令流的 GPU 不同,ANE 通过任务描述符 (TDs) 进行控制。这些 TDs 并不是可执行代码,而是序列化的寄存器文件转储,用于配置 ANE 的硬件寄存器以进行单次数据路径遍历。

命令提交

驱动程序向任务管理器提交固定大小的 TDs 命令流。硬件随后使用 "ControlDMA" 引擎将这些配置值从 DRAM 复制到 ANE 的物理寄存器空间。一旦配置完成,ANE 执行任务并在完成后向 ARM64 核心发出中断。

任务队列 (TQ) 与 BARs

ANE 利用八个任务队列 (TQs) 作为启动上下文。该系统的一个关键组件是包含 32 个条目的基地址寄存器 (BAR) 表。由于 ANE 缺乏 GPU 风格的动态 load/store 指令,所有虚拟地址访问必须相对于编译时提供的硬编码 BAR 基地址偏移量进行。

内存层次结构与带宽瓶颈

ANE 的性能受限于严格的内存层次结构,该结构旨在最大限度地减少 CNN 内核的 DRAM 流量。

本地内存布局

  • KMem: 每个核心 16x 64 KiB SRAM 用于内核 (总计 1 MiB)。
  • L1: 每个核心 16x MAC 输入暂存区。
  • L2: 所有核心共享的单个 2 MiB L2 SRAM。

DRAM Roofline 模型

对于 M1 ANE,要避免受限于 DRAM 带宽,所需的算术强度为每字节 162 次操作。如果工作负载提供的片上重用率低于此比例,增加计算能力将不会提高性能。

DMA 引擎限制

ANE 采用三种不同的 DMA 引擎:KernelDMASrc (权重 $\rightarrow$ KMem), TileDMASrc (DRAM $\rightarrow$ L2), 和 TileDMADst (L2 $\rightarrow$ DRAM)。

逆向工程揭示了针对现代工作负载的两个关键缺陷:

  1. 非对称路径: 内核内存是只读的,无法从 L2 填充,这迫使所有新内核必须从 DRAM 加载。这对于 CNNs 是一种合理的假设,但对于张量角色经常变化的 transformers,这非常不利。
  2. s 串行执行: 实验数据表明,KernelDMA 和 TileDMA 请求是串行发送的。它们的执行时间是累加的,这意味着 ANE 无法通过重叠权重和激活值的获取来饱和系统 DRAM 带宽。

洞察总结

技术分析和社区讨论突出了从 CNN 时代 ANE 到现代 AI 硬件的转变:

  • CNN 与 Transformer 映射: 用户指出,将 transformers 移植到 ANE 核心需要“假装它是一个 CNN”,使用带有 1x1 卷积的 4D 张量来模拟矩阵乘法。
  • 硬件 演进: 虽然 M1 ANE 是一个独立模块,但据报道,较新的架构(如 M5)已将 ANE 核心集成到 GPU 核心中,这标志着向 transformer-based LLM 所需的更灵活数据流的转向。
  • 早期创新: 尽管存在当前的瓶颈,ANE 仍然代表了对专用 AI 硅片的重大早期尝试,早在 2017 年就出现在 A 系列芯片中。

"ANE 的架构设计过于主观,难以围绕它构建一个通用的加速器平台... [它] 揭示了 Apple 在 A11 Bionic (2017) 中愿意首先在硅片上实现的 ML 工作负载假设,以及这反映了从 CNN 时代 NPU 到如今运行 transformer 工作负载的 GPU 的转变。"

DRAM 读取吞吐量对比

Device/Engine Sustained Read Bandwidth
ANE KernelDMA 37.99 GB/s
ANE TileDMA 59.08 GB/s
GPU (Metal) 77.70 GB/s

由于 ANE DMA 请求是串行的,无论其峰值 MAC 吞吐量如何,ANE 在单 token decode(LLM 推理中最耗内存的部分)方面的速度从根本上比 GPU 慢。

Sources

相关

  • 项目
  • Dispatch
  • Dispatch
  • 项目
  • Dispatch