- Implementa Llama3 desde cero mediante una sola multiplicación de tensor y matriz.
- Carga directamente los tensores desde los archivos del modelo Llama3 proporcionados por Meta.
Resumen de una implementación desde cero del modelo LLaMA-3
Configuración del tokenizador
- Configura el tokenizador usando la librería Tiktoken.
- Define los tokens especiales y los agrega al tokenizador.
Lectura de los archivos del modelo
- Carga el archivo del modelo (
consolidated.00.pth) usando PyTorch.
- Lee la configuración del modelo desde el archivo
params.json.
- Incluye información como el número de dimensiones (
dim), el número de capas (n_layers) y el número de cabezas (n_heads).
Conversión de texto a tokens
- Convierte el texto del prompt en una secuencia de tokens usando el tokenizador.
- Convierte cada token en su embedding correspondiente.
- Normaliza los embeddings usando normalización RMS.
Implementación de la atención
- Carga del modelo las matrices de consulta (
wq), clave (wk), valor (wv) y salida (wo).
- Calcula los vectores de consulta, clave y valor para cada token.
- Agrega información posicional usando RoPE (Rotary Positional Embedding).
- Calcula las puntuaciones de atención mediante el producto punto entre consultas y claves.
- Aplica enmascaramiento a las puntuaciones de atención para los tokens futuros.
- Aplica la función Softmax para calcular la distribución de atención.
- Calcula el resultado de la atención multiplicando la distribución de atención por los vectores de valor.
Atención multi-head
- Realiza el cálculo de atención para todas las cabezas de atención.
- Concatena los resultados de cada cabeza para generar el resultado final de la atención.
Red feed-forward
- Implementa una red feed-forward con la función de activación SwiGLU (Swish Gated Linear Unit).
- Suma el resultado de la atención y la salida de la red feed-forward para generar el embedding final.
Repetición de todas las capas
- Repite el cálculo de atención y de la red feed-forward para todas las capas del transformer.
- Normaliza el embedding final con RMS.
Predicción de tokens
- Multiplica el embedding final por la matriz de salida para calcular los logits.
- Predice como siguiente token el que tenga el valor más alto en los logits.
- Decodifica el token predicho y lo muestra como salida.
Opinión de GN⁺
- Este artículo es muy útil para entender la estructura interna y el funcionamiento del modelo Llama3. En particular, el proceso de implementarlo desde cero permite ver con claridad cómo interactúa cada componente del modelo.
- Puede resultar algo complejo para ingenieros de software principiantes. Sin embargo, está bien explicado paso a paso, así que se puede entender si se sigue con calma.
- Permite aprender cómo introducir conceptos avanzados como RoPE (embeddings posicionales rotatorios) para mejorar el rendimiento del modelo. Esto puede ser útil al implementar o mejorar otros modelos de NLP.
- A través de este artículo se puede obtener una comprensión profunda de la estructura interna y del funcionamiento de los modelos de deep learning. Esto será de gran ayuda al optimizar o depurar modelos.
1 comentarios
Anya es muy linda.