Uso de los nuevos motores de aceleración de IA integrados de Intel
Mejore la eficiencia, la escalabilidad y el rendimiento de la IA con Intel® AMX e Intel® XMX
La creciente popularidad de la inteligencia artificial (IA) en el mundo actual exige la introducción de tipos de datos de baja precisión y soporte de hardware para estos tipos de datos para aumentar el rendimiento. Los modelos de baja precisión son más rápidos en el cálculo y tienen menos huellas de memoria. Por estos motivos, se prefieren los tipos de datos de baja precisión tanto para el entrenamiento como para la inferencia de IA en lugar de los tipos de datos de 32 bits. Para optimizar y admitir estos tipos de datos de baja precisión, el hardware necesita características e instrucciones especiales. Intel los proporciona mediante Intel® Advanced Matrix Extensions (Intel AMX) e Intel® Xe Matrix Extensions (Intel XMX) en CPUs de Intel y GPUs, respectivamente. Algunos de los formatos de 16 y 8 bits más utilizados son el punto flotante IEEE de 16 bits (fp16), bfloat16, el entero de 16 bits (int16), el entero de 8 bits (int8) y el punto flotante de Microsoft de 8 bits (ms-fp8). Las diferencias entre algunos de estos formatos se muestran en la Imagen 1.
Imagen 1. Varias representaciones numéricas de tipos de datos estándar IEEE. La “s” representa el bit con signo (0 para los números positivos y 1 para los números negativos) y exp representa el exponente.
Existen diferentes paradigmas de programación para invocar Intel AMX e Intel XMX en sus respectivos hardware. Este documento proporcionará una comprensión de las diferentes formas de programarlos y luego demostrará los beneficios de rendimiento de estos conjuntos de instrucciones.
Intel AMX son extensiones para la arquitectura del conjunto de instrucciones (ISA) x86 para microprocesadores. Utiliza registros 2D, llamadas teselas (tiles), sobre los que los aceleradores pueden realizar operaciones. Por lo general, hay ocho teselas en una unidad de Intel AMX. Las teselas pueden realizar operaciones de carga, almacenamiento, borrado o punto de producto. Intel AMX es compatible con los tipos de datos int8 y bfloat16. Intel AMX es compatible con los procesadores escalables Intel® Xeon® de 4.ª generación (Imagen 2).
Imagen 2. Intel® AMX en procesadores escalables Intel® Xeon® de 4ª generación
Intel XMX, también conocido como Dot Product Accumulate Systolic (DPAS), se especializa en la ejecución de instrucciones de acumulación y productos de puntos en matrices sistólicas 2D. Una matriz sistólica en arquitectura de computadora paralela es una red homogénea de unidades de procesamiento de datos estrechamente acopladas. Cada unidad calcula un resultado parcial en función de los datos recibidos de sus vecinos en una posición superior en el flujo, almacena el resultado dentro de sí misma y lo pasa flujo abajo. Intel XMX admite numerosos tipos de datos, como int8, fp16, bfloat16 y tf32, según la generación de hardware. Forma parte de la serie Intel® Data Center GPU Max o Intel® Data Center GPU Flex. La pila Intel Xe HPC 2 en Intel® Data Center GPU Max se abrevia como Xe en la Imagen 3. Pila es el término que se usa alternativamente para las teselas. Cada GPU Intel Data Center Max consta de ocho segmentos Intel Xe. Cada segmento contiene 16 núcleos Intel Xe. Cada núcleo contiene ocho motores vectoriales y ocho matriciales.
Imagen 3. Intel® XMX en Intel® Data Center GPU Max (anteriormente llamado Ponte Vecchio)
Los usuarios pueden interactuar con Intel XMX en muchos niveles diferentes: marcos de aprendizaje profundo, bibliotecas dedicadas, kernels SYCL personalizados, hasta intrínsecos de bajo nivel. La Imagen 4 muestra cómo se pueden invocar Intel AMX e Intel XMX a través de diferentes abstracciones de codificación, que se analizarán a continuación. Se requiere Intel® oneAPI Base Toolkit 2024.0 para aprovechar estas extensiones.
Imagen 4. Abstracciones de programación para el cálculo matricial
Joint matrix es una nueva extensión de SYCL* que unifica objetivos como Intel AMX para CPU, Intel XMX para GPU y NVIDIA* Tensor Cores para la programación de hardware Tensor. Estos ejemplos de joint matrix (matriz conjunta) SYCL muestran cómo utilizar esta extensión. Los usuarios que deseen crear sus propias aplicaciones de redes neuronales pueden utilizar la matriz conjunta, que tiene un nivel de abstracción más bajo que marcos como TensorFlow* y bibliotecas como Intel® oneAPI Deep Neural Network Library (oneDNN) e Intel® oneAPI Math Kernel Library (oneMKL). Proporciona una interfaz unificada que no solo es portátil, sino que también se beneficia del máximo rendimiento que puede ofrecer el hardware diferente. La matriz conjunta proporciona capacidades de rendimiento, productividad y fusión junto con la portabilidad a diferentes hardware tensoriales, lo que elimina la necesidad de mantener diferentes bases de código para cada plataforma de hardware.
El término “matriz conjunta” enfatiza que la matriz se comparte entre un grupo de elementos de trabajo y no es privada para cada elemento de trabajo (Imagen 5). Aunque el ámbito de grupo se agrega como un parámetro de plantilla adicional en la sintaxis de la matriz conjunta de SYCL, solo se admite el ámbito de subgrupo en la implementación actual. Algunas de las funciones necesarias para realizar operaciones comunes en matrices, a saber, cargar, almacenar y la operación “multiplicar y sumar”, están representadas por joint_matrix_load, joint_matrix_store y joint_matrix_mad respectivamente. A su vez, llaman a intrínsecos de Intel AMX o Intel XMX de nivel inferior según el hardware en el que se ejecute el programa. La función joint_matrix_load carga los datos de la memoria a las teselas 2D/registros, joint_matrix_store almacena los datos en la matriz del acumulador de los mosaicos 2D de vuelta a la memoria y, joint_matrix_mad realiza la operación de multiplicación en las dos matrices, acumula el resultado con la tercera matriz y devuelve el resultado.
Imagen 5. APIs comunes de matriz conjunta SYCL*
Intel® oneAPI Deep Neural Network Library (oneDNN) e Intel oneAPI Math Kernel Library (oneMKL) utilizan Intel AMX e Intel XMX de forma predeterminada en las CPU Intel (procesadores escalables Intel Xeon de 4.ª generación en adelante) e Intel® Data Center GPU Max, respectivamente. El usuario de oneDNN debe asegurarse de que el código utiliza tipos de datos compatibles con Intel XMX y que la biblioteca oneDNN debe crearse con la compatibilidad con GPU habilitada. El ejemplo matmul_perf incluido con oneDNN invocará Intel AMX e Intel XMX cuando se compile correctamente. Ejemplos adicionales de oneDNN están disponibles aquí. Un ejemplo simple de oneMKL está disponible aquí.
Comparemos la multiplicación de matrices realizada en fp32 estándar frente a bfloat16. El punto de referencia que usamos es esencialmente un simple contenedor para llamadas repetidas a GEMM. Basándonos en nuestra compilación, podemos pasar las siguientes opciones:
El código de referencia toma el tamaño del problema, asigna espacio para las matrices C = A x B, inicializa las matrices A y B con datos aleatorios, llama a GEMM una vez para la inicialización, realiza llamadas consecutivas a GEMM durante un número preestablecido de veces y mide el tiempo de ejecución de esta última. Podemos ver que bfloat16 supera a fp32 (Imagen 6).
Imagen 6. Comparación del rendimiento de la multiplicación de matrices utilizando los tipos de datos fp32 y bfloat16
Pruebas: Los resultados de rendimiento se validan con la versión 2024.0 y no se observa ninguna regresión de rendimiento en comparación con la versión 2023.x
Información de la configuración y de la configuración de la carga de trabajo: 1-nodo, 2 procesadores Intel Xeon® Platinum 8480+ procesador en la plataforma Denali Pass con 1024 GB (16 ranuras/ 64 GB/ 4800) de memoria DDR5 total, ucode 0x2b000161, HT desactivado, Turbo activado, Ubuntu 22.04.1 LTS, 5.17.0-051700 genérico, 1 unidad de Intel SSD 3.5TB OS Drive; Intel® oneAPI Math Kernel Library 2023.0 (oneMKL). SGEMM y BFLOAT16GEMM rendimiento para dimensiones de matriz cuadrada entre 800 y 30.000. Los resultados de rendimiento se basan en las pruebas a partir de las fechas que se muestran en las configuraciones y es posible que no reflejen todas las actualizaciones disponibles públicamente. Consulte la divulgación de la configuración para obtener más información. Ningún producto o componente puede ser absolutamente seguro. El rendimiento varía según el uso, la configuración y otros factores. Más información en www.Intel.com/PerformanceIndex. Sus costos y resultados pueden variar.
Avisos y exenciones de responsabilidad: El rendimiento varía según el uso, la configuración y otros factores. Obtenga más información en el sitio del Índice de rendimiento. Los resultados de rendimiento se basan en las pruebas a partir de las fechas que se muestran en las configuraciones y es posible que no reflejen todas las actualizaciones disponibles públicamente. Consulte la copia de seguridad para obtener detalles de configuración. Ningún producto o componente puede ser seguro. Sus costos y resultados pueden variar. Es posible que las tecnologías de Intel requieran la activación de hardware, software o servicios habilitados. © Intel, el logotipo de Intel y otras marcas de Intel son marcas comerciales de Intel Corporation o sus subsidiarias. Otros nombres y marcas pueden ser reclamados como propiedad de otros.
Detalles de configuración: un Intel® Data Center GPU Max 1550 alojado en un procesador de dos socket Intel Xeon 8480+, 512 GB DDR5-4800, Ubuntu 22.04, Kernel 5.15, IFWI 2023WW28, oneMKL 2023.1, ICX 2023.1.
Ahora investigaremos los beneficios de rendimiento de Intel XMX en las GPU Intel utilizando este punto de referencia oneMKL GEMM. oneMKL admite varios algoritmos para acelerar GEMM de precisión simple a través de Intel XMX. Bfloat16x2 y bfloat16x3 son dos de estos algoritmos para usar hardware sistólico bfloat16 para aproximar GEMM de precisión simple. Internamente, los datos de entrada de precisión simple se convierten en bfloat16 y se multiplican por la matriz sistólica. Las tres variantes, bfloat16, bfloat16x2 y bfloat16x3, le permiten elegir un equilibrio entre precisión y rendimiento, siendo bfloat16 el más rápido y bfloat16x3 el más preciso (similar al GEMM estándar). Sin embargo, los tres superan al flotante estándar (Imagen 7).
Imagen 7. Evaluación comparativa del rendimiento de oneMKL GEMM para diferentes tipos de datos y algoritmos
Detalles de configuración: un Intel® Data Center GPU Max 1550 alojado en dos socket Intel® Xeon® 8480+ processor, 512 GB DDR5-4800, Ubuntu 22.04, Kernel 5.15, IFWI 2023WW28, Intel® oneAPI Math Kernel Library 2023.1 (oneMKL), ICX 2024.0. El código utilizado desde https://github.com/oneapi-src/oneAPI-samples/tree/master/Libraries/oneMKL/matrix_mul_mkl
Avisos y exenciones de responsabilidad: El rendimiento varía según el uso, la configuración y otros factores. Obtenga más información en el sitio del Índice de rendimiento. Los resultados de rendimiento se basan en las pruebas a partir de las fechas que se muestran en las configuraciones y es posible que no reflejen todas las actualizaciones disponibles públicamente. Consulte la copia de seguridad para obtener detalles de configuración. Ningún producto o componente puede ser seguro. Sus costos y resultados pueden variar. Es posible que las tecnologías de Intel requieran la activación de hardware, software o servicios habilitados. © Intel, el logotipo de Intel y otras marcas de Intel son marcas comerciales de Intel Corporation o sus subsidiarias. Otros nombres y marcas pueden ser reclamados como propiedad de otros.
En este artículo se ofrece una descripción general de los conjuntos de instrucciones Intel AMX e Intel XMX introducidos en las CPU y GPU Intel más recientes. Los conjuntos de instrucciones Intel AMX e Intel XMX se pueden invocar a través de diferentes niveles de programación, desde los intrínsecos del compilador hasta la abstracción de matriz conjunta SYCL, pasando por oneMKL y oneDNN. Cuanto más abstraído esté el paradigma de codificación, más fácil será invocar estos conjuntos de instrucciones y menor será el control del programador sobre la invocación. Intel AMX e Intel XMX son potenciadores del rendimiento. El ejemplo de la prueba comparativa GEMM en el procesador escalable Intel Xeon de 4ª generación ofrece una comprensión clara de cómo se aumenta el rendimiento simplemente haciendo uso de los tipos de datos de baja precisión apropiados e invocando Intel AMX. Además, el ejemplo de la prueba comparativa GEMM en la GPU Intel Data Center Max 1550 ofrece una comprensión clara de cómo se aumenta el rendimiento simplemente haciendo uso de los tipos de datos de baja precisión apropiados e invocando Intel XMX. Debido a su beneficio de rendimiento, facilidad de uso y la capacidad de programarse a través de programación de bajo nivel, así como a través de bibliotecas y marcos, se recomienda a los usuarios que prueben y utilicen estas extensiones en sus cargas de trabajo de IA.
Ayúdanos con este formulario a facilitarte la información que necesitas.