35 puntos por GN⁺ 2024-05-20 | 1 comentarios | Compartir por WhatsApp
  • 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

 
2147483647 2024-05-23

Anya es muy linda.