Huawei (II): modelos de NPUs
Rubén Rodríguez Abril
El término NPU (Neural Processing Unit), popularizado por Apple en 2017, designa unidades especializadas en cálculos neuronales. HiSilicon, filial de Huawei especializada en el diseño de chips, ha creado en los últimos años varias NPUs de arquitectura Ascend, que unas veces están integradas en SoCs y en otras forman chips independientes. Así, el SoC Kirin 990 5G incluye una NPU para móviles, mientras que el coprocesador Ascend 310 realiza labores de inferencia en el borde. Ascend 910 se emplea en centros de datos con el poder computacional suficiente para entrenar modelos como GPT-3 en semanas y modelos más ligeros en horas.
Aunque el término NPU (Neural Processing Unit) fue acuñado por Apple en 2017 para designar a un área de un chip especializada en cálculos de redes neuronales artificiales, el término ha sido ampliamente utilizado por Huawei para designar a sus circuitos diseñados por su filial HiSilicon con la arquitectura Ascend. Los NPUs de esta empresa pueden ser de dos tipos: unidades integradas dentro de chips SoC o auténticos chips independientes, que funcionarían como una suerte de coprocesadores de Aprendizaje Profundo.
El modelo Kirin 990 5G pertenece a la primera clase, el resto de los modelos presentados en este artículo pertenece a la segunda.
Kirin 990 5G
Kirin 990 5G es el nombre de un chip SoC creado por HiSilicon y que se integra en algunos de los móviles ensamblados por Huawei. Como SoC (System on a Chip) que es, Kirin 990 incorpora en un sólo circuito integrado múltiples unidades que en un portátil constituirían chips independientes. Una de estas unidades es la NPU, que está coloreada de rojo en el diagrama siguiente.
Figura 1: Esquema de un SoC para móvil. Fuente: Huawei.
La NPU está compuesta de una sección grande (dos núcleos Da Vinci Lite) y otra pequeña (núcleo DaVinci Tiny). La primera está optimizada para realizar grandes cálculos. La segunda, para ahorrar energía. En total, la NPU puede realizar 2,4 TFLOP por segundo. Permite la realización de tareas como el desbloqueo facial, la activación inteligente por voz o el reconocimiento de voz, utilizando modelos de carga ligera como MobileNetV1 o de carga media como ResNet50.
Coprocesador Ascend 310
Ascend 310 tiene un tamaño mediano y ha diseñado para realizar tareas de inferencia en el borde (edge computing). Es decir, para la ejecución local de un modelo cuyos pesos sinápticos han sido descargados con anterioridad. Es adecuado para el reconocimiento de voz, la segmentación semántica o el reconocimiento facial (que suele realizarse a través del modelo ResNet50), entre otras disciplinas.
Figura 2. Diagrama del coprocesador Ascend 310. Fuente Huawei.
El chip dispone de ocho núcleos ARM Cortex-A55, que realizan tareas de propósito general, y dos núcleos DaVinci Max, además de un caché L2, memoria DDR4, un interfaces de entrada y salida que conectan con dispositivos periféricos y por último una unidad codec que puede descodificar simultáneamente hasta 16 canales de imagen, a razón de 30 marcos de 1080 píxeles (FHD) por segundo. Todos los componentes del chip se integran una arquitectura NoC (Network on a Chip): una interconexión CHIE (Cache Hierachy Interconnect Engine) conecta a todos los componentes por medio de un bus 512 bits y gestiona la jerarquía de cachés. El rendimiento computacional de Ascend 310 es de 8 TeraFLOPS (en arimética FP16) o de 16TOPS (en aritmética INT8).
Aunque no hay demasiadas especificaciones técnicas publicadas en red, un sistema de detección de objetos en videos procedentes de una cámara de videovigilancia debería funcionar en esta arquitectura de un modo parecido al siguiente (utilizamos el modelo ResNet50, que ya examinamos en su día en nuestro artículo de redes residuales):
-Antes de comenzar la ejecución, la CPU transmitiría al coprocesador Ascend las funciones y parámetros de la que se compone el modelo. Los parámetros de ResNet50, que ocupan un volumen aproximado de 102,4 Mbs, serían almacenados en la memoria DDR del coprocesador.
-Tras ello, la CPU daría órdenes al coprocesador de iniciar la ejecución del modelo.
-Los núcleos ARM serían los encargados de gestionar, dentro de Ascend, todo el proceso.
-Las imágenes de la cámara serían descodificadas (utilizando los estándares H.254/265) por la unidad codec, y guardadas en el búfer L2.
-Seguidamente, los núcleos ARM gestionarían el avance de estas imágenes a través de las diferentes capas de ResNet50, ordenando a los núcleos DaVinci las operaciones aritméticas necesarias (generalmente, convoluciones y función ReLU).
-En el caso de detectarse un objeto, los datos relativos al tipo de objeto, a la identificación de la persona (si es un sistema de reconocimiento facial) así como a las coordinadas de la ventana serían almacenados en el búfer, a la espera de ser transmitidos a la CPU.
Teniendo en cuenta que ResNet50 emplea unos 168,1 GFLOP para procesar una imagen 1080p, Ascend 310, con sus 8 TFLOP por segundo de potencia del cálculo, tiene capacidad de sobra para analizar un video de 30 marcos 1080p por segundo (unos 5043 GFLOP, medio TFLOP, por segundo en total).
Los procesadores A310 suelen integrarse en tarjetas de inferencia que se conectan a la placa base a través de una ranura PCIe. La tarjeta de inferencia Atlas 300I dispone de cuatro procesadores y de un bus PCIe 3.0.
Coprocesador Ascend 910
La NPU Ascend 910 de mayor tamaño que la anterior y está diseñada para centros de datos que implementen tareas de entrenamiento de modelos de aprendizaje profundo.
Figura 3. Fotografía y diagrama del chip Ascend 910. De las ocho secciones, cuatro son de memoria DRAM (HBM) y otras dos (“Dummy dies”) están vacías y se agregan por razones de estabilidad mecánica. Casi todos los componentes se concentran en Nimbus y sobre todo en Vitruvian. Fuente: Huawei.
El chip se divide físicamente en varias secciones:
–Virtuvian, donde se sitúan las áreas de procesamiento y memoria interna. Se compone de 16 núcleos Taishan MP4, con arquitectura ARM Cortez-A55, y 32 núcleos Da Vinci. Las áreas de memoria vienen constituidas por un búfer interno de 32 megabytes, y memorias HBM 2.0 y DDR4. Digital Video Procesor Pipelines (DVPP).
–Nimbus V3, que regula las comunicaciones con el exterior.
-Secciones de memoria externa DRAM de tipo HBM (High Band Memory).
También aquí se usa una interconexión CHIE con topología de malla (mesh).
Imagen 4. Diagrama con la arquitectura del procesador Ascend 910. Son bien visibles los núcleos ARM Taishan y los núcleos Da Vinci, así como el búfer de 32 MB. Desde Virtuvian se accede a (a través de un controlador DMA). las cuatro memorias externas HBM 2.0. Desde Nimbus V3 parten conexiones hacia la placa base y la CPU principal (PCIe), hacia la red y hacia la placa Da Vinci extensa (extended DaVinci Board). Fuente: Huawei.
El chip Ascend 910 tiene una capacidad computacional (en FP16) de 256 TeraFLOPS (frente a los 120 de NVIDIA V100 o los105 de Google TPUv3). Es usualmente ensamblado en tarjetas específicas, como Ascend 910 AI Server, que se compone de 8 procesadores Ascend 910, 8 núcleos Da Vinci sueltos y 2 CPUs Xeon, situados en varios niveles. La conexión es, de nuevo, PCIe.
Estas tarjetas se integran a su vez, a través del clústers, en inmensos centros de datos. El pantagruélico Ascend 910 Cluster está formado por 2048 nodos Ascend 910 AI Server interconectados entre sí a través de diferentes topologías de red. Tiene una colosal capacidad computacional de 512 petaFLOPs por segundo, que le permitiría entrenar a GPT-3 en un par de semanas, y a los modelos más ligeros de Llama, Mistral y Claude en unas pocas horas.