反向工程 Apple Neural Engine (ANE) 架構
Apple Neural Engine 是一個固定功能 CNN 加速器
Apple Neural Engine (ANE) 並非具有獨立指令集架構 (ISA) 的通用處理器;相反地,它是一個專為密集張量歸約 (tensor reductions) 與可預測的重用模式設計的固定功能資料流引擎,旨在處理卷積神經網路 (CNNs) 的運算。雖然它可以執行 transformer 工作負載,但它是透過將其映射到針對 2017 年時代的影像處理進行優化的資料路徑來實現的,這導致了在現代 LLM 推論時出現顯著的效能瓶頸。
計算架構與 MAC 資料路徑
ANE 包含 16 個計算核心,每個核心包含 128 個 FP16 (或 256 INT8) 並行乘加 (MAC) 通道。
時間維度的純量歸約
每個 MAC 通道會在時間維度上執行純量歸約,將兩個運算元進行相乘,並將乘積加到一個 32 位元的累加器暫存器中。一個 16 核心的 ANE 提供 2,048 個並行 MAC 通道,在晶片上進行空間歸約。硬體並不編碼特定的層類型 (例如 4 通道 CNNs);相反地,運算元的映射與任務的調度決定了該操作是點積 (dot product)、矩陣乘法還是卷積。
精度與累加
內部歸約是使用定點數運算進行的。乘法器是 16 位元的,而結果在讀出為 FP16 之前,會以 Q16.16 格式累加在一個 32 位元暫存器中。累加器在 $\pm 2^{15}$ 處飽和,這對應於具有 16 位元小數部分的帶符號 32 位元定點數範圍。
非線性激活函數與 LUTs
ANE 實作了非線性激活函數 (例如 tanh),使用的是一個具有 33 個分段線性查找表 (LUT) 的查找表。硬體將輸入縮放至 LUT 座標,並在相鄰條目之間進行線性插值以產生平滑的輸出。此激活函數模組直接融合在 post-MAC 路徑中,以避免中間記憶體往返。
調度器與任務描述符
與解析變長指令流的 GPU 不同,ANE 是透過任務描述符 (Task Descriptors, TDs) 來控制的。這些 TDs 並非可執行代碼,而是序列化的暫存器檔轉儲 (register-file dumps),用於配置 ANE 的硬體暫存器,以完成單次資料路徑通過。
命令提交
驅動程式會將固定大小的 TDs 提交給任務管理器 (Task Manager)。硬體接著使用 "ControlDMA" 引擎將這些配置值從 DRAM 複製到 ANE 的實體暫存器空間。一旦配置完成,ANE 會執行任務並在完成時向 ARM64 核心發出中斷。
任務隊列 (TQ) 與 BARs
ANE 利用八個任務隊列 (TQs) 作為啟動上下文 (launch contexts)。此系統的一個關鍵組件是具有 32 個條目的基地址暫存器 (Base Address Register, BAR) 表。由於 ANE 缺乏 GPU 式的動態載入/儲存指令,所有的虛擬地址訪問都必須作為從編譯時提供的硬編碼 BAR 基地址偏移量進行的相對偏移量。
記憶體層級結構與頻寬瓶頸
ANE 的效能受限於嚴格的記憶體層級結構,旨在最小化 CNN 核心 (kernels) 處理時的 DRAM 流量。
本地記憶體佈局
- KMem: 每個核心 16x 64 KiB SRAM 用於 kernels,(總計 1 MiB)。
- L1: 16x 每個核心的 MAC 輸入暫存區。
- L2: 所有核心共用的單一 2 MiB L2 SRAM。
DRAM 頂峰模型 (Roofline)
對於 M1 ANE,要避免受限於 DRAM 頻寬,所需的算術強度 (arithmetic intensity) 為每 byte 162 次運算。如果工作負載提供的晶片上重用率低於此比例,增加計算能力將不會提升效能。
DMA 引擎限制
ANE 使用了三種不同的 DMA 引擎:KernelDMASrc (weights $\rightarrow$ KMem), TileDMASrc (DRAM $
ightarrow$ L2), 以及 TileDMADst (L2 $
ightarrow$ DRAM)。
反向工程揭示了針對現代工作負載的兩個關鍵缺陷:
- 非對稱路徑: Kernel 記憶體是唯讀的,無法從 L2 填充,這迫使所有新的 kernels 必須從 DRAM 載入。這對於 CNNs 來說是一個合理的假設,但對於張量角色經常變動的 transformers 而言卻是有害的。
- 串行執行: 實驗數據顯示 KernelDMA 與 TileDMA 請求是串行發送的。它們的執行時間是累加的,這意味著 ANE 能夠透過重疊權重與激活函數的讀取來飽和系統 DRAM 頻寬,是做不到的。
洞察總結
技術分析與社群討論突顯了從 CNN 時代的 ANE 到現代 AI 硬體之間的轉型:
- CNN 與 Transformer 映射: 用戶指出,將 transformers 移植到 ANE 需要 "即可假裝它是 CNN",使用 4D 張量配合 1x1 卷積來模擬矩陣乘法。
- 硬體演進: 雖然 M1 ANE 是一個獨立的模組,但據報導,較新的架構 (例如 M5) 已將 ANE 核心融合進 GPU 核心中,這標示著向更具彈性的資料流 (dataflows) 轉型,以滿足 transformer-based LLMs 的解碼碼 (decoding) 通常需要更靈活的資料流。
- 早期創新: 儘管目前存在瓶 頸,ANE 還是代表了對專用 AI 晶片的一次重要早期押注,早在 2017 年就出現在 A-series 晶片中。
"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 解碼 (LLM 推論中最耗費記憶體的部分) 時,速度從根本上比 GPU 慢。
Sources
相關
- 專案
- Dispatch
- Dispatch
- 專案
- Dispatch