- Apple Neural Engine (ANE) iç yapısı doğrudan analiz edilerek CoreML'i baypas edip donanıma doğrudan erişme yöntemi hayata geçirildi
- CoreML'in soyutlama katmanı kaldırıldı ve
_ANEClient API'si üzerinden model derleme·yükleme·çalıştırma işlemleri doğrudan gerçekleştirildi
- MIL (Machine Learning Intermediate Language) ve E5 ikili formatı analiz edilerek ANE'nin sabit işlem primitifleri tabanlı bir grafik yürütme motoru olduğu doğrulandı
- IOSurface paylaşımlı bellek kullanılarak GPU↔ANE arasında sıfır kopya veri aktarımı olasılığı kanıtlandı
- Bu çalışma, M4 ANE'nin gerçek performans ölçümü ve eğitim yapabilme olasılığını inceleyen üç bölümlük serinin ilk parçası olup Apple'ın kapalı donanımı üzerinde ilk doğrudan kontrol örneği olması açısından önem taşıyor
İnsan–yapay zeka iş birliğiyle tersine mühendislik yaklaşımı
- Araştırma, insan araştırmacı ile Anthropic'in Claude Opus 4.6 modelinin iş birliğiyle yürütüldü
- İnsan araştırmacı keşif yönünü belirledi, yapay zeka ise veri analizi ve kod yazımını üstlendi
- Hedef, “Apple Neural Engine üzerinde doğrudan model eğitimi yapılabilir mi” sorusundan yola çıktı
- Apple, ANE'nin ISA'sını, iç yapısını ve doğrudan programlama arayüzünü açıklamıyor
- Yalnızca CoreML üzerinden erişim mümkün ve bu da donanım davranışını anlamayı zorlaştırıyor
- Bunun üzerine CoreML'den IOKit çekirdek sürücüsüne kadar tüm yazılım yığını tersine izlendi ve ANE'yi doğrudan kontrol eden kod yolu elde edildi
Neural Engine'in yapısı
- ANE, GPU ya da CPU değil, bir grafik yürütme motoru (graph execution engine) biçiminde çalışıyor
- Derlenmiş sinir ağı grafiğinin tamamını tek bir atomik işlem olarak yürütüyor
- M4 çipindeki ANE'nin (kod adı H16G) özellikleri: 16 çekirdek, 127 istek kuyruk derinliği, bağımsız DVFS kontrolü ve boştayken 0mW güç kesme
- Apple, A11'de (2017) 2 çekirdekli ilk ANE'yi sunduktan sonra bunu nesiller boyunca genişletti
Mevcut çalışmalardan farkı
- Daha önceki açık kaynak / kamuya açık çalışmalar:
- Matthijs Hollemans tarafından hazırlanan ANE çalışma belgeleri ve performans analizi
- mdaiter/ane içindeki erken dönem tersine mühendislik örnekleri
- Asahi Linux tarafından geliştirilen tersine mühendislik ürünü Linux sürücüsü
- apple/ml-ane-transformers içindeki resmi transformer optimizasyon kodu
- Bu araştırmanın özgün katkıları:
- CoreML olmadan doğrudan
_ANEClient API erişimi başarısı
- MIL bellek içi derleme yolunun çözülmesi
- CoreML ek yükü kaldırıldıktan sonra gerçek throughput ölçümü
- Yalnızca çıkarım amaçlı donanımda model eğitimi gerçekleştirme
Analiz metodolojisi
- Sınıf keşfi:
dyld_info -objc komutuyla AppleNeuralEngine.framework içindeki sınıf listesi çıkarıldı
- Method swizzling: CoreML çağrıları yakalanarak özel framework çağrı yolu belirlendi
- İkili analiz: Derlenmiş E5 bundle'ları çözülerek program formatı incelendi
- Ölçekleme analizi: Matris boyutu, grafik derinliği ve kanal sayısı değiştirilerek donanım topolojisi çıkarımlandı
- Sonuç olarak
_ANEClient, _ANEModel, _ANERequest, _ANEIOSurfaceObject, _ANEInMemoryModel dahil 40'tan fazla özel sınıf bulundu
CoreML'i baypas etme: _ANECliente doğrudan erişim
_ANEClient üzerinden model derleme → yükleme → değerlendirme hattının tamamı doğrudan kontrol edilebiliyor
- CoreML, aslında bu süreci saran bir kolaylık katmanından ibaret
- ANE, en fazla 127 eşzamanlı değerlendirme isteğini (queue depth) destekliyor; bu da yüksek throughput'lu akış çıkarımı için uygun
- IOSurface tabanlı I/O buffer'ları ile GPU ve ANE arasında paylaşımlı bellek aktarımı mümkün
MIL: ANE'nin giriş dili
- CoreML, ONNX veya protobuf yerine MIL (Machine Learning Intermediate Language) kullanıyor
- Statik tek atama (SSA) tabanlı; tip ve şekil bilgisi açıkça tanımlı
- Örnek kodda
matmul işlemi net biçimde ifade ediliyor
- Tensor yerleşimi,
[Batch, Channels, Depth, Height, Width] yapısındaki NCDHW + Interleave formatında
E5 ikili formatı
- MIL programları E5 FlatBuffer ikili dosyalarına derleniyor
- 1024×1024 matris çarpımı: 2.688 bayt, 128×128 matris çarpımı: 2.680 bayt
- Kod boyutu neredeyse aynı → yalnızca matris işlem algoritması değil, parametreleştirilmiş yapı bilgisi içeriyor
- Bu da ANE'nin sabit işlem primitiflerini (Conv, MatMul, Elementwise vb.) birleştirerek grafiği yürüttüğünü gösteriyor
Bellek içi derleme yolu
_ANEInMemoryModelDescriptor kullanılarak diske erişmeden bellekte MIL derlemek mümkün
- Başlıca sorunlar ve çözümleri:
milText, NSString değil NSData (UTF-8 baytları) gerektiriyor
weights, isim–veri eşlemesi içeren sözlük biçiminde olmalı
- İçeride geçici dizin erişimi gerekiyor → yazma izni şart
- Apple'ın dahili kodunda
Desctiptor yazım hatası bulundu
Donanım profili
- IOKit analizi ANE'nin bağımsız bir güç ve saat yönetimi (DVFS) kanalına sahip olduğunu gösteriyor
ANE_ADCLK_TRIG, ANE_PPT_TRIG gibi çeşitli donanım / yazılım tetikleyicileri mevcut
- ANECompiler.framework içinde görülen desteklenen işlemler arasında Conv temel işlem primitifidir
- Bölüm 2'de 1×1 Conv'nin MatMul'a dönüştürülmesiyle 3 kat performans artışı görülecek
IOSurface protokolü
- Tüm veri giriş/çıkışı IOSurface paylaşımlı bellek nesneleri üzerinden yapılıyor
- GPU texture paylaşım mekanizmasıyla aynı
- GPU↔ANE sıfır kopya pipeline kurulabilme olasılığı var
Derleme önbelleği yapısı
- ANE derleyicisi E5 ikili dosyalarını diskte önbelleğe alıyor
- Yol:
~/Library/Caches/.../com.apple.e5rt.e5bundlecache/.../H16G.bundle/
- İlk derleme 20–40ms, önbellek isabetinde anında çalıştırma
- Çıkarım için avantajlı olsa da eğitim sırasında ağırlık değiştiği için yeniden derleme gerekiyor
Keşfedilmemiş alanlar
- Henüz analiz edilmeyen sınıflar:
_ANEChainingRequest — birden fazla modeli tek bir dispatch içinde bağlama olasılığı
_ANESharedEvents, _ANESharedSignalEvent, _ANESharedWaitEvent — GPU↔ANE senkronizasyonu için fence/signal yapıları
_ANEPerformanceStats — donanım performans sayaçları olasılığı
_ANEVirtualClient — çok süreçli sanallaştırılmış erişim olasılığı
- Hâlâ doğrulanmamış noktalar:
- ANE çekirdek mikro mimarisi ve ISA
- Grafik içindeki işlemlerin çekirdeklere nasıl atandığı
- Saat frekansı ve SRAM yapısı
Gelecek planları
- Bölüm 2: Matris çarpımı ölçekleme, SRAM darboğazı, Conv ve MatMul performans karşılaştırması, Apple'ın “38 TOPS” iddiasının doğrulanması
- Bölüm 3: ANE üzerinde sinir ağı eğitimi gerçekleştirme
- Tüm kodlar github.com/maderix/ANE içindeki
ane/ dizininde açıklandı
- Test ortamı: M4 Mac Mini, macOS 15.x
2 yorum
Not: Asahi Linux out-of-tree ANE sürücüsü
Hacker News yorumları
Bence yazar gerçekten harika bir iş çıkarmış, 3. bölümü de merakla bekliyorum
Ben çoğunlukla lightgbm, sklearn, xgboost gibi Python ML kütüphaneleri ve numpy kullanıyorum
Bu işlemlerin Apple donanımında hızlandırılıp hızlandırılmadığını ve bunu basitçe benchmark etmenin bir yolu olup olmadığını merak ediyorum
Benchmark'ların çoğu C fonksiyonu seviyesinde olduğu için, üst seviye kütüphanelerde etkisi olup olmadığını bilmiyorum
ChatGPT'nin Intel Mac ile Apple Silicon'ı karşılaştırmamı önermesi komiğime gitti. Sanırım insanların hâlâ yapay zekadan hoşlanmamasının nedenlerinden biri de bu
Bunun nedeni NPU'ların üreticiye özel olması ve açık kaynak geliştiricilerinin bunları desteklemesinin zor olması
Apple ANE de bunun istisnası değil; bu araştırma da Apple ANE özelinde bu sorunu çözmeye yönelik bir girişim gibi görünüyor
Inside the M4 Apple Neural Engine yazısına göre 6.6 FLOPS/W performans veriyor ve kullanılmadığında tamamen kapanarak 0W tüketiyor
Apple, “38 TOPS INT8” değerini FP16 19 TFLOPS × 2 üzerinden hesaplamış ama gerçek donanım INT8 işlemlerini iki kat hızda çalıştırmıyor
Bu hesaplama biçimini takip etmek Apple'a pek yakışmayan abartılı bir ifade gibi geliyor
LLM'ler, uzmanları bile kandırabilecek kadar inandırıcı yanlış bilgiler üretebiliyor
Tüm olguların elle doğrulanıp doğrulanmadığından emin değilim. Bu açıdan bakınca, bunu baştan belirtmeleri sayesinde okumadan geçebilmek iyi olmuş
Yazıda da buna benzer tuhaf benchmark'lar görünüyor
LLM'lerden önce de akademide uydurulmuş makaleler ve yeniden üretilemeyen araştırmalar çoktu
Sonuçta bu tür analizlere güvenebilmek için daha fazla mühendisin doğrulaması gerekiyor
Konuyla ilgisiz çok fazla yorum var
Muhtemelen MLX projesinin sorumlusu Awni'nin Apple'dan ayrılma nedenlerinden biri de buydu
Ama bu yazının onları daha derinlemesine doğrulayıp genişletmesi güzel olmuş
CoreML'in büyük matmul işlemlerinde neredeyse hiç ek yük getirmediği söyleniyorsa, yerel yapay zeka framework'lerinde ANE'yi prefill için kullanma konusunda ciddi bir alan olabilir
Yine de decode aşaması bellek bant genişliğiyle sınırlı ve matmul'u 1x1 convolution'a dönüştürme süreci verimsiz olduğu için net bir kazanç değil
Adı Core AI ve üçüncü taraf LLM'leri uygulamalara daha kolay entegre etmeyi amaçlıyor
İlgili haber: Bloomberg bülteni
Yine de çok faydalı ve ilgi çekici buldum
Yazıda anılan Github deposuna da ayrıca bakmaya değer
Bu kısım kesinlikle AI tarafından yazılmış izlenimi veriyor
ANE tersine mühendisliğinden daha önemli olan şey, Manjeet'in AI yardımıyla kendi mühendislik kapasitesini ne kadar genişlettiği
Şu an tam olarak AI'nın geliştirici üretkenliğini hızlandırdığı çağdayız