- Menganalisis langsung struktur internal Apple Neural Engine (ANE) dan mengimplementasikan cara untuk melewati CoreML serta mengakses hardware secara langsung
- Menghapus lapisan abstraksi CoreML dan melalui API
_ANEClient melakukan kompilasi, pemuatan, dan eksekusi model secara langsung
- Menganalisis MIL (Machine Learning Intermediate Language) dan format biner E5, lalu mengonfirmasi bahwa ANE adalah mesin eksekusi graf berbasis primitif operasi tetap
- Membuktikan kemungkinan transfer data zero-copy antara GPU↔ANE menggunakan memori bersama IOSurface
- Riset ini adalah bagian pertama dari trilogi yang mengeksplorasi pengukuran performa nyata dan kemungkinan pelatihan pada ANE M4, dan bermakna sebagai kasus kontrol langsung pertama terhadap hardware privat Apple
Pendekatan reverse engineering melalui kolaborasi manusia–AI
- Penelitian dilakukan melalui kolaborasi antara peneliti manusia dan Anthropic Claude Opus 4.6
- Manusia menentukan arah eksplorasi, sementara AI melakukan analisis data dan penulisan kode
- Tujuan riset berangkat dari pertanyaan, “Apakah model bisa dilatih langsung di atas Apple Neural Engine”
- Apple tidak mempublikasikan ISA, struktur internal, maupun antarmuka pemrograman langsung untuk ANE
- Akses hanya dimungkinkan melalui CoreML, yang menyulitkan pemahaman terhadap cara kerja hardware
- Karena itu, peneliti menelusuri balik seluruh software stack dari CoreML hingga driver kernel IOKit dan mengamankan jalur kode untuk mengendalikan ANE secara langsung
Struktur Neural Engine
- ANE berbentuk graph execution engine, bukan GPU atau CPU
- Seluruh graf jaringan saraf yang telah dikompilasi dijalankan sebagai satu operasi atomik
- ANE pada chip M4 (codename H16G) memiliki 16 core, kedalaman antrean 127 request, kontrol DVFS independen, dan pemutusan daya 0mW saat idle
- Apple pertama kali memperkenalkan ANE 2-core pada A11 (2017), lalu terus memperluasnya di tiap generasi
Perbedaan dibanding riset sebelumnya
- Materi publik yang sudah ada:
- Dokumentasi cara kerja dan analisis performa ANE oleh Matthijs Hollemans
- Sampel reverse engineering awal dari mdaiter/ane
- Driver Linux hasil reverse engineering dari Asahi Linux
- Kode optimasi transformer resmi dari apple/ml-ane-transformers
- Capaian unik riset ini:
- Berhasil mengakses API
_ANEClient secara langsung tanpa CoreML
- Menguraikan jalur kompilasi MIL di memori
- Mengukur throughput nyata setelah menghapus overhead CoreML
- Menjalankan pelatihan model pada hardware yang khusus untuk inferensi
Metodologi analisis
- Eksplorasi kelas: mengekstrak daftar kelas di dalam
AppleNeuralEngine.framework dengan perintah dyld_info -objc
- Method swizzling: mencegat panggilan CoreML untuk mengidentifikasi jalur pemanggilan framework privat
- Analisis biner: menguraikan bundle E5 yang telah dikompilasi untuk memahami format program
- Analisis scaling: mengubah ukuran matriks, kedalaman graf, dan jumlah channel untuk menyimpulkan topologi hardware
- Hasilnya, ditemukan lebih dari 40 kelas privat seperti
_ANEClient, _ANEModel, _ANERequest, _ANEIOSurfaceObject, dan _ANEInMemoryModel
Melewati CoreML: akses langsung ke _ANEClient
- Melalui
_ANEClient, seluruh pipeline kompilasi → pemuatan → evaluasi model bisa dikendalikan secara langsung
- CoreML pada dasarnya hanyalah lapisan kemudahan yang membungkus proses tersebut
- ANE mendukung hingga 127 request evaluasi simultan (queue depth), sehingga optimal untuk inferensi streaming throughput tinggi
- Dengan buffer I/O berbasis IOSurface, dimungkinkan transfer memori bersama antara GPU dan ANE
MIL: bahasa input ANE
- CoreML menggunakan MIL (Machine Learning Intermediate Language), bukan ONNX atau protobuf
- Berbasis static single assignment (SSA), dengan tipe dan shape yang dinyatakan eksplisit
- Pada contoh kode, operasi
matmul direpresentasikan dengan jelas
- Layout tensor menggunakan format NCDHW + Interleave dengan struktur
[Batch, Channels, Depth, Height, Width]
Format biner E5
- Program MIL dikompilasi menjadi biner E5 FlatBuffer
- Perkalian matriks 1024×1024: 2.688 byte, perkalian matriks 128×128: 2.680 byte
- Ukuran kode hampir sama, yang berarti hanya memuat informasi konfigurasi terparametrisasi, bukan algoritme operasi matriks itu sendiri
- Ini menunjukkan bahwa ANE mengeksekusi graf dengan menggabungkan primitif operasi tetap seperti Conv, MatMul, dan Elementwise
Jalur kompilasi in-memory
- Dengan
_ANEInMemoryModelDescriptor, MIL bisa dikompilasi di memori tanpa akses disk
- Masalah utama dan solusinya:
milText memerlukan NSData (byte UTF-8), bukan NSString
weights harus berbentuk dictionary pemetaan nama–data
- Secara internal tetap dibutuhkan akses ke direktori sementara, sehingga izin tulis wajib tersedia
- Ditemukan typo
Desctiptor di kode internal Apple
Profil hardware
- Hasil analisis IOKit menunjukkan ANE memiliki kanal manajemen daya dan clock (DVFS) yang independen
- Terdapat berbagai trigger hardware/software seperti
ANE_ADCLK_TRIG dan ANE_PPT_TRIG
- Di ANECompiler.framework, Conv teridentifikasi sebagai primitif operasi inti di antara operasi yang didukung
- Pada Part 2 nanti akan ditunjukkan bahwa mengubah 1×1 Conv menjadi MatMul menghasilkan peningkatan performa 3×
Protokol IOSurface
- Semua input dan output data dilakukan melalui objek memori bersama IOSurface
- Mekanismenya sama dengan berbagi texture GPU
- Ini membuka kemungkinan membangun pipeline zero-copy GPU↔ANE
Struktur cache kompilasi
- Kompiler ANE menyimpan cache biner E5 di disk
- Path:
~/Library/Caches/.../com.apple.e5rt.e5bundlecache/.../H16G.bundle/
- Kompilasi pertama memakan 20–40ms, lalu berjalan seketika saat cache hit
- Ini menguntungkan untuk inferensi, tetapi pelatihan memerlukan rekompilasi saat bobot berubah
Area yang belum dieksplorasi
- Kelas yang belum dianalisis:
_ANEChainingRequest — kemungkinan untuk merangkai beberapa model dalam satu dispatch
_ANESharedEvents, _ANESharedSignalEvent, _ANESharedWaitEvent — fence/signal untuk sinkronisasi GPU↔ANE
_ANEPerformanceStats — kemungkinan penghitung performa hardware
_ANEVirtualClient — kemungkinan pendekatan virtualisasi multiproses
- Hal yang masih belum terkonfirmasi:
- Mikroarsitektur core ANE dan ISA
- Cara alokasi core untuk operasi di dalam graf
- Frekuensi clock dan struktur SRAM
Rencana selanjutnya
- Part 2: scaling perkalian matriks, bottleneck SRAM, perbandingan performa Conv dan MatMul, serta verifikasi klaim “38 TOPS” dari Apple
- Part 3: melatih jaringan saraf di ANE
- Seluruh kode dipublikasikan di direktori
ane/ pada github.com/maderix/ANE
- Lingkungan pengujian: M4 Mac Mini, macOS 15.x
2 komentar
Catatan: driver ANE out-of-tree Asahi Linux
Komentar Hacker News
Menurut saya penulis melakukan pekerjaan yang luar biasa, dan saya menantikan bagian 3
Saya terutama memakai library ML Python seperti lightgbm, sklearn, xgboost, serta numpy
Saya penasaran apakah operasi seperti ini dipercepat di hardware Apple, dan apakah ada cara sederhana untuk melakukan benchmark
Sebagian besar benchmark ada di level fungsi C, jadi saya tidak tahu apakah efeknya terasa di library level tinggi
Saya tertawa ketika ChatGPT menyuruh membandingkan Intel Mac dan Apple Silicon. Mungkin inilah alasan orang masih membenci AI
Alasannya karena NPU sangat spesifik per vendor, sehingga sulit didukung oleh pengembang open-source
Apple ANE juga bukan pengecualian, dan riset ini tampaknya merupakan upaya untuk menyelesaikan masalah itu khusus untuk Apple ANE
Menurut artikel Inside the M4 Apple Neural Engine, performanya mencapai 6.6 FLOPS/W, dan saat tidak dipakai benar-benar dimatikan sehingga konsumsi dayanya 0W
Apple menghitung “38 TOPS INT8” sebagai FP16 19 TFLOPS × 2, tetapi hardware aslinya tidak menjalankan operasi INT8 dua kali lebih cepat
Mengikuti cara hitung seperti ini terasa seperti klaim berlebihan yang tidak biasa untuk Apple
LLM bisa membuat informasi palsu yang terdengar meyakinkan sampai mampu menipu pakar
Sulit yakin semua faktanya diverifikasi manual. Dari sisi ini, saya malah senang diberi peringatan lebih awal jadi saya tidak perlu membacanya
Di artikel itu juga terlihat benchmark aneh seperti itu
Bahkan sebelum LLM, dunia akademik sudah penuh dengan paper yang dimanipulasi dan riset yang tidak bisa direproduksi
Pada akhirnya analisis seperti ini hanya bisa dipercaya jika diverifikasi oleh lebih banyak engineer
Banyak pembahasan yang tidak berhubungan dengan topiknya
Mungkin itu salah satu alasan kepala proyek MLX, Awni, meninggalkan Apple
Tapi bagus bahwa artikel ini mengonfirmasi dan memperluas isinya lebih dalam
Karena CoreML hampir tidak punya overhead pada operasi matmul besar, tampaknya ada banyak peluang bagi framework AI lokal untuk memanfaatkan ANE untuk prefill
Namun tahap decode dibatasi bandwidth memori, dan proses mengubah matmul menjadi convolution 1x1 tidak efisien, jadi manfaatnya tidak sepenuhnya jelas
Namanya Core AI, dan katanya akan memudahkan integrasi LLM pihak ketiga ke dalam aplikasi
Artikel terkait: newsletter Bloomberg
Meski begitu, saya membacanya dengan sangat bermanfaat dan menarik
Repositori Github yang disebut dalam artikel juga layak dijadikan referensi
Bagian itu jelas menunjukkan jejak tulisan AI
Yang lebih penting daripada reverse engineering ANE adalah sejauh mana Manjeet memperluas kemampuan engineering-nya dengan bantuan AI
Sekarang memang era ketika AI mempercepat produktivitas developer