Innenansicht der Apple Neural Engine im M4, Teil 1: Reverse Engineering
Apple
Forscher haben die Apple Neural Engine (ANE) im M4-Chip per Reverse Engineering untersucht und dabei Core ML umgangen, um neuronale Netzprogramme direkt zu kompilieren und auszuführen. Sie fanden heraus, dass die tatsächliche Spitzenleistung der ANE niedriger ist als die von Apple angegebenen 38 TOPS, und trainierten erfolgreich ein Modell auf dem Chip, der eigentlich nur für Inferenz ausgelegt ist.
Der Artikel beschreibt, wie die Autoren die Neural Engine (ANE) von Apple im M4-Chip per Reverse Engineering analysiert haben, indem sie Core ML umgingen und direkt mit der Hardware arbeiteten. Sie erkundeten den gesamten Software-Stack von Core ML bis zum IOKit-Kernel-Treiber, entdeckten, wie man Programme ohne Core ML auf der ANE kompiliert und ausführt, und entschlüsselten das binäre Format. Sie maßen die tatsächliche Spitzenleistung und stellten fest, dass Apples beworbene '38 TOPS' irreführend ist. Letztlich gelang es ihnen, ein neuronales Netz auf dem Chip zu trainieren, obwohl dieser ausschließlich für Inferenz gedacht ist. Die ANE ist weder eine GPU noch eine CPU; sie ist eine Rechengrafiken-Engine, die ein kompiliertes neuronales Netz als eine einzige atomare Operation ausführt. Sie nutzten Method-Swizzling und Binäranalyse, um über 40 private Klassen in AppleNeuralEngine.framework aufzudecken, darunter _ANEClient, das direkten Zugriff auf die Kompilier-Lade-Ausführ-Pipeline ermöglicht. Sie entdeckten außerdem, dass die MIL-Sprache zur Beschreibung von Modellen verwendet wird und das binäre Format E5 eine FlatBuffers-Datei ist, die feste Hardware-Primitive parametrisiert, anstatt traditionellen Maschinencode zu speichern. Sie fanden einen Weg, Modelle im Speicher mit _ANEInMemoryModelDescriptor zu kompilieren, obwohl dies weiterhin in ein temporäres Verzeichnis schreibt. Die ANE im M4 hat 16 Kerne, eine Warteschlangentiefe von 127 und eine unabhängige dynamische Spannungs- und Frequenzskalierung (DVFS).
Quelle: Habr — хаб ML —
Original
