NITRO: Un Cambio de Juego para LLMs en NPUs
NITRO cierra la brecha para ejecutar LLMs en NPUs, mejorando el rendimiento y la eficiencia.
Anthony Fei, Mohamed S. Abdelfattah
― 10 minilectura
Tabla de contenidos
- ¿Qué es NITRO?
- ¿Qué tiene de especial Meteor Lake?
- El desafío con los LLMs
- El papel de OpenVINO
- Un vistazo dentro de OpenVINO
- Cómo funciona NITRO
- Reescribiendo modelos de PyTorch
- Extendiendo los KV-Caches
- Moviendo embeddings rotatorios
- Conversión eficiente de modelos
- La importancia de nombrar
- La estructura del directorio del modelo
- Poniéndolo todo junto para inferencia
- Benchmarking de rendimiento
- Manejo de errores y desafíos
- NITRO vs. Otras bibliotecas
- Mirando hacia adelante
- Conclusión
- Fuente original
- Enlaces de referencia
Los Modelos de Lenguaje Grande (LLMs) son como las superestrellas del mundo tech hoy en día. Ayudan con todo, desde chatbots hasta tareas de investigación. Si alguna vez has charlado con un asistente virtual, entonces ya has conocido a un LLM. Una de las áreas emocionantes en tecnología ahora mismo es crear hardware que funcione perfectamente con estos modelos. Un tipo de hardware se llama Unidad de Procesamiento Neural (NPU).
En 2023, un fabricante de chips importante lanzó el procesador Intel Core Ultra, llamado Meteor Lake. Este procesador tiene tres componentes principales: una unidad central de procesamiento (CPU), una unidad de procesamiento gráfico (GPU) y una NPU. Sin embargo, hay una trampa: el software disponible para estas NPUs no soporta las necesidades dinámicas de los LLMs tal cual vienen. Así que, los investigadores han estado buscando una forma de hacer que esto funcione mejor. Ahí es donde entra el concepto de NITRO.
¿Qué es NITRO?
NITRO es un marco diseñado para ayudar a los LLMs a funcionar en NPUs. Está hecho con Python y trabaja junto al marco OpenVINO de Intel. Piensa en ello como el ayudante amigable que se asegura de que los LLMs puedan generar texto y mantener conversaciones de manera eficiente en este hardware especializado.
¿Qué tiene de especial Meteor Lake?
El procesador Meteor Lake es como una navaja suiza, con varios módulos que cada uno cumple funciones diferentes. Estos módulos incluyen áreas para computación, gráficos, control del sistema y manejo de entrada/salida. Ahora, si imaginas una ciudad bulliciosa con diferentes distritos, ¡no estás tan lejos!
Entre estos módulos, la NPU destaca. Se especializa en ejecutar tareas de IA y lo hace con bajo consumo de energía. Para ilustrar, la NPU puede manejar una increíble cantidad de operaciones por segundo, lo cual es impresionante para un dispositivo pequeño. Esto lo hace muy adecuado para tareas como ejecutar LLMs. Sin embargo, también enfrenta algunos desafíos, principalmente porque solo puede trabajar con modelos estáticos. ¡Imagínate tratando de armar un rompecabezas donde algunas piezas siguen cambiando de forma mientras intentas encajarlas!
El desafío con los LLMs
Los LLMs operan de forma dinámica; piénsalo como una receta donde sigues añadiendo ingredientes mientras cocinas. Constantemente crean nuevos datos durante el proceso de generación de texto. Desafortunadamente, el requisito de modelo estático de la mayoría de las NPUs no se lleva bien con este proceso de añadir ingredientes.
Así que, los investigadores han estado rascándose la cabeza, tratando de encontrar una manera de hacer que estos modelos dinámicos funcionen en el hardware que los soporta. Es como intentar encajar una pieza cuadrada en un agujero redondo—frustrante y a menudo imposible.
El papel de OpenVINO
OpenVINO de Intel es un kit de herramientas que ayuda a los desarrolladores a implementar modelos de aprendizaje automático en varios dispositivos de Intel, incluyendo CPUs, GPUs y NPUs. Presenta modelos en un formato específico. Sin embargo, cuando se trata de soportar LLMs, OpenVINO tiene algunas limitaciones.
Los modelos que maneja son principalmente para operaciones estáticas, lo que significa que cada parte del modelo necesita tener una forma definida. Cuando piensas en la arquitectura de transformadores que usan los LLMs, esto crea un nivel de dificultad. Los transformadores funcionan ajustando su estructura según la entrada que reciben, pero el requisito estático impide esa flexibilidad.
Un vistazo dentro de OpenVINO
OpenVINO está compuesto por archivos de modelo específicos que detallan cómo opera el modelo. Cada modelo es similar a un plano, con nodos que representan varias operaciones (como mover datos) y bordes que los conectan. Aunque esta estructura funciona bien para muchas aplicaciones de aprendizaje automático, no es ideal para los LLMs debido a su naturaleza dinámica.
En términos más simples, si OpenVINO fuera un aula, cada nodo representaría a un niño esperando su turno para hablar. Pero dado que los LLMs siguen añadiendo nuevos "estudiantes" (es decir, datos) cada segundo, la configuración es un poco caótica.
Cómo funciona NITRO
Ahora profundicemos en cómo NITRO trabaja para cerrar esta brecha. El marco tiene unos principios guías para hacerlo efectivo. Primero, busca mantenerse fiel al diseño de OpenVINO, lo que significa que deja que OpenVINO haga la mayor parte del trabajo pesado mientras NITRO interviene para tareas que requieren ayuda adicional.
En segundo lugar, el marco está diseñado para ser flexible. Con tantas ideas dando vueltas en la investigación, es importante que NITRO pueda adaptarse y manejar varias tareas. Finalmente, mantener todo fácil de entender y mantener es una prioridad. Después de todo, a nadie le gusta lidiar con un lío de código que requiere un título para descifrar.
Reescribiendo modelos de PyTorch
Para hacer que los LLMs funcionen bien con NPUs, los investigadores a menudo reescriben modelos existentes. Imagina tomar una novela clásica y adaptarla a un cómic fácil de leer. Eso es lo que está pasando aquí. Al reestructurar estos modelos, pueden convertirse en un formato que es compatible con OpenVINO.
Un cambio implica simplificar las entradas en los modelos. Muchos modelos existentes usan configuraciones complejas; esto puede resultar en conversiones fallidas. Al simplificar todo, se vuelve mucho más fácil la transición de un modelo de PyTorch a formato IR de OpenVINO.
Extendiendo los KV-Caches
El sistema de Caché de Clave-Valor en los LLMs, que almacena datos para acceso rápido, puede volverse complicado cuando necesitamos mantener formas estáticas. NITRO resuelve esto al extender las cachés para asegurar que siempre haya espacio extra disponible. Es como reservar algunas sillas adicionales en una cena—¡nunca sabes cuándo pueden llegar más invitados!
Moviendo embeddings rotatorios
Otro cambio involucra los embeddings rotatorios, que son técnicas matemáticas que ayudan a los LLMs a entender el contexto. NITRO mueve estos embeddings al área de trabajo principal en lugar de manejarlos por separado. Este ajuste ayuda a agilizar el proceso y mantiene todo más organizado.
Conversión eficiente de modelos
Una vez que los modelos están reescritos y correctamente configurados, están listos para ser convertidos en OpenVINO IR. Pero hay un truco: los modelos más grandes pueden rápidamente exceder los límites de memoria, como si apilaras demasiados libros en una estantería. Para combatir esto, los investigadores utilizan un método llamado "chunking".
Esta técnica implica descomponer el modelo en piezas más pequeñas, que pueden ser procesadas una a la vez en lugar de intentar manejarlo todo de una vez. Esta es una forma eficiente de gestionar recursos y asegura transiciones exitosas de modelos de PyTorch a OpenVINO.
La importancia de nombrar
A medida que los modelos son convertidos, el nombrado es crucial. Al igual que tener un archivo bien organizado, tener nombres claros para cada parte del modelo hace todo más fácil de rastrear. Cuando los nodos tienen nombres descriptivos, simplifica el proceso de encontrar y gestionar datos durante la operación del modelo.
La estructura del directorio del modelo
Después de la conversión, cada modelo se organiza en una estructura de directorio ordenada. Esta organización es esencial para asegurar que todo sea fácilmente accesible y bien definido. Si alguna vez has intentado encontrar tu camino en un armario desordenado, apreciarás el valor de una configuración ordenada.
Poniéndolo todo junto para inferencia
Una vez que todo está en su lugar, NITRO establece un pipeline estándar para generar texto. Esta es la parte donde es como una máquina bien engrasada, tomando entradas y produciendo salida de texto coherente. El marco abstrae la complejidad para que los desarrolladores no tengan que preocuparse por los detalles complicados.
Benchmarking de rendimiento
Los investigadores han estado ocupados probando qué tan bien funcionan estos modelos en la NPU en comparación con otro hardware como CPUs y GPUs. Han montado una laptop equipada con el procesador Meteor Lake para realizar varias pruebas, rastreando qué tan rápido pueden generar texto diferentes modelos.
Mientras que la GPU podría ser la campeona en velocidad pura, la NPU muestra mucho potencial, especialmente para modelos de tamaño mediano. Los resultados revelan que, aunque la NPU es generalmente más lenta que la GPU, sigue teniendo ventajas en eficiencia energética. Es como elegir entre un coche deportivo llamativo y un sedán confiable y eficiente en combustible—¡depende de lo que valores más!
Manejo de errores y desafíos
A pesar de todos los avances, hay contratiempos en el camino. Al probar varias configuraciones, los resultados no siempre coinciden con las expectativas. Específicamente, han surgido problemas con ciertas técnicas de compresión de pesos, y aparecen errores cuando se utilizan ciertas combinaciones.
¡Pero no temas! Esto es parte del viaje en el desarrollo tecnológico. Al igual que un chef a veces tiene que ajustar su receta, los investigadores deben modificar sus métodos para superar estos desafíos.
NITRO vs. Otras bibliotecas
Al comparar NITRO con otras bibliotecas de aceleración de NPU, los resultados muestran que NITRO ofrece un rendimiento significativamente mejor. El enfoque de NITRO lleva a tiempos de inferencia más rápidos, superando a las alternativas.
Sin embargo, aún hay áreas donde un mayor desarrollo puede ayudar a mejorar la eficiencia y el rendimiento general.
Mirando hacia adelante
Aunque NITRO ha hecho grandes avances para permitir que los LLMs funcionen en NPUs, todavía hay espacio para mejorar. El trabajo futuro podría centrarse en refinar aún más los embeddings rotatorios o desarrollar nuevos métodos para agilizar todo el proceso de inferencia.
El objetivo final sigue siendo hacer que las NPUs sean una opción preferida para ejecutar LLMs, especialmente dado su potencial para la eficiencia energética. Ser consciente del consumo de energía es más importante ahora que nunca, y las NPUs podrían ser el mejor candidato para satisfacer ese requisito.
Conclusión
En el gran esquema de la tecnología, los desarrolladores enfrentan desafíos constantes para mantenerse al día con los avances en LLMs y hardware. El trabajo continuo con marcos como NITRO muestra promesas para futuras integraciones y optimizaciones. A medida que la investigación avanza y se hacen mejoras, la esperanza es que veremos un mundo donde los dispositivos eficientes en energía puedan manejar el trabajo pesado de la IA avanzada sin sudar.
Así que, aunque el viaje tiene sus baches, el camino por delante se ve brillante para las NPUs, los LLMs y la comunidad tech en general. Después de todo, dicen que la necesidad es la madre de la invención, y con las crecientes demandas de sistemas más inteligentes, ¡podemos esperar innovaciones emocionantes a la vuelta de la esquina!
Título: NITRO: LLM Inference on Intel Laptop NPUs
Resumen: Large Language Models (LLMs) have become essential tools in natural language processing, finding large usage in chatbots such as ChatGPT and Gemini, and are a central area of research. A particular area of interest includes designing hardware specialized for these AI applications, with one such example being the neural processing unit (NPU). In 2023, Intel released the Intel Core Ultra processor with codename Meteor Lake, featuring a CPU, GPU, and NPU system-on-chip. However, official software support for the NPU through Intel's OpenVINO framework is limited to static model inference. The dynamic nature of autoregressive token generation in LLMs is therefore not supported out of the box. To address this shortcoming, we present NITRO (NPU Inference for Transformers Optimization), a Python-based framework built on top of OpenVINO to support text and chat generation on NPUs. In this paper, we discuss in detail the key modifications made to the transformer architecture to enable inference, some performance benchmarks, and future steps towards improving the package. The code repository for NITRO can be found here: https://github.com/abdelfattah-lab/nitro.
Autores: Anthony Fei, Mohamed S. Abdelfattah
Última actualización: 2024-12-15 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2412.11053
Fuente PDF: https://arxiv.org/pdf/2412.11053
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.
Enlaces de referencia
- https://github.com/goodfeli/dlbook_notation
- https://github.com/abdelfattah-lab/nitro
- https://docs.openvino.ai/2024/index.html
- https://huggingface.co/docs/optimum/en/intel/index
- https://github.com/intel/intel-npu-acceleration-library
- https://github.com/intel/intel-npu-acceleration-library/blob/main/src/bindings.cpp
- https://github.com/meta-llama/llama-models/blob/main/models/llama3/reference_impl/model.py
- https://github.com/abdelfattah-lab/nitro/tree/main/nitro/pytorch_model
- https://github.com/intel/linux-npu-driver/releases
- https://github.com/openvinotoolkit/nncf
- https://docs.openvino.ai/2024/get-started/install-openvino/install-openvino-genai.html