Au cœur du Neural Engine d'Apple dans la puce M4, première partie : rétro-ingénierie
Apple
Des chercheurs ont procédé à la rétro-ingénierie du Neural Engine (NE) d'Apple dans la puce M4, contournant Core ML pour compiler et exécuter directement des programmes de réseaux neuronaux. Ils ont découvert que la performance maximale réelle du NE est inférieure aux 38 TOPS revendiqués par Apple, et ont réussi à entraîner un modèle sur la puce, conçue uniquement pour l'inférence.
L'article détaille comment les auteurs ont procédé à la rétro-ingénierie du moteur neuronal (ANE) d'Apple dans la puce M4, en contournant Core ML pour travailler directement avec le matériel. Ils ont exploré l'ensemble de la pile logicielle, de Core ML au pilote noyau IOKit, découvert comment compiler et exécuter des programmes sur l'ANE sans Core ML, et dévoilé le format binaire. Ils ont mesuré les performances de crête réelles, constatant que les '38 TOPS' annoncés par Apple sont trompeurs. En fin de compte, ils ont réussi à entraîner un réseau neuronal sur la puce, qui est censée être exclusivement dédiée à l'inférence. L'ANE n'est pas un GPU ni un CPU ; c'est un moteur de graphe computationnel qui exécute un réseau neuronal compilé comme une opération atomique unique. Ils ont utilisé le swizzling de méthodes et l'analyse binaire pour découvrir plus de 40 classes privées dans AppleNeuralEngine.framework, notamment _ANEClient, qui permet un accès direct au pipeline compile-charge-exécute. Ils ont également découvert que le langage MIL est utilisé pour décrire les modèles, et que le format binaire E5 est un fichier FlatBuffers qui paramètre des primitives matérielles fixes plutôt que de stocker du code machine traditionnel. Ils ont trouvé un moyen de compiler des modèles en mémoire à l'aide de _ANEInMemoryModelDescriptor, bien que cela écrive toujours dans un répertoire temporaire. L'ANE dans le M4 possède 16 cœurs, une profondeur de file d'attente de 127, et une gestion indépendante de la tension et de la fréquence (DVFS).
Source: Habr — хаб ML —
original
