Saltar al contenido principal
julio 22, 2024

Maximizando el rendimiento de la IA con la GPU Intel Arc A770 en Windows

Sinopsis

Este artículo presenta la GPU Intel Arc A770 como una opción competitiva para tareas intensivas de IA, especialmente para quienes trabajan en el ecosistema Windows. Tradicionalmente, las GPU NVIDIA y CUDA han dominado este espacio, pero la última oferta de Intel proporciona una alternativa sólida. Este artículo añade nueva información para ayudar a los usuarios a trabajar más fácilmente con la GPU Arc A770 de forma nativa en Windows, sin necesidad de Windows Subsystem for Linux (WSL).

A través de pasos prácticos e información detallada, exploramos cómo configurar y optimizar la GPU Arc A770 para varios modelos de IA, incluidos Llama2, Llama3 y Phi3. El artículo también incluye métricas de rendimiento y estadísticas de uso de memoria, lo que proporciona una visión completa de las capacidades de la GPU. Tanto si eres desarrollador como investigador, este artículo te proporcionará los conocimientos necesarios para aprovechar la GPU de Intel en tus proyectos de IA de forma eficiente y eficaz.

Introducción

Intel me brindó recientemente la oportunidad de probar su GPU Arc A770 para tareas de IA. Aunque las especificaciones detalladas se pueden encontrar aquí, una característica destacó de inmediato son sus 16 GB de RAM. Son 4 GB más que su competidora natural, la NVIDIA RTX 3060, lo que la convierte en una opción atractiva para cálculos de IA a un precio similar.

Intel Arc A770 GPU usado para pruebas

Puesto que en Plain Concepts trabajamos predominantemente con tecnologías Microsoft, decidí explorar las posibilidades de la GPU en Windows. Dado mi trabajo habitual con PyTorch, empecé utilizando la Extensión Intel para PyTorch para ver si podía ejecutar modelos como Llama2, Llama3 y Phi3, y evaluar su rendimiento.

Inicialmente, consideré utilizar el Windows Subsystem forLinux (WSL) basándome en las sugerencias de varias entradas de blog y vídeos que indicaban que el soporte nativo de Windows podría no estar totalmente listo. Sin embargo, opté por experimentar primero con una configuración nativa de Windows, y después de algunos retoques y ajustes, me complació descubrir que todo funcionaba a la perfección.

Intel Arc A770 GPU usado para pruebas

En este artículo, comparto mis experiencias y los pasos que seguí para ejecutar los modelos Llama2, Llama3 y Phi3 en la GPU Intel Arc A770 de forma nativa en Windows. También presento métricas de rendimiento, incluido el tiempo de ejecución y el uso de memoria para cada modelo. El objetivo es proporcionar una visión completa de cómo puedes utilizarse eficazmente la GPU Intel Arc A770 para tareas intensivas de IA en Windows.

Configuración en Windows

Intel proporciona una guía completa para instalar la extensión Python para la GPU Arc.

Guía de instalación de la extensión Intel para Pytorch

Sin embargo, la configuración de la GPU Arc A770 en Windows requirió algunos ajustes iniciales. He aquí un breve resumen de esos ajustes. Para obtener instrucciones detalladas, consulta el repositorio asociado.

  • Dado que oneAPI requiere configurar varias variables de entorno desde el CMD, recomiendo instalar la extensión Pscx para PowerShell, que permite llamar fácilmente a scripts CMD.
  • Cuando se trabaja en Windows con mamba, la variable de entorno PATH puede llegar a ser excesivamente larga, causando problemas al configurar las variables de entorno de oneAPI. Para evitar este problema, he incluido un script setup_vars.ps1 que establece las variables de entorno necesarias para oneAPI.
  • La muestra Phi3 requiere la instalación de la versión preliminar de la librería ipex-llm, que implementa optimizaciones para todas las operaciones del kernel de Phi3. Después de instalar esta librería, debes reinstalar la librería de transformadores.

Uso de la extensión Intel para Pytorch

Como se indica en su repositorio de GitHub, «Intel® Extension for PyTorch extends PyTorch with up-to-date features optimizations for an extra performance boost on Intel hardware”. En concreto, it provides easy GPU acceleration for Intel discrete GPUs through the PyTorch xpu device». Esto significa que, utilizando esta extensión, puedes aprovechar la GPU Intel Arc A770 para tareas de IA sin depender de CUDA/NVIDIA, y que puedes obtener un aumento de rendimiento aún mayor si utilizas uno de los modelos optimizados.

