- Apple Neural Engine(ANE) की आंतरिक संरचना का सीधे विश्लेषण कर CoreML को बायपास करके हार्डवेयर तक सीधे पहुंचने का तरीका लागू किया गया
- CoreML की abstraction layer हटाकर
_ANEClient API के जरिए मॉडल compile·load·execute सीधे किए गए
- MIL(Machine Learning Intermediate Language) और E5 binary format का विश्लेषण कर यह पुष्टि की गई कि ANE fixed operation primitives पर आधारित graph execution engine है
- IOSurface shared memory का उपयोग कर GPU↔ANE के बीच zero-copy data transfer की संभावना साबित की गई
- यह शोध M4 ANE के वास्तविक performance measurement और training की संभावना की पड़ताल करने वाली 3-भाग की श्रृंखला का पहला भाग है, और Apple के निजी हार्डवेयर पर पहले direct control case के रूप में महत्वपूर्ण है
मानव–AI सहयोग के जरिए reverse engineering approach
- यह शोध मानव शोधकर्ता और Anthropic के Claude Opus 4.6 के सहयोग से किया गया
- मानव ने खोज की दिशा तय की, और AI ने data analysis व code writing किया
- लक्ष्य इस प्रश्न से शुरू हुआ: “क्या Apple Neural Engine पर सीधे मॉडल को train कराया जा सकता है”
- Apple, ANE की ISA, आंतरिक संरचना, direct programming interface को सार्वजनिक नहीं करता
- पहुंच केवल CoreML के जरिए संभव है, जिससे हार्डवेयर के व्यवहार को समझना मुश्किल हो जाता है
- इसलिए CoreML से IOKit kernel driver तक पूरे software stack को reverse trace किया गया, और ANE को सीधे control करने वाला code path हासिल किया गया
Neural Engine की संरचना
- ANE, GPU या CPU नहीं बल्कि graph execution engine के रूप में काम करता है
- यह compiled neural network graph को एक atomic operation की तरह execute करता है
- M4 chip का ANE (codename H16G) 16-core, 127 request queue depth, independent DVFS control, और idle होने पर 0mW power gating जैसी क्षमताएं रखता है
- Apple ने A11 (2017) में पहली बार 2-core ANE पेश किया था, जिसके बाद हर generation में इसका विस्तार हुआ
मौजूदा शोध से अलग क्या है
- पहले से उपलब्ध सार्वजनिक सामग्री:
- Matthijs Hollemans का ANE behavior documentation और performance analysis
- mdaiter/ane के शुरुआती reverse engineering samples
- Asahi Linux का reverse engineered Linux driver
- apple/ml-ane-transformers का आधिकारिक transformer optimization code
- इस शोध की विशिष्ट उपलब्धियां:
- CoreML के बिना
_ANEClient API तक direct access
- MIL in-memory compile path का decoding
- CoreML overhead हटाने के बाद वास्तविक throughput measurement
- inference-only hardware पर model training
विश्लेषण methodology
- class exploration:
dyld_info -objc कमांड से AppleNeuralEngine.framework के भीतर class list निकाली गई
- method swizzling: CoreML calls को intercept करके private framework call path की पहचान की गई
- binary analysis: compiled E5 bundle को decode कर program format समझा गया
- scaling analysis: matrix size·graph depth·channel count बदलकर hardware topology का अनुमान लगाया गया
- नतीजतन
_ANEClient, _ANEModel, _ANERequest, _ANEIOSurfaceObject, _ANEInMemoryModel आदि 40 से अधिक private classes मिलीं
CoreML बायपास: _ANEClient तक direct access
_ANEClient के जरिए model compile → load → evaluate की पूरी pipeline को सीधे control किया जा सकता है
- CoreML वास्तव में इस प्रक्रिया को लपेटने वाली सिर्फ एक convenience layer है
- ANE अधिकतम 127 concurrent evaluation requests(queue depth) को support करता है, इसलिए high-throughput streaming inference के लिए optimized है
- IOSurface-based I/O buffers का उपयोग कर GPU और ANE के बीच shared memory transfer संभव है
MIL: ANE की input language
- CoreML, ONNX या protobuf की जगह MIL(Machine Learning Intermediate Language) का उपयोग करता है
- static single assignment(SSA) आधारित, type और shape स्पष्ट
- example code में
matmul operation साफ़ दिखता है
- tensor layout NCDHW + Interleave format में है, यानी
[Batch, Channels, Depth, Height, Width] संरचना
E5 binary format
- MIL program को E5 FlatBuffer binary में compile किया जाता है
- 1024×1024 matrix multiplication: 2,688 bytes, 128×128 matrix multiplication: 2,680 bytes
- code size लगभग समान → इसमें matrix operation algorithm नहीं बल्कि parameterized configuration info शामिल है
- इसका मतलब है कि ANE, fixed operation primitives(Conv, MatMul, Elementwise आदि) को जोड़कर graph execute करता है
in-memory compile path
_ANEInMemoryModelDescriptor का उपयोग कर disk access के बिना memory के भीतर MIL compile किया जा सकता है
- मुख्य समस्याएं और समाधान:
milText को NSString नहीं बल्कि NSData(UTF-8 bytes) चाहिए
weights को name–data mapping dictionary के रूप में देना होता है
- अंदरूनी तौर पर temporary directory access चाहिए → write permission जरूरी
- Apple के internal code में
Desctiptor टाइपो मिला
hardware profile
- IOKit analysis के अनुसार, ANE के पास स्वतंत्र power·clock management(DVFS) चैनल है
ANE_ADCLK_TRIG, ANE_PPT_TRIG जैसे कई hardware/software triggers मौजूद हैं
- ANECompiler.framework में दिखे supported operations में Conv सबसे मुख्य operation primitive है
- Part 2 में 1×1 Conv को MatMul में बदलने पर 3x performance improvement दिखाया जाएगा
IOSurface protocol
- सभी data input/output IOSurface shared memory objects के जरिए किए जाते हैं
- यह GPU texture sharing mechanism जैसा ही है
- GPU↔ANE zero-copy pipeline बनाने की संभावना है
compile cache structure
- ANE compiler, E5 binary को disk पर cache करता है
- path:
~/Library/Caches/.../com.apple.e5rt.e5bundlecache/.../H16G.bundle/
- पहली compile में 20–40ms, cache hit होने पर तुरंत execution
- inference के लिए फायदेमंद, लेकिन training में weights बदलने पर फिर से compile करना पड़ता है
अब भी अनदेखे क्षेत्र
- अभी तक विश्लेषित नहीं की गई classes:
_ANEChainingRequest — कई मॉडलों को single dispatch में जोड़ने की संभावना
_ANESharedEvents, _ANESharedSignalEvent, _ANESharedWaitEvent — GPU↔ANE synchronization के लिए fence/signal
_ANEPerformanceStats — hardware performance counters की संभावना
_ANEVirtualClient — multi-process virtualization access की संभावना
- अब भी अपुष्ट बातें:
- ANE core microarchitecture और ISA
- graph के भीतर operations का core allocation कैसे होता है
- clock frequency और SRAM structure
आगे की योजना
- Part 2: matrix multiplication scaling, SRAM bottleneck, Conv और MatMul performance comparison, Apple के “38 TOPS” दावे की जांच
- Part 3: ANE पर neural network training
- सारा code github.com/maderix/ANE के
ane/ directory में सार्वजनिक है
- test environment: M4 Mac Mini, macOS 15.x
2 टिप्पणियां
संदर्भ: Asahi Linux out-of-tree ANE ड्राइवर
Hacker News की राय
मुझे लगता है कि लेखक ने सचमुच शानदार काम किया है, और मैं Part 3 का इंतज़ार कर रहा हूँ
मैं ज़्यादातर lightgbm, sklearn, xgboost जैसी Python ML libraries और numpy इस्तेमाल करता हूँ
जानना चाहता हूँ कि क्या ऐसे operations Apple hardware पर accelerate होते हैं, और क्या इसे benchmark करने का कोई आसान तरीका है
ज़्यादातर benchmarks C function level पर होते हैं, इसलिए समझ नहीं आता कि high-level libraries में इसका असर पड़ता भी है या नहीं
ChatGPT ने मुझे Intel Mac और Apple Silicon की तुलना करने को कहा, यह सुनकर हँसी आ गई। शायद इसी वजह से लोग अभी भी AI को नापसंद करते हैं
वजह यह है कि NPU हर manufacturer के हिसाब से काफ़ी specialized होता है, इसलिए open source developers के लिए support देना मुश्किल होता है
Apple ANE भी इसका अपवाद नहीं है, और यह रिसर्च उसी समस्या को Apple ANE तक सीमित करके हल करने की कोशिश लगती है
Inside the M4 Apple Neural Engine के अनुसार यह 6.6 FLOPS/W performance देता है, और इस्तेमाल न होने पर पूरी तरह बंद हो जाता है इसलिए 0W consume करता है
Apple ने “38 TOPS INT8” को FP16 19 TFLOPS × 2 के रूप में निकाला, लेकिन असली hardware INT8 operations को दोगुनी रफ़्तार से execute नहीं करता
इस तरह की calculation अपनाना Apple के लिए भी कुछ बढ़ा-चढ़ाकर कही गई बात जैसा लगता है
LLM इतने विश्वसनीय लगने वाले झूठे दावे बना सकते हैं कि विशेषज्ञ भी धोखा खा जाएँ
संदेह है कि क्या हर तथ्य को हाथ से verify किया गया था। इस मायने में पहले से चेतावनी दे देना अच्छा रहा, अब इसे पढ़े बिना भी काम चल जाएगा
लेख में भी ऐसे कुछ अजीब benchmarks दिखते हैं
LLM से पहले भी अकादमिक दुनिया में manipulated papers और reproduce न हो पाने वाली studies भरी पड़ी थीं
आख़िरकार ऐसे analysis पर भरोसा तभी किया जा सकता है जब ज़्यादा engineer उसे verify करें
बहुत-सी बातें विषय से असंबंधित हैं
शायद यही उन कारणों में से एक होगा जिनकी वजह से MLX project lead Awni ने Apple छोड़ा
लेकिन इस बार का लेख उन बातों को और गहराई से verify और विस्तार देता है, यह अच्छी बात है
अगर CoreML बड़े matmul operations में लगभग कोई overhead नहीं जोड़ता, तो local AI frameworks में ANE को prefill के लिए इस्तेमाल करने की काफ़ी गुंजाइश है
हालाँकि decode चरण memory bandwidth से सीमित रहता है, और matmul को 1x1 convolution में बदलने की प्रक्रिया inefficient है, इसलिए साफ़ फ़ायदा मिलना तय नहीं है
उसका नाम Core AI बताया जा रहा है, और कहा जा रहा है कि इससे third-party LLM को apps में integrate करना आसान होगा
संबंधित लेख: Bloomberg newsletter
फिर भी इसे पढ़ना काफ़ी उपयोगी और दिलचस्प रहा
लेख में दिया गया Github repository भी साथ में देखने लायक है
इस हिस्से में AI द्वारा लिखे जाने के निशान काफ़ी साफ़ दिखते हैं
ANE reverse engineering से भी ज़्यादा अहम बात यह है कि Manjeet ने AI की मदद से अपनी engineering क्षमता को कितना बढ़ाया है
यही वह दौर है जब AI developers की productivity को तेज़ी से accelerate कर रहा है