逆向工程 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)。
逆向工程揭示了针对现代工作负载的两个关键缺陷:
- 非对称路径: 内核内存是只读的,无法从 L2 填充,这迫使所有新内核必须从 DRAM 加载。这对于 CNNs 是一种合理的假设,但对于张量角色经常变化的 transformers,这非常不利。
- 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