Por suerte, la extensión sigue la misma API que PyTorch, por lo que en general sólo hay que hacer unos pocos cambios en el código para que funcione en la GPU Intel. He aquí un breve resumen de los cambios necesarios:

  1. Comprobación de la GPU

Añadir intel extension for pytorch, y comprobar si la GPU se detecta correctamente.

Este cambio no es estrictamente necesario, pero es una buena práctica para comprobar si la GPU se detecta correctamente antes de ejecutar el modelo.

  1. Mover el modelo a la GPU

Una vez cargado el modelo, muévelo a la GPU.

  1. Mover los inputs a la GPU

Por último, cuando utilices el modelo, asegúrate de que los datos de entrada también están en la GPU.

Otros cambios en la medición de resultados

Con el fin de medir el rendimiento con precisión, también he añadido algo de código adicional para recuperar el tiempo total de inferencia y la asignación máxima de memoria. Consiste principalmente en un calentamiento de cada modelo antes de realizar la inferencia, además de código adicional para esperar a que el modelo se ejecute e imprimir los resultados de forma legible. Consulta el repositorio de ejemplos para obtener más información y reproducir los resultados en tu propia máquina.

Llama2

Llama2 es la segunda iteración del popular modelo de código abierto Llama LLM de Meta. Tras preparar el entorno y realizar los cambios indicados en la sección anterior en las muestras oficiales de Llama2, pude ejecutar el modelo Llama2 en la GPU Intel Arc A770, tanto para la inferencia simple como para tareas de instrucción.

Ejecutando Llama2 7B en la GPU Intel Arc A770

El modelo Llama2 7B ocupa aproximadamente 14GB de memoria utilizando precisión float16. Como la GPU tiene 16GB disponibles, podemos ejecutarlo sin problemas. A continuación puedes ver los resultados de la muestra de inferencia, utilizando un máximo de 128 tokens en la salida.

Ejecutar el chat Llama2 7B en Intel Arc A770 GPU

Del mismo modo, los resultados del chat Llama2 7B fueron impresionantes, ya que el modelo generó respuestas similares a las humanas en un tono conversacional. La muestra de chat se ejecutó sin problemas en la GPU Intel Arc A770, lo que demuestra su capacidad para aplicaciones de chat. En este caso, la muestra se ejecuta con 512 tokens en la salida para forzar aún más el hardware.

Llama3

Llama3 es la última iteración del modelo Llama LLM de Meta, publicado hace un par de meses. Por suerte, el equipo de Intel se apresuró a incluir la optimización del modelo en la extensión, por lo que fue posible aprovechar toda la potencia de la GPU Intel Arc A770. El proceso fue bastante similar al utilizado para Llama2, utilizando el mismo entorno y muestras oficiales.

Ejecutando Llama3 8B en la GPU Intel Arc A770

El modelo Llama3 8B ocupa aproximadamente algo más de 15GB de memoria utilizando precisión float16. Como la GPU tiene 16GB disponibles, podemos ejecutarlo sin problemas. A continuación,  puedes ver los resultados de la muestra de inferencia, utilizando un máximo de 64 tokens en la salida.

Ejecutando Llama3 8B Instruct en la GPU Intel Arc A770

Siguiendo con las muestras de Llama2, también probé las capacidades de chat del modelo Llama3 8B, aumentando los tokens de salida a 256.

Phi3

Phi3 es el último modelo de Microsoft, lanzado el 24 de abril, diseñado para tareas de instrucción. Es un modelo más pequeño que Llama2 y Llama3 (3,8B parámetros la versión más pequeña), pero sigue siendo bastante potente. Está entrenado para tareas de instrucción, proporcionando respuestas detalladas e informativas.

Aunque las optimizaciones de Phi3 para el hardware de Intel aún no están incluidas en la extensión de Intel para Pytorch, podemos utilizar una biblioteca de terceros, ipex-llm, para optimizar el modelo. En este caso, como el Phi3 es bastante nuevo, para obtener la optimización tuve que instalar la versión pre-release, que implementa las optimizaciones para todas las operaciones del núcleo del Phi3. Tenga en cuenta que ipex-llm no es una biblioteca formal de Intel, sino una biblioteca impulsada por la comunidad, por lo que no está soportada oficialmente por Intel.

Una vez optimizado el modelo, el resto de modificaciones del código son las mismas que para Llama2 y Llama3, por lo que pude ejecutar el modelo Phi3 en la GPU Intel Arc A770 sin ningún problema.

