Apple Neural Engine: Architecture, Programming, and Performance
Dit artikel presenteert een uitgebreide reverse-engineering van Apple's Neural Engine (ANE) over meerdere chipgeneraties, waarbij de architectuur, de softwarestack en de prestatiekenmerken worden gedetailleerd via directe toegang vanuit de user-space en decompilatie om een fundamentele bron te bieden voor onderzoek op het apparaat zelf, ondanks het gebrek aan officiële documentatie.
Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer
In de moderne wereld zijn onze smartphones en computers gevuld met gespecialiseerde hulpmiddelen die ontworpen zijn om specifieke problemen snel op te lossen. Terwijl de centrale processor algemene taken afhandelt en de grafische processor afbeeldingen rendert, is er een derde, vaak verborgen component die essentieel is geworden voor het direct draaien van kunstmatige intelligentie op het apparaat. Deze component is een toegewijde engine die gebouwd is om enorme hoeveelheden eenvoudige wiskundige berekeningen uit te voeren, specifiek het vermenigvuldigen en optellen van getallen, wat de kern vormt van het herkennen van een gezicht in een foto of het transcriberen van een spraakopdracht. Jarenlang is deze engine een black box geweest; hoewel softwareontwikkelaars de computer konden vragen om er gebruik van te maken, hadden ze geen manier om te zien hoe het werkte, wat het daadwerkelijk kon doen, of hoe ze er rechtstreeks mee konden communiceren zonder via een complexe tussenpersoon te gaan.
Een onderzoeker heeft die black box nu geopend. Door de software die op Apple-apparaten draait zorgvuldig te bestuderen en de hardware zelf te meten, heeft hij het hele systeem in kaart gebracht, van de fysieke siliciumchips tot de onzichtbare instructies die ze aansturen. Hun werk onthult dat deze engine geen algemene computer is, maar een zeer gespecialiseerde machine die gebouwd is om een specifiek type wiskunde met extreme snelheid en een laag energieverbruik te verwerken. Ze ontdekten dat hoewel de engine ongelooflijk snel is bij bepaalde taken, het strikte limieten heeft voor wat het kan berekenen en hoe het met getallen omgaat. Dit begrip stelt ontwikkelaars in staat om betere applicaties te bouwen die sneller draaien en minder batterij verbruiken, maar het laat ook zien dat de engine geen magische oplossing is voor elk probleem; het is een precies instrument met een specifieke taak, en het correct gebruiken ervan vereist het begrijpen van de unieke regels.
De onderzoeker begon door de standaard softwareslagen te omzeilen die de engine gewoonlijk voor gebruikers verbergen. In plaats van een hoogwaardige applicatie te vragen waar een taak moet worden uitgevoerd, vond hij een directe route naar de engine zelf, waardoor hij opdrachten kon sturen en de resultaten kon meten met totale controle. Hij behandelde de engine als een onafhankelijke machine die een set instructies ontvangt, deze uitvoert en vervolgens een signaal geeft wanneer het klaar is. Hij ontdekte dat de engine instructies niet één voor één verwerkt zoals een standaardcomputer dat doet; in plaats daarvan voert het een vooraf geplande sequentie van databewegingen en berekeningen uit die vaststaan voordat het werk zelfs begint. Dit betekent dat de engine geen beslissingen kan nemen op basis van de data die hij verwerkt terwijl hij draait; het pad moet vooraf worden uitgezet.
Een van de meest significante bevindingen heeft betrekking op hoe de engine met getallen omgaat. Het voert zijn berekeningen uit met een formaat genaamd half-precisie, dat minder bits gebruikt om een getal op te slaan dan het standaardformaat dat door de meeste computers wordt gebruikt. Deze keuze stelt de engine in staat om veel sneller data te verplaatsen en minder energie te verbruiken, maar het gaat gepaard met een compromis in precisie. De onderzoeker ontdekte dat de engine dit compenseert door een zeer brede interne register te gebruiken om de lopende som van zijn berekeningen vast te houden. Deze brede register werkt als een vangnet, waardoor ervoor wordt gezorgnd dat het eindresultaat accuraat blijft, zelfs als de individuele stappen kleinere getallen gebruiken. Echter, dit systeem heeft een breekpunt. Als een berekening een grote positieve waarde wegstreept tegen een grote negatieve waarde om een klein verschil te vinden, verliest de engine precisie omdat het kleine verschil verloren gaat in de afronding van de initiële grote getallen. In deze specifieke gevallen kan de engine niet worden gebruikt en moet de taak worden overgedragen aan een ander deel van de computer.
De studie bracht ook nauwkeurig in kaart welke operaties de engine kan uitvoeren. Hij is uitstekend in de taken die visie en spraak aandrijven, zoals het herkennen van vormen in een afbeelding of het verwerken van geluidsgolven. Hij kan complexe patronen aan, zoals convoluties, wat de wiskundige operaties zijn die worden gebruikt om randen en kenmerken in een afbeelding te detecten. De onderzoeker kwam echter tot de conclusie dat de engine niet alles kan. Bepaalde soorten berekeningen, zoals die met driedimensionale data of specifieke typen geheugenupdates, worden simpelweg niet ondersteund door de hardware. Ze ontdekten ook dat de mogelijkheden van de engine veranderen afhankelijk van de specifieke chipgeneratie. Zo kunnen oudere chips data alleen op bepaalde manieren comprimeren om ruimte te besparen, terwijl nieuwere chips data in meer formaten kunnen comprimeren, waardoor ze informatie sneller kunnen verplaatsen en minder energie verbruiken.
Prestatie-metingen toonden aan dat wanneer de engine voor het juiste soort werk wordt gebruikt, hij aanzienlijk sneller en efficiënter is dan de grafische processor, die vaak voor soortgelijke taken wordt gebruikt. Bij een specifiek type beeldverwerkingstaak bleek de engine bijna vier keer sneller dan de grafische processor, terwijl hij slechts een fractie van de energie verbruikte. Deze efficiëntie komt door het ontwerp van de engine, die data direct tussen het geheugen en de rekeneenheden verplaatst zonder onnodige tussenstops. Deze snelheid wordt echter beperkt door hoe snel data uit het hoofdgeheugen kan worden opgehaald. Als een taak meer data vereist dan de engine in zijn kleine, snelle interne geheugen kan bevatten, daalt de prestatie omdat de engine moet wachten tot de data arriveert.
De onderzoeker ontdekte ook hoe de engine zijn eigen geheugen en status beheert. Het kan bepaalde data, zoals het geheugen van een gesprek of de status van een trainingsproces, tussen taken door in zichzelf bewaren. Dit betekent dat de engine voor een reeks stappen de data niet heen en weer hoeft te sturen naar de hoofdcomputer, wat een enorme hoeveelheid tijd bespaart. Ze ontdekten dat de engine deze data over meerdere stappen kan vasthouden, waardoor hij een stroom van informatie continu en zonder onderbreking kan verwerken. Deze capaciteit is cruciaal voor applicaties zoals realtime taalvertaling of het genereren van tekst, waarbij de engine moet onthouden wat hij net heeft gezegd om te beslissen wat hij als volgende zegt.
Ondanks zijn kracht is de engine geen universele oplossing. De onderzoeker identificeerde een harde limiet aan de hoeveelheid data die de engine in één keer kan verwerken. Als een taak een werkset van data vereist die groter is dan twee megabyte, loopt de engine vast omdat hij niet alle noodzakelijke informatie in zijn snelle geheugen kan bevatten. Deze limiet dwingt ontwikkelaars om grote taken in kleinere stukken op te splitsen, wat de complexiteit van de software verhoogt. Bovendien is de engine geen algemene processor; hij kan geen willekeurige programma's draaien. Hij voert alleen specifieke, vooraf gecompileerde instructies uit die zorgvuldig zijn geoptimaliseerd voor zijn hardware. Dit betekent dat software voor de engine gebouwd moet worden met zijn specifieke beperkingen in gedachten, en dat het niet simpelweg elk bestaand programma kan nemen en sneller kan draaien.
De studie onthulde ook de ingewikkelde beveiligings- en toegangscontroles die rond de engine staan. Hoewel de onderzoeker een manier vond om er rechtstreeks mee te communiceren, ontdekte hij dat dit pad niet officieel wordt ondersteund door de fabrikant van het apparaat. De engine wordt beschermd door een systeem dat vereist dat software ondertekend en geverifieerd is voordat deze kan draaien, om er zeker van te zijn dat alleen vertrouwde programma's toegang hebben tot de hardware. Dit beveiligingsmodel voorkomt dat ongeautoriseerde code op de engine draait, maar het betekent ook dat het directe pad dat de onderzoeker gebruikte kwetsbaar is en bij elke software-update kan breken. De engine is ontworpen als een veilige, geïsoleerde component, en hoewel het mogelijk is erbij te komen, vereist dit het navigeren door een complex landschap van permissies en handtekeningen.
Uiteindelijk biedt dit werk een helder beeld van een krachtige maar gespecialiseerde machine. De Apple Neural Engine is niet langer een mysterieuze black box; het is een goed gedefinieerde component met bekende sterktes en zwaktes. Het blinkt uit in de specifieke wiskundige taken die de moderne kunstmatige intelligentie aandrijven, en biedt een snelheid en efficiëntie die algemene processors niet kunnen evenaren. Het is echter geen toverstaf die elk probleem kan oplossen. Het heeft strikte limieten aan de soorten berekeningen die het kan uitvoeren, de hoeveelheid data die het kan verwerken en de precisie die het kan handhaven. Door deze limieten te begrijpen, kunnen ontwikkelaars betere applicaties bouwen die werken met de natuurlijke vermogens van de engine in plaats van ertegen te vechten. Het onderzoek laat zien dat de toekomst van on-device intelligentie niet ligt in het algemener maken van de engine, maar in het ontwerpen van software die perfect past binnen zijn gespecialiseerde ontwerp.
Verdrinkt u in papers in uw vakgebied?
Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.