Pesos activos en lugar de una matriz completa: decodificación INT8 de un modelo de spikes en CPU

27 septiembre 202624 vistas

El artículo describe una implementación en C++ para un modelo de lenguaje con gating binario por spikes: las proyecciones dispersas se procesan en INT8 y los cálculos solo tienen en cuenta los pesos activos. En una prueba de un solo hilo, la primera versión INT8 alcanzó 23,31 tokens/s frente a los 9,82 de FP32 y redujo la memoria ocupada por los pesos de 3355,2 a 1087,4 MiB; el paso de las proyecciones densas a INT4 redujo el rendimiento de decodificación.

Pesos activos en lugar de una matriz completa: decodificación INT8 de un modelo de spikes en CPU

Cómo cambian los impulsos el procesamiento de los pesos

En el artículo «Spike-Aware INT8 Execution for Spiking Language Models on Commodity CPUs» Ting Liu describe la decodificación de un modelo de lenguaje basado en impulsos en una CPU.

  • Las activaciones binarias de impulsos permiten leer solo las columnas activas de los pesos.
  • Las multiplicaciones se sustituyen por sumas de pesos.

En la práctica, este enfoque permite no procesar las columnas que no se han activado. La ganancia depende de la dispersión de las activaciones, no solo del formato de los pesos.

Cómo funciona la ruta INT8

La implementación en C++ se probó con un modelo de lenguaje con compuertas de impulsos y 874M de parámetros. Utiliza distintos modos para las proyecciones dispersas y densas.

  • En las proyecciones dispersas, los pesos INT8 se almacenan en formato por columnas.
  • La acumulación se realiza con números enteros y la escala se aplica una sola vez por canal de salida.
  • En las proyecciones densas se mantienen el acceso por filas y las activaciones FP32.

Es un esquema mixto, no una conversión de todas las operaciones del modelo a INT8. El criterio de elección es si conviene mantener FP32 en las proyecciones densas para disponer de una ruta INT8 dispersa.

Qué cifras de velocidad y almacenamiento se presentan

Se comparó un checkpoint inicial con un solo hilo. En esta prueba, INT8 mostró una mayor velocidad de decodificación y un menor espacio de almacenamiento de los pesos.

Checkpoint inicial, un hiloVelocidad de decodificaciónAlmacenamiento de los pesos
FP329.82 tokens/s3355.2 MiB
INT823.31 tokens/s1087.4 MiB

Para el checkpoint final se indican resultados aparte en un AMD Ryzen 7 5800X. Las condiciones difieren de las de la comparación del checkpoint inicial.

Modo del checkpoint final INT8Indicador
Decodificación, un hilo22.63 tokens/s
Decodificación, cuatro hilos47.90 tokens/s
Prefill de una secuencia de 512 tokens, ocho hilos94.68 tokens/s

Estas cifras no se pueden combinar directamente en una única tabla comparativa: corresponden a checkpoints y modos distintos. Para evaluar el rendimiento, son importantes tanto la versión del checkpoint como el número de hilos.

Qué cambia con la variante INT4

La variante con INT4 para las proyecciones densas reduce el espacio de almacenamiento otro 17.4%. Sin embargo, la velocidad de decodificación disminuye un 46.6%.

En la versión corregida del artículo se retiraron los resultados no válidos para INT4 puro. Por tanto, el compromiso descrito corresponde a INT4 en las proyecciones densas, no a un modelo totalmente INT4.

El criterio de elección es priorizar el almacenamiento frente a la velocidad de decodificación. Los resultados de INT4 puro no se pueden utilizar como prueba de rendimiento.

Qué se sabe sobre el consumo de energía

En un estudio aparte de la cabeza de salida en ARM, se registraron cifras de energía más altas para dos configuraciones de verificación de candidatos en una ventana de decodificación truncada.

La versión corregida del artículo también añade una validación numérica y un estudio del consumo de energía mediante mediciones de wall-power en ARM. Los datos de las pruebas de velocidad en CPU no bastan para concluir que se ahorre energía.

Preguntas frecuentes

Material similar

Todos los materiales
Pesos activos en lugar de una matriz completa: decodificación INT8 de un modelo de spikes en CPU