Ejecutando de Phi3 4K Instruct en la GPU Intel Arc A770

El modelo 4K ocupa unos 2,5 GB de memoria utilizando una precisión de 4 bits. Como tiene muchos menos parámetros que los modelos Llama, es mucho más rápido de ejecutar. A continuación puedes ver los resultados de la muestra de inferencia, utilizando un máximo de 512 tokens en la salida.

Comparación de rendimiento

Para ofrecer una evaluación exhaustiva del rendimiento de la GPU Intel Arc A770, he realizado un análisis comparativo del tiempo de ejecución y el uso de memoria de cada modelo tanto en la GPU Intel Arc A770 como en la NVIDIA RTX3080 TI.

Las métricas se obtuvieron utilizando muestras de código y configuraciones de entorno idénticas para ambas GPU, lo que garantiza una comparación justa y precisa. Para entender mejor los resultados, es importante tener en cuenta que no utilicé cuantización en los modelos de Llama (dtype float16). Como ocupan >12 GB de memoria, al utilizar la GPU NVIDIA el sistema tuvo que usar unos 2-3 GB de memoria compartida para compensar. Por otro lado, la prueba Phi3 utiliza cuantización de 4 bits tanto en las pruebas de NVIDIA como en las de Intel.

Intel ARC A770

Model Output Tokens Execution Time Max Memory Used
meta-llama/Llama-2-7b-hf 128 ~7.7s ~12.8GB
meta-llama/Llama-2-7b-chat-hf 512 ~22.1s ~13.3GB
meta-llama/Meta-Llama-3-8B 64 ~11.5s ~15.1GB
meta-llama/Meta-Llama-3-8B-Instruct 256 ~30.7s ~15.2GB
microsoft/Phi-3-mini-4k-instruct 512 ~5.9s ~2.6GB

NVIDIA RTX3080 TI

Model Output Tokens Execution Time Max Memory Used
meta-llama/Llama-2-7b-hf 128 ~15.5s ~12.8GB
meta-llama/Llama-2-7b-chat-hf 512 ~51.5s ~13.3GB
meta-llama/Meta-Llama-3-8B 64 ~16.9s ~15.1GB
meta-llama/Meta-Llama-3-8B-Instruct 256 ~66.7s ~15.2GB
microsoft/Phi-3-mini-4k-instruct 512 ~16.7s ~2.6GB

Tabla comparativa de prestaciones

El siguiente gráfico ilustra el tiempo de ejecución normalizado en tokens por segundo para cada modelo en las GPU Intel Arc A770 y NVIDIA RTX3080 TI.

*MARGEN DE ERROR: MENOS DE 0.1 SEGUNDOS

Como se puede apreciar, la GPU Intel Arc A770 tuvo un desempeño excepcional en todos los modelos, demostrando tiempos de ejecución competitivos. En particular, la GPU Intel Arc A770 superó a la NVIDIA RTX3080 TI por un factor de dos o más en la mayoría de los casos.

Conclusión

La GPU Intel Arc A770 ha demostrado ser una opción extraordinaria para el cálculo de IA en una máquina Windows local, ya que ofrece una alternativa al ecosistema CUDA/NVIDIA. La capacidad de la GPU para ejecutar eficientemente modelos como Llama2, Llama3 y Phi3 demuestra su potencial y su sólido rendimiento. A pesar de los problemas iniciales de configuración, el proceso fue relativamente sencillo y los resultados fueron impresionantes.

En esencia, la GPU Intel Arc A770 es una potente herramienta para aplicaciones de IA en Windows. Con algunos ajustes iniciales de configuración y código, maneja eficacientemente las tareas de inferencia, chat y entrenamiento. Esto abre nuevas oportunidades para los desarrolladores e investigadores que prefieren o necesitan trabajar en el entorno Windows sin depender de las GPU NVIDIA y CUDA. A medida que Intel continúe mejorando su oferta de GPU y soporte de software, el Arc A770 y los modelos futuros están preparados para convertirse en actores importantes en la comunidad de IA.

Links de interés

Los ejemplos de código utilizados en este artículo se pueden encontrar en IntelArcA770 GitHub repository.

Asimismo, a continuación, se incluyen algunos recursos que considero fundamentales para profundizar en el ecosistema de hardware y bibliotecas de Intel para tareas de IA.

Referencias

javier carnero
Autor
Javier Carnero
Plain Concepts Research