Apple Neural Engine
Rubén Rodríguez Abril
Desde el 2017, los chips de Apple han incorporando unidades especializadas en aprendizaje profundo denominadas Neural Engines. Están enfocadas para realizar sus tareas (fundamentalmente cálculos de inferencia) utilizando recursos computacionales limitados (los de un portátil o un móvil) y consumiendo una potencia reducida en vatios. Son ideales para aplicaciones de reconocimiento facial o de voz y de realidad aumentada.
El año 2017 fue un año clave en el desarrollo de la inteligencia artificial. Es el año en que apareció la arquitectura transformer, base de los grandes modelos de lenguaje existentes en la actualidad, y en el que NVIDIA incorporó por primera vez unidades de multiplicación matricial (Tensor Cores) a sus chips). También en este año salió al mercado el chip A11 de Apple, que incorporó por primera vez una unidad de procesamiento neural, específicamente diseñada para los cálculos de los modelos de Aprendizaje Profundo. Casi todos los chips diseñados por Apple, desde A11 (móviles) y M1 (portátiles) en adelante, incorporan esta unidad.
Dado que Apple Inc no ha publicado ningún documento blanco relativo a este tipo de circuitos integrados, la información contenida en el presente artículo procede de la siguiente solicitud de patente presentada por la empresa:
– US20210103803A1 – «Planar Engine for Accelerating Matrix Computations in Neural Networks«, solicitada el 8 de Abril y publicada el 17 de Junio de 2021.
SoC - System on a Chip
Por lo general, dentro de un teléfono móvil, la inmensa mayoría de los componentes está integrado dentro de un único circuito integrado denominado System on a Chip. Los principales componentes del mismo son los siguientes:
–Sensor de imagen y procesador de señal (ISP). El primero capta una imagen del exterior. El segundo, la procesa (en varias fases escalodadas) para que pueda ser utilizable por los otros componentes del sistema. Puede, eventualmente, realizar operaciones de traslación de imagen, reescalado o conversión de color.
–CPU. Puede haber uno o varios procesadores, cada uno de ellos dotado de su propio juego de instrucciones (x86, ARM, MIPS, etc…).
–GPU (unidad de procesamiento gráfico).
–Circuito de Procesamiento Neural, que describiremos en el epígrafe subsiguiente.
–Interfaz de red, que como su propio nombre indica permite el contacto con otros dispositivos a través de una red, como una LAN o una WAN. Es este componente el que ejecuta protocolos como WPA2 (WiFi) o Ethernet.
–Memoria del sistema , que almacena información volátil y puede consistir en DRAM, SRAM, SDRAM o una combinación de todas ellas. Y su correspondiente controlador.
–Almacenamiento permanente. Puede ser ROM o memoria flash.
–Sensor de movimientos y su correspondiente interfaz.
–Controlador de pantalla. Recibe (dependiendo de la configuración) la información visual de la memoria, la CPU, la GPU, o el procesador de señal y la prepara para su visualización.
-La pantalla puede ser de cristal líquido (LCD) o de diodos orgánicos emisores de luz (OLED), entre otros modelos.
Un bus conecta todos estos componentes.
Figura 1: Esquema básico de un SoC de Apple, presente en modelos como iPhone® , iPod Touch® , Apple Watch® , o iPad®. Fuente: solicitud de patente US20210183096A1.
Circuito de Procesamiento Neural
El Circuito de Procesamiento Neural es un circuito integrado especializado en la realización de cálculos de Machine Learning. Dentro de la misma, se distingue entre dos grandes zonas aritméticas:
-Los motores neurales (neural engines), especializados en la multiplicación matricial, y particularmente en la operación de la convolución. Son idóneos para el procesamiento de matrices de varios rangos (por ejemplo, las matrices de convolución suelen ser de rango 3, representando la altura, la anchura y el canal/mapa de características).
-Los motores planares (planar engines), cuya misión es ejecutar operaciones matriciales que se hagan elemento a elemento, operaciones de pooling y sobre vectores.
Las instrucciones son procesadas por el gestor neural de tareas (neural task manager) recibe una lista de instrucciones a ejecutar por parte de la CPU. Éstas son distribuidas a través de los diferntes motores, neurales y planares, para que se realicen los cálculos correspondientes. Los datos sobre los que se van a realizar cálculos pueden venir de la memoria del sistema o del propio circuito neural, si se trata de la salida de un ciclo anterior (p.e. una capa anterior de un modelo neuronal).
El circuito de control de flujo extrae los datos de la memoria del sistema (a través de un controlador DMA) y los guarda en un búfer. Seguidamente, los distribuye, junto con las instrucciones, a las diferentes áreas aritméticas.
Figura 2: Esquema de un circuito de procesamiento neural. Fuente: solicitud de patente US20210183096A1.
Motor neural (Neural Engine)
A grandes rasgos, el motor neural recibe datos procedentes del exterior y realiza operaciones de multiplicación-adición sobre los mismos. El resultado es guardado en el acumulador y posteriormente se realizan operaciones de postprocesado sobre el mismo (entre las que pueden encontrarse funciones de activación como ReLU u operaciones de normalización por capas).
La parte principal del motor neural es el núcleo de computación (computational core), que es donde se localizan las unidades de multiplicación-adición, tal y como se muestra en la imagen. Un extractor de kernels (kernel extractor) recibe el kernel de la convolución desde el exterior y lo envía al núcleo.
Figura 3. Esquema de un motor neural. Fuente: solicitud de patente US20210103803A1.
El procesador más moderno de Apple, M4 (lanzado al mercado en Mayo de 2024), dispone de 16 motores neurales diferentes con una capacidad total de 18 millones de TeraFLOPs por segundo.
Motor Planar (Planar Engine)
Es un área aritmética del chip, diferente de los motores neurales. Puede ser programado para funcionar en diferentes modos:
–Modo de pooling (disminución de resolución): Varias casillas (3×3, 9×9…) de un mapa de características de la capa anterior se reducen a una sola. El nuevo valor de la misma puede venir constituido por la media de las casillas originarias o por su valor máximo o mínimo. Es típico de muchos algoritmos de Visión Artificial.
–Modo elemento a elemento (element-wise). Las operaciones no son globales (como las operaciones matriciales), sino que afectan a cada elemento de la entrada separadamente. Pueden ser unarias (si hay una sóla entrada, como por ejemplo, en la elevación al cuadrado de los coeficientes de un vector o una matriz), binarias, o de grado superior (en cuyo caso hablamos de modo ternario).
–Modo de reducción (reduction mode). Es utilizado para reducir el rango de los tensores. Así, éste modo es el que se usa, por ejemplo, para transformar una matriz (rango 2) en un vector (rango 1) o un escalar (rango 0). Es el que se usa también para las convoluciones 1×1, que conllevan el “colapso” de todos los mapas de características en uno sólo, desapareciendo con ello la dimensión correspondiente al canal.
Uso en chips
A11 Bionic fue el primer SoC de Apple y M1 el primer microprocesador de uso general que incorporaron circuitos específicos de procesamiento neural con las características reseñadas en párrafos anteriores. Desde su aparición, estos circuitos se han transformado en un elemento imprescindible de dispositivos como los de las series iPhone, iPad Air o MacBook. Son el principal motor detrás de las maravillosas capacidades en materia de IA de estos últimos, entre las que podemos citar la edición de videos 8K, el diseño 3D, el reconocimiento de voz para dictado, reconocimiento facial, sistemas de realidad aumentada, y muchas otras.
Lecturas Recomendadas
– US20210103803A1 – «Planar Engine for Accelerating Matrix Computations in Neural Networks«, solicitada el 8 de Abril y publicada el 17 de Junio de 2021.