Este repositorio contiene una implementación del modelo LLaMA 2 (Large Language Model Meta AI), una variante del Transformador preentrenado generativo (GPT). La implementación se centra en la arquitectura del modelo y el proceso de inferencia. El código está reestructurado y muy comentado para facilitar la comprensión de las partes clave de la arquitectura.
Normalización RMS: RMSNorm es una simplificación de la normalización de capa original (LayerNorm). LayerNorm es una técnica de regularización que podría manejar el problema del cambio de covariables internas para estabilizar las activaciones de capas y mejorar la convergencia del modelo. Ha demostrado ser bastante exitoso en LLaMA 2.
Función de activación: LLaMA 2 utiliza la función de activación SwiGLU en lugar de ReLU, lo que mejora el rendimiento del entrenamiento.
Incrustaciones posicionales rotativas (RoPE): Inspirado en el proyecto GPT-Neo-X, LLaMA 2 incorpora incrustaciones posicionales rotativas en cada capa, mejorando la comprensión posicional del modelo.
Mayor longitud de contexto y atención de consultas agrupadas (GQA): el modelo LLaMA 2 tiene una ventana de contexto duplicada (de 2048 a 4096 tokens) y emplea atención de consultas agrupadas. Esto permite un mejor procesamiento de documentos largos, historiales de chat y tareas de resumen.
El almacenamiento en caché KV es una técnica de optimización crucial empleada en esta implementación para acelerar el proceso de inferencia para la decodificación del modelo de lenguaje (LM). Durante la decodificación autorregresiva, donde cada token se predice en función de los tokens anteriores, la autoatención dentro del modelo es causal. Esto implica que la representación de un token se calcula basándose únicamente en sí mismo y en los tokens anteriores, no en los futuros.
En la autoatención, la secuencia de entrada se proyecta utilizando proyecciones de clave, valor y consulta. La caché KV almacena eficientemente los resultados de las proyecciones de claves y valores, eliminando la necesidad de cálculos redundantes en futuras iteraciones de decodificación. Como resultado, las representaciones de los tokens que permanecen fijos durante la decodificación autorregresiva se pueden recuperar del caché, lo que mejora significativamente la velocidad de inferencia.
Esta técnica de almacenamiento en caché KV es una característica arquitectónica clave que mejora la eficiencia y la velocidad del modelo LLaMA durante la decodificación.
El modelo LLaMA 2 incorpora una variación del concepto de Atención Multi-Query (MQA) propuesto por Shazeer (2019), un refinamiento del algoritmo Multi-Head Attention (MHA). MQA mejora la eficiencia de los mecanismos de atención manteniendo una degradación mínima de la precisión.
En la atención tradicional de múltiples cabezas, todo el cálculo de la atención se replica h veces, donde h es el número de cabezas de atención. Sin embargo, GQA reduce la redundancia computacional al eliminar o reducir significativamente la dimensión de las cabezas (h) de los valores K y V. En MQA, cada "cabeza" del valor de la consulta (Q) sufre la misma transformación K y V, optimizando el cálculo de la atención.
Este refinamiento da como resultado un rendimiento computacional similar al de MHA, pero reduce significativamente la cantidad de datos leídos/escritos desde la memoria. Como consecuencia, GQA mejora tanto el rendimiento (mediante un aumento en la intensidad aritmética) como la eficiencia del espacio de memoria (mediante una disminución en la cantidad de datos de caché KV almacenados), lo que lo convierte en una valiosa adición a la arquitectura LLaMA.
En el modelo LLaMA 2, las incrustaciones posicionales rotativas (RoPE) desempeñan un papel crucial en la mejora de los mecanismos de atención al incorporar información posicional en las representaciones simbólicas. El concepto de "atención" es poderoso, pero para garantizar que la atención calculada sea significativa, los tokens deben tener una noción de posición.
Las incorporaciones de posiciones son de dos tipos principales: absolutas y relativas. Las incrustaciones de posición absoluta codifican la posición absoluta de una palabra en la frase de entrada, mientras que las incrustaciones de posición relativa codifican la posición relativa entre dos palabras. Estas incorporaciones proporcionan información posicional vital que ayuda a los tokens a comprender su contexto en una secuencia.
Las incrustaciones posicionales rotativas adoptan un enfoque único al aprovechar las matrices de rotación para incrustar información posicional. El objetivo es asegurar que el producto interno de los vectores q y k, en las posiciones myn, dependa sólo de q, k y su distancia relativa (m — n). La matriz de rotación, donde el ángulo es la posición del vector, se incrusta en el vector original mediante la multiplicación de matrices, alineándose con este criterio.
Este enfoque innovador para incorporar información posicional mejora la capacidad del modelo para comprender las relaciones simbólicas y el contexto, lo que contribuye a mejorar los mecanismos de atención.
model.py
: Contiene la implementación del modelo de transformador LLaMA con comentarios detallados que explican cada componente y funcionalidad.
inference.py
: demuestra cómo utilizar el modelo LLaMA entrenado para la inferencia, proporcionando información sobre el procesamiento de entrada y salida.
¡Siéntete libre de explorar el código, corregir si hay algún error y experimentar con el modelo LLaMA 2!