Modelos y plataformas de IA
PowerInfer: Motor de inferencia de lenguaje grande y rápido con GPU de consumo
Debido a sus excepcionales capacidades de creación de contenido, los Modelos de Lenguaje Grande Generativos están ahora a la vanguardia de la revolución de la IA, con esfuerzos continuos para mejorar sus capacidades generativas. Sin embargo, a pesar de los avances rápidos, estos modelos requieren una gran cantidad de poder computacional y recursos. Esto se debe en gran medida a que consisten en cientos de miles de millones de parámetros. Además, para funcionar sin problemas, los modelos de IA generativos dependen de miles de GPU, lo que genera costos operativos significativos. Las altas demandas operativas son una de las razones principales por las que los modelos de IA generativos no se han desplegado aún de manera efectiva en dispositivos personales.
En este artículo, discutiremos PowerInfer, un motor de inferencia de lenguaje grande de alta velocidad diseñado para computadoras estándar alimentadas por una sola GPU de consumo. El marco de PowerInfer busca aprovechar la alta localidad inherente en la inferencia de lenguaje grande, caracterizada por una distribución de ley de potencia en la activación de neuronas. Esto significa que en cualquier momento dado, un pequeño subconjunto de neuronas “calientes” están consistentemente activas en todas las entradas, mientras que el resto, denominadas neuronas “frías”, se activan según entradas o requisitos específicos. Este enfoque permite al marco de PowerInfer reducir la potencia de cálculo necesaria para que la IA generativa produzca los resultados deseados.
Entraremos en detalles sobre el marco de PowerInfer, explorando su metodología, tubería y resultados de aplicación práctica. Comencemos.
PowerInfer: Modelo de lenguaje grande y rápido con GPU de consumo
Los Modelos de Lenguaje Grande Generativos, como ChatGPT y DALL-E, son conocidos por sus tareas de procesamiento de lenguaje natural y generación sofisticadas. Debido a sus altas demandas computacionales, estos modelos suelen implementarse en centros de datos con GPU avanzadas. La necesidad de tal poder computacional limita su implementación a centros de datos, destacando la necesidad de implementar modelos de lenguaje grande en plataformas locales más accesibles como computadoras personales.
Aumentar la accesibilidad de los modelos de lenguaje grande podría reducir los costos de inferencia y generación de contenido, mejorar la privacidad de los datos y permitir la personalización del modelo. Además, mientras que las implementaciones de centros de datos priorizan el alto rendimiento, las implementaciones de lenguaje grande locales podrían centrarse en la baja latencia debido a los tamaños de lote más pequeños.
Sin embargo, implementar estos modelos en dispositivos locales plantea desafíos significativos debido a sus requisitos de memoria sustanciales. Los modelos de lenguaje grande, que funcionan como transformadores autoregresivos, generan texto token por token, con cada token que requiere acceso al modelo completo, que comprende cientos de miles de millones de parámetros. Esto requiere numerosas GPU de alta gama para generar resultados de baja latencia. Además, las implementaciones locales suelen procesar solicitudes individuales de forma secuencial, lo que limita el potencial de procesamiento paralelo.
Para abordar los complejos requisitos de memoria del marco de IA generativa, las soluciones existentes emplean métodos como la descarga de modelos y la compresión. Técnicas como la destilación, la poda y la cuantificación reducen el tamaño del modelo, pero siguen siendo demasiado grandes para las GPU estándar en las computadoras personales. La descarga de modelos, que divide el modelo en la capa de transformador entre CPU y GPU, permite el procesamiento de capas distribuidas en la memoria de CPU y GPU. Sin embargo, este método está limitado por la lenta interconexión PCIe y las capacidades computacionales limitadas de las CPU, lo que lleva a una alta latencia de inferencia.
El marco de PowerInfer sostiene que la discrepancia entre las características de inferencia de lenguaje grande y la estructura del hardware es la causa principal de los problemas de memoria en la inferencia de lenguaje grande. Idealmente, los datos que se acceden con frecuencia deberían almacenarse en GPU de alta banda y capacidad limitada, mientras que los datos menos accesados deberían estar en CPU de baja banda y alta capacidad. Sin embargo, el gran volumen de parámetros de cada iteración de inferencia de lenguaje grande hace que el conjunto de trabajo sea demasiado grande para una sola GPU, lo que resulta en una explotación ineficiente de la localidad.
El proceso de inferencia en los modelos de lenguaje grande muestra una alta localidad, con cada iteración que activa un número limitado de neuronas. El marco de PowerInfer busca aprovechar esta localidad al gestionar un pequeño número de neuronas “calientes” con la GPU, mientras que la CPU maneja las neuronas “frías”. Preselecciona y precarga las neuronas “calientes” en la GPU e identifica las neuronas activadas durante la ejecución. Este enfoque minimiza las costosas transferencias de datos PCIe, lo que permite a las GPU y las CPU procesar sus neuronas asignadas de forma independiente.
Sin embargo, implementar los modelos de lenguaje grande en dispositivos locales enfrenta obstáculos. Los predictores en línea, cruciales para identificar las neuronas activadas, consumen una gran cantidad de memoria de la GPU. El marco de PowerInfer utiliza un método adaptativo para construir predictores pequeños para capas con una mayor sesgo de activación y espacialidad, manteniendo la precisión mientras reduce el tamaño. Además, los marcos de lenguaje grande requieren operadores espaciales especializados. El marco de PowerInfer emplea operadores espaciales conscientes de las neuronas que se comunican directamente con las neuronas, eliminando la necesidad de conversiones de formato espacial específico durante la ejecución.
Finalmente, colocar las neuronas activadas de manera óptima entre la CPU y la GPU es un desafío. El marco de PowerInfer utiliza una etapa fuera de línea para crear una política de colocación de neuronas, midiendo el impacto de cada neurona en los resultados de la inferencia de lenguaje grande y enmarcándolo como un problema lineal entero.
Arquitectura y Metodología
La siguiente figura describe la arquitectura del marco de PowerInfer, que consiste en componentes fuera de línea y en línea en la tubería.

Gracias a la variación observada en las propiedades de localidad entre los diferentes modelos de lenguaje grande, el componente fuera de línea perfila la espacialidad de activación del marco de lenguaje grande, lo que le permite diferenciar entre neuronas “calientes” y “frías”. Por otro lado, en la fase fuera de línea, dos tipos de neuronas se cargan en la GPU y la CPU por el motor de inferencia, lo que permite atender solicitudes de lenguaje grande con baja latencia durante la ejecución.
Fase fuera de línea: Solucionador de políticas y perfiler de lenguaje grande
En la fase fuera de línea, un componente de perfiler de lenguaje grande utiliza solicitudes derivadas de un conjunto de datos general para recopilar datos de activación del proceso de inferencia. En el primer paso, monitorea la activación de las neuronas en todas las capas del marco y procede a utilizar un componente de solucionador de políticas para categorizar las neuronas como “calientes” o “frías”. El objetivo principal del solucionador de políticas es asignar neuronas activadas con más frecuencia a las capas de la GPU, mientras que asigna el resto a las capas de la CPU. En la segunda etapa, el componente de solucionador de políticas utiliza métricas de impacto de neuronas y especificaciones de hardware para equilibrar la carga de trabajo entre las capas y maximizar la métrica de impacto de la GPU para las neuronas utilizando programación lineal entera.
Fase en línea: Motor de inferencia de lenguaje grande consciente de neuronas
Una vez que se ejecuta con éxito la etapa fuera de línea, el marco procede a ejecutar la etapa en línea. En el tercer paso del proceso, el motor en línea asigna neuronas “calientes” y “frías” a sus unidades de procesamiento respectivas antes de procesar las solicitudes de los usuarios, dependiendo de la salida del solucionador de políticas fuera de línea. Durante la ejecución y en el paso 4, el motor en línea gestiona los cálculos de la GPU y la CPU creando ejecutores de la CPU y la GPU que son hilos que se ejecutan en el lado de la CPU. El motor luego predice las neuronas activadas y procede a omitir las neuronas no activadas. Las neuronas activadas se precargan en la GPU para el procesamiento. Mientras tanto, la CPU calcula y transfiere los resultados para sus neuronas para integrarlos con la GPU. El motor en línea puede centrarse en filas y columnas individuales de neuronas dentro de matrices porque utiliza operadores espaciales conscientes de las neuronas en las CPU y las GPU.

Predictores de espacialidad adaptativa
El concepto principal detrás de la reducción de las cargas computacionales por el motor de inferencia en línea en el marco de PowerInfer es que solo procesa las neuronas que predice que estarán activadas. Tradicionalmente, dentro de cada capa de transformador, un marco utiliza dos predictores diferentes para predecir la activación de las neuronas en los bloques de autoatención y MLP, como resultado de lo cual la computación de inferencia se limita a las neuronas predichas como activas. Sin embargo, es difícil diseñar predictores efectivos para la implementación local porque la cantidad limitada de recursos hace que sea difícil equilibrar el tamaño del modelo y la precisión de la predicción. Dado que estos predictores se implementan con frecuencia por el marco para predecir neuronas activadas, deben almacenarse en la GPU para permitir un acceso más rápido. Sin embargo, los marcos generalmente implementan un gran número de predictores que ocupan una cantidad considerable de memoria, incluso la necesaria para almacenar los parámetros de lenguaje grande.
Además, el tamaño de los predictores generalmente está determinado por dos factores: sesgo interno y espacialidad de las capas de lenguaje grande.

Para optimizar estos factores, el marco de PowerInfer utiliza un método de entrenamiento iterativo para cada predictor en la capa de transformador sin un tamaño fijo. En el primer paso de este método de entrenamiento, se establece el tamaño del modelo de referencia en función del perfil de espacialidad del modelo, y el tamaño del modelo se ajusta iterativamente teniendo en cuenta la sesgo de activación interna para mantener la precisión.
Colocación y gestión de neuronas
Como se mencionó anteriormente, mientras el componente de solucionador de políticas fuera de línea determina la política de colocación de neuronas, el componente del motor de inferencia en línea carga el modelo en la memoria de la GPU y la CPU según la política generada. Para cada capa que puede o no tener varias matrices de pesos, el marco de PowerInfer asigna cada neurona a la CPU o la GPU en función de si la neurona está activada “caliente”. Asegurar el cálculo preciso de neuronas segmentadas en la secuencia determinada es esencial para obtener resultados precisos. Para abordar esto, el marco de PowerInfer genera dos tablas de neuronas: una ubicada en la memoria de la GPU y otra en la memoria de la CPU, con cada tabla que correlaciona las neuronas individuales con su posición original en la matriz.
Operador consciente de neuronas
Dada la espacialidad de activación observada en los modelos de lenguaje grande, las neuronas inactivas y sus pesos pueden omitirse mediante operaciones de multiplicación de matrices, lo que crea la necesidad de utilizar operadores espaciales. En lugar de emplear operadores espaciales que tienen varias limitaciones, el marco de PowerInfer utiliza operadores conscientes de neuronas que calculan las neuronas activadas y sus pesos directamente en la GPU y la CPU sin requerir conversiones de formato denso durante la ejecución. Los operadores conscientes de neuronas difieren de los operadores espaciales tradicionales en que se centran en vectores de fila y columna individuales dentro de una sola matriz, en lugar de centrarse en la matriz completa.
Política de colocación de neuronas
Para aprovechar las capacidades computacionales de las CPU y las GPU, el componente fuera de línea en el marco de PowerInfer genera una política de colocación que guía el marco al asignar neuronas a las capas de la CPU o la GPU. El solucionador de políticas genera esta política y controla la colocación de neuronas dentro de cada capa, lo que ayuda a determinar la carga de trabajo computacional para cada unidad de procesamiento. Al generar la política de colocación, el componente de solucionador de políticas considera varios factores, incluida la frecuencia de activación de cada neurona, la sobrecarga de comunicación y las capacidades computacionales como ancho de banda y tamaño de memoria de cada unidad de procesamiento.
Resultados y Implementación
Para demostrar las capacidades de generalización del marco de PowerInfer en dispositivos con diferentes configuraciones de hardware, los experimentos se realizaron en dos computadoras personales distintas: una equipada con un procesador Intel (INTC ) i9-13900K, una GPU NVIDIA RTX 4090 y 192 GB de memoria de host, mientras que la otra opera con un procesador Intel i7-12700K, una GPU NVIDIA RTX 2080Ti y 64 GB de memoria de host.
El rendimiento de extremo a extremo del marco de PowerInfer se comparó con llama.cpp con un tamaño de lote de 1 y la configuración de implementación predeterminada. El marco luego muestrea las solicitudes de los conjuntos de datos de ChatGPT y Alpaca, dados la variabilidad de longitud observada en la entrada y salida de diálogo en el mundo real. La siguiente figura muestra las velocidades de generación para diferentes modelos.

Como se puede observar, el marco de PowerInfer genera 8,32 tokens por segundo y alcanza hasta 16 tokens generados por segundo, superando así al marco de llama.cpp por un margen significativo. Además, a medida que aumenta el número de tokens de salida, el rendimiento del marco de PowerInfer también mejora, ya que la fase de generación afecta significativamente el tiempo de inferencia general.

Además, como se puede observar en la imagen de arriba, el marco de PowerInfer supera al marco de llama.cpp en computadoras de gama baja con una tasa de generación máxima de 7 tokens por segundo y una velocidad de generación de tokens promedio de 5 tokens por segundo.

La imagen de arriba muestra la distribución de la carga de neuronas entre la GPU y la CPU para los dos marcos. Como se puede ver, el marco de PowerInfer aumenta significativamente la participación de la carga de neuronas de la GPU, desde el 20 hasta el 70%.

La imagen de arriba compara el rendimiento de los dos marcos en dos computadoras con diferentes especificaciones. Como se puede ver, el marco de PowerInfer entrega consistentemente una alta velocidad de generación de tokens de salida en comparación con el marco de llama.cpp.
Pensamientos finales
En este artículo, hemos hablado sobre PowerInfer, un motor de inferencia de lenguaje grande de alta velocidad para una computadora estándar alimentada por una sola GPU de consumo. En su núcleo, el marco de PowerInfer intenta aprovechar la alta localidad inherente en la inferencia de lenguaje grande, un método caracterizado por la distribución de ley de potencia en la activación de neuronas. El marco de PowerInfer es un sistema de interferencia rápido diseñado para modelos de lenguaje grande que utiliza predictores adaptativos y operadores conscientes de neuronas para activar las neuronas y la espacialidad computacional.












