M4: Dentro del Neural Engine de Apple, Parte 1: Ingeniería Inversa
Apple
Investigadores aplicaron ingeniería inversa al Neural Engine (ANE) de Apple en el chip M4, eludiendo Core ML para compilar y ejecutar directamente programas de redes neuronales. Descubrieron que el rendimiento máximo real del ANE es inferior a los 38 TOPS anunciados por Apple, y lograron entrenar un modelo en el chip, diseñado únicamente para inferencia.
El artículo detalla cómo los autores realizaron ingeniería inversa del Neural Engine (ANE) de Apple en el chip M4, evitando Core ML para trabajar directamente con el hardware. Exploraron toda la pila de software, desde Core ML hasta el controlador del kernel IOKit, descubrieron cómo compilar y ejecutar programas en el ANE sin Core ML, y desenmascararon el formato binario. Midieron el rendimiento máximo real y descubrieron que los '38 TOPS' anunciados por Apple son engañosos. Finalmente, lograron entrenar una red neuronal en el chip, que está destinado únicamente a la inferencia. El ANE no es una GPU ni una CPU; es un motor de grafos computacionales que ejecuta una red neuronal compilada como una única operación atómica. Utilizaron el 'method swizzling' y análisis binario para descubrir más de 40 clases privadas en AppleNeuralEngine.framework, incluyendo _ANEClient, que permite el acceso directo al pipeline de compilar, cargar y ejecutar. También descubrieron que el lenguaje MIL se utiliza para describir modelos, y que el formato binario E5 es un archivo FlatBuffers que parametriza primitivas de hardware fijas, en lugar de almacenar código máquina tradicional. Encontraron una forma de compilar modelos en memoria usando _ANEInMemoryModelDescriptor, aunque aún escribe en un directorio temporal. El ANE en el M4 tiene 16 núcleos, una profundidad de cola de 127 y un escalado dinámico de voltaje y frecuencia (DVFS) independiente.
Fuente: Habr — хаб ML —
original
