애플 ANE 구조 분석: 데이터 흐름과 연산 모델
Retrospectively Reverse-Engineering Apple's Neural Engine
Hacker News애플의 신경망 엔진(ANE)을 재분석하여, 최신 NPU가 GPU에 통합되는 추세 속에서도 ANE의 근본적인 설계 의도와 작동 원리를 깊이 있게 파헤쳤습니다.
- ANE는 단순 연산 능력을 넘어 데이터 흐름(dataflow) 자체를 극도로 최적화하여 트랜스포머 워크로드를 처리하며, 활성화 함수 같은 비선형 연산을 하드웨어 레벨에서 통합합니다.
- 이 분석은 초기 CNN 모델과 현대 트랜스포머가 요구하는 데이터 처리 방식의 근본적인 차이를 명확히 보여주며, 미래 AI 가속기 설계 방향에 중요한 통찰을 제공합니다.
- ANE는 연산별 코드를 사용하지 않고, 미리 컴파일된 고정 크기의 '작업 기술자(task descriptor)' 스트림을 로드하여 구동하는 독특한 시스템 구조를 가지고 있습니다.
ANE의 설계는 단순한 MAC 유닛을 넘어, 데이터가 어떻게 이동하고 처리되는지(dataflow)에 초점을 맞추고 있습니다. 초기에는 CNN 워크로드를 목표로 했으나, 기반 워크로드에서는 예측 가능한 재사용 패턴이 중요했습니다. ANE 아키텍처는 이러한 데이터 흐름 효율성을 극대화하도록 설계되었으며, 이는 2017년 A11 Bionic부터 ML 워크로드가 어떻게 변화해 왔는지에 대한 가정을 보여줍니다.
ANE의 컴퓨팅 코어는 총 16개가 있으며, 각 코어는 128개의 병렬 MAC 레인(FP16 또는 INT8)을 갖습니다. 이 구조를 통해 단일 사이클에서 2048개의 병렬 감소 연산을 수행할 수 있습니다. 여기서 중요한 점은 개별 MAC 레인이 행렬의 어떤 차원을 따라 감소하는지 알지 못하며, 도트 프로덕트는 오퍼랜드가 코어에 매핑되고 스케줄링되는 방식에 의해 결정된다는 것입니다.
ANE는 활성화 함수와 같은 비선형 연산을 하드웨어 수준에서 통합합니다. 예를 들어, `tanh()`나 `ReLU` 같은 함수를 처리할 때 중간 메모리 왕복(round-trip)을 피하고 MAC 합계가 바로 후속 활성화 블록으로 전달됩니다. 특히 `tanh`의 경우 33개의 FP16 워드를 사용하는 조각별 선형 LUT(Piecewise-linear LUT) 방식을 통해 구현됨이 확인되었습니다.
ANE 드라이버는 일반적인 연산 코드(`CONV`, `MATMUL`)를 직접 호출하지 않습니다. 대신, 모든 신경망 연산은 이미 컴파일된 '작업 기술자(task descriptor)' 스트림으로 변환됩니다. 소프트웨어는 이 고정 크기의 작업 블롭을 메모리에 로드하고, `TM_PUSH` 명령을 통해 하드웨어에 작업을 제출하며, 이후 완료 시 인터럽트를 받습니다.
용어 풀이
- 트랜스포머
- 오늘날 대부분의 언어 모델이 쓰는 신경망 구조. 문장 속 단어들의 관계를 한꺼번에 계산해요.