Gtcl Daacaag Wj Scaled.jpeg

Los modelos de lenguaje grande (LLM) enfrentan desafíos de implementación debido a problemas de latencia causados ​​por restricciones de ancho de banda de memoria. Los investigadores utilizan la cuantificación de solo peso para abordar esto, comprimiendo los parámetros LLM para reducir la precisión. Este enfoque mejora la latencia y reduce los requisitos de memoria de la GPU. Implementar esto de manera efectiva requiere núcleos de multiplicación de matriz de tipo mixto personalizados que muevan, descuantifiquen y procesen pesos de manera eficiente. Los núcleos existentes como bits y bytes, Marlin y BitBLAS han mostrado aceleraciones significativas, pero a menudo se limitan a la cuantificación de 4 bits. Los avances recientes en métodos de cuantificación no uniforme y de bits impares resaltan la necesidad de núcleos más flexibles que puedan admitir una gama más amplia de configuraciones para maximizar el potencial de la cuantificación de peso en la implementación de LLM.

Los investigadores han intentado resolver los desafíos de implementación de LLM utilizando cuantificación de solo peso. La cuantificación uniforme convierte los pesos de precisión completa en intervalos de menor precisión, mientras que los métodos no uniformes como la cuantificación de tabla de búsqueda (LUT) ofrecen más flexibilidad. Los núcleos existentes como bits y bytes, Marlin y BitBLAS mueven los pesos cuantificados de la memoria principal a la SRAM en chip, realizando multiplicaciones de matrices después de descuantificarlos a punto flotante. Estos muestran aceleraciones significativas, pero a menudo se especializan en cuantificación uniforme de 4 bits, con núcleos de cuantificación LUT de bajo rendimiento. Los métodos no uniformes como SqueezeLLM y NormalFloat enfrentan compensaciones entre el tamaño de la tabla de búsqueda y la granularidad de cuantificación. Además, las operaciones cuantificadas de manera no uniforme no pueden utilizar aceleradores de GPU optimizados para cálculos de punto flotante. Esto resalta la necesidad de núcleos eficientes que puedan utilizar representaciones cuantificadas para minimizar el movimiento de memoria y las multiplicaciones de matrices de punto flotante nativas de la GPU, equilibrando los beneficios de la cuantificación con la optimización del hardware.

Investigadores del Instituto Tecnológico de Massachusetts, la Escuela Superior de Matemáticas de Plovdiv y la Universidad Carnegie Mellon, MBZUAI, Petuum Inc. presentan un enfoque innovador que, motor de tabla de búsqueda flexible (FLUTE) para implementar LLM cuantificados por peso, centrándose en la cuantificación no uniforme y de bajo número de bits. Aborda tres desafíos principales: manejar matrices de menos de 8 bits, optimizar la descuantificación basada en tablas de búsqueda y mejorar la distribución de la carga de trabajo para lotes pequeños y pesos de bajo ancho de bits. FLUTE supera estos problemas a través de tres estrategias clave: reestructuración de peso fuera de línea, una tabla de búsqueda de memoria compartida para una descuantificación eficiente y partición Stream-K para una distribución optimizada de la carga de trabajo. Este enfoque permite a FLUTE gestionar de manera eficaz las complejidades de la cuantificación no uniforme y de bajo número de bits en la implementación de LLM, mejorando la eficiencia y el rendimiento en escenarios donde los métodos tradicionales no son suficientes.

FLUTE es un enfoque innovador para multiplicaciones de matrices de tipo mixto flexibles en modelos de matriz de bajo peso cuantificados. Aborda desafíos clave en la implementación de modelos de bajo número de bits y cuantificados no uniformes a través de tres estrategias principales:

  1. Reestructuración de matriz fuera de línea: FLUTE reordena los pesos cuantificados para optimizar las operaciones de Tensor Core, manejando anchos de bits no estándar (por ejemplo, 3 bits) dividiendo los pesos en porciones de bits y combinándolos en registros.
  2. Búsqueda vectorizada en memoria compartida: para optimizar la descuantificación, FLUTE utiliza una tabla de búsqueda vectorizada almacenada en memoria compartida, accediendo a dos elementos simultáneamente. También emplea la duplicación de tablas para reducir los conflictos entre bancos.
  3. Partición de carga de trabajo Stream-K: FLUTE implementa la descomposición Stream-K para distribuir uniformemente la carga de trabajo entre los SM, lo que mitiga los problemas de cuantificación de ondas en escenarios de pocos bits y lotes bajos.

Estas innovaciones permiten a FLUTE fusionar de manera eficiente las operaciones de descuantificación y multiplicación de matrices, optimizando el uso de la memoria y el rendimiento computacional. El núcleo emplea una sofisticada secuencia de movimientos de datos entre la memoria global, la memoria compartida y los registros, utilizando las capacidades del hardware de la GPU para obtener el máximo rendimiento en implementaciones LLM cuantificadas por peso.

FLUTE muestra un rendimiento impresionante en distintas formas de matriz, tanto en las GPU A6000 como en las A100. En la A6000, ocasionalmente se acerca a la aceleración máxima teórica de 4x. Este rendimiento también es constante en distintos tamaños de lote, a diferencia de otros núcleos compatibles con LUT que normalmente alcanzan aceleraciones similares solo en un tamaño de lote de 1 y luego se degradan rápidamente a medida que aumenta el tamaño del lote. Además, el rendimiento de FLUTE se compara bien incluso con Marlin, un núcleo altamente especializado para la entrada FP16 y pesos INT4 cuantificados de manera uniforme. Esto demuestra la capacidad de FLUTE para manejar de manera eficiente esquemas de cuantificación tanto uniformes como no uniformes.

FLUTE demuestra un rendimiento superior en la implementación de LLM en varias configuraciones de cuantificación. El enfoque de cuantificación NF aprendido supera a los métodos estándar y se combina bien con AWQ. La flexibilidad de FLUTE permite experimentos con diferentes anchos de bits y tamaños de grupo, casi igualando la perplejidad de línea base de 16 bits con tamaños de grupo pequeños. Las pruebas de latencia de extremo a extremo utilizando el marco vLLM mostraron aceleraciones significativas en varias configuraciones, incluso con modelos Gemma-2. Se descubrió que un tamaño de grupo de 64 equilibra la calidad y la velocidad de manera efectiva. En general, FLUTE demuestra ser una solución versátil y eficiente para la implementación de LLM cuantificada, que ofrece un rendimiento mejorado en múltiples escenarios.

FLUTE es un núcleo CUDA diseñado para acelerar la inferencia LLM a través de multiplicaciones de matrices cuantificadas fusionadas. Ofrece flexibilidad en la asignación de valores cuantificados a descuantizados a través de tablas de búsqueda y admite varios anchos de bits y tamaños de grupo. El rendimiento de FLUTE se demuestra a través de pruebas comparativas a nivel de núcleo y evaluaciones de extremo a extremo en LLM de última generación como LLaMA-3 y Gemma-2. Probado en GPU A6000 y A100 en configuraciones paralelas de tensor y simple, FLUTE muestra eficiencia en configuraciones no cuantificadas, de 3 bits y de 4 bits. Esta versatilidad y rendimiento hacen de FLUTE una solución prometedora para acelerar la inferencia LLM mediante técnicas de cuantificación avanzadas.


Revisar la Papel y GitHub. Todo el crédito por esta investigación corresponde a los investigadores de este proyecto. Además, no olvides seguirnos en Gorjeo y únete a nuestro Canal de Telegram y LinkedIn Gr¡Arriba!. Si te gusta nuestro trabajo, te encantará nuestro Boletin informativo..

No olvides unirte a nuestro Más de 47 000 suscriptores de ML en Reddit

Encuentra lo próximo Seminarios web sobre IA aquí


Asjad es consultor en prácticas en Marktechpost. Está cursando la licenciatura en ingeniería mecánica en el Instituto Indio de Tecnología de Kharagpur. Asjad es un entusiasta del aprendizaje automático y del aprendizaje profundo que siempre está investigando las aplicaciones del aprendizaje automático en el ámbito de la atención médica.