Apple Neural Engine 사후 리버스 엔지니어링: M1 ANE 내부 구조 해부
Retrospectively Reverse-Engineering Apple's Neural Engine
TL;DR Highlight
M1 ANE를 뜯어보니 CNN용 데이터플로와 고정 크기 명령 스트림으로 설계돼 있었다
Who Should Read
Apple Silicon에서 온디바이스 LLM 추론을 돌리려는데 ANE가 왜 기대만큼 안 나오는지 궁금한 앱·추론 개발자
Core Mechanics
- ANE는 CNN 데이터플로에 맞춰져 있다
- MAC(곱셈-누산) 유닛 자체는 CNN과 어텐션에서 똑같이 dot product를 한다.
- ANE를 특화시킨 건 MAC이 아니라 입출력이 들어오고 머무르고 이동하는 데이터플로다.
- 저자는 autoregressive decode가 이 데이터플로가 가정한 '예측 가능한 재사용 패턴'을 깼다고 본다.
- 코어는 16개, MAC 레인은 2048개
- 코어마다 FP16 128레인(INT8은 256레인)이 있다.
- 16코어면 2048개 레인이 병렬로 돈다.
- 누산기는 32비트이고, 실험에서 2^15에서 포화(saturate)됐다.
- 활성화 함수는 33칸 룩업 테이블
- tanh를 컴파일해 보니 FP16 값 33개가 tanh(i/8) 샘플과 일치했다.
- 인접 칸은 선형 보간되며, 임펄스 테스트에서 삼각형 출력이 나왔다.
- ReLU는 계수 없이 모드 1로 처리되고, 스케일·바이어스는 컴파일러가 convolution 가중치에 합쳐 넣었다.
- 드라이버는 CONV나 RELU 명령을 모른다
- 연산은 이미 컴파일된 task descriptor(TD) 스트림이다.
- 드라이버는 TM_ADDR와 TM_SIZE를 쓰고 TM_PUSH로 제출만 한다.
- 끝나면 하드웨어가 ARM64 코어에 인터럽트를 올린다.
Community Reactions
- M4 ANE 후속 분석과의 관계를 묻는 의견
- M4 이후 ANE에 추가 기능이 있는지, 같은 구조의 고성능판인지 궁금하다는 댓글이 있었다.
- 글 서두가 ANE와 M5 GPU의 Neural Accelerator(NAX)를 혼동한다는 지적도 있었다.
- M6와 A20에는 ANE 블록이 두 배로 들어간다는 소문이 있다는 의견이었다.
- 트랜스포머를 CNN인 척 포팅했다는 경험
- 4D 텐서의 마지막 축에 시퀀스를 두고 matmul 대신 1x1 conv를 썼다는 댓글이 있었다.
- 다른 댓글은 ANE에서 Qwen 계열 모델을 돌려 디코드 약 4 tok/s와 15~20 tok/s를 얻었다고 했다.
- Apple이 곧 Core AI 프레임워크를 낸다는 정보
- 올가을 Core AI가 나오며 CPU·GPU·Neural Engine에서 최신 모델 구조를 쓸 수 있다는 댓글이 있었다.
- 기존 Core ML의 PyTorch·TensorFlow 범위를 넘어선다는 설명이었다.
How to Apply
- 모델의 ANE 실행 여부부터 확인하기
- 오늘 Core ML 모델을 Xcode Instruments로 돌려 연산이 ANE·GPU·CPU 중 어디서 실행되는지 확인하라.
- ANE에서 빠지는 레이어 목록을 적어 두라.
- 트랜스포머를 ANE용 CNN 형태로 바꿔 시험하기
- 어텐션과 FFN의 matmul을 1x1 convolution으로 바꾸고 시퀀스를 마지막 축에 두는 변환을 한 레이어에서 먼저 시도하라.
- 변환 전후 지연 시간을 비교하라.
- 디코드는 GPU, 프리필은 ANE로 나눠 재보기
- 같은 모델을 compute unit 설정만 바꿔 ANE 전용, GPU 전용, 전체로 측정하라.
- 토큰/초를 표로 만들어 배포 대상을 정하라.
Try It
# Claude나 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: ANE 적합성 점검)
나는 Core ML로 온디바이스 모델을 배포하려는 개발자야. ANE는 CNN 스타일 데이터플로에 맞춰져 있고 autoregressive decode는 재사용 패턴이 예측 불가라 불리하다는 글을 읽었어.
내 모델 구조:
{{모델 구조 설명(레이어 종류, 시퀀스 길이, 배치)}}
다음을 알려줘:
1. ANE에서 돌기 어려울 레이어와 이유
2. matmul을 1x1 conv로 바꾸고 시퀀스를 마지막 축에 두는 변환 방법
3. ANE/GPU/CPU별로 측정해야 할 지표와 측정 순서
이어서 해 볼 것: 답변대로 한 레이어만 변환해서 compute unit별 지연 시간을 비교해 봐.Terminology
관련 논문
Mercury 3: 규모를 키운 diffusion LLM, 초당 1,000토큰 이상
Diffusion LLM을 40배 키웠더니 속도 4~8배, 품질은 속도 특화 모델 수준
Timestral: Mistral의 시계열 파운데이션 모델
209M 파라미터 시계열 모델이 3대 벤치마크 1위, CPU에서도 돌아간다
DeepSeek V4.1 Flash 1017 (Max) 성능·속도·가격 분석
DeepSeek V4.1 Flash 1017 Max는 지능 지수 45에 211 tok/s, 입력 $0.30
LLM 프록시를 직접 안 돌리면 무슨 일이 벌어지는지 어떻게 아나
자체 LLM 프록시를 세웠더니 키·모델·캐시 미스를 직접 볼 수 있다
DeepSeek V4.1 Flash 1017: 싼 가격에 1M 컨텍스트를 주는 에이전트용 모델
DeepSeek V4.1 Flash 1017은 입력 $0.05/M, 1M 컨텍스트의 에이전트용 모델
DeepSeek-V4.1-Flash-1017 공개: 더 짧게 생각하고 더 빠르게 일하는 에이전트용 모델
DeepSeek V4.1 Flash 마이너 업데이트로 코딩·에이전트 벤치 점수↑, 실행 시간·출력 길이↓
Llmspeed: 로컬 LLM 속도를 하드웨어 구매 전에 체감해 보는 시뮬레이터
GPU·모델을 고르면 로컬 LLM 속도를 미리 체감하게 해 주는 시뮬레이터