Contáctenos

Comprensión de los parámetros del modelo de lenguaje grande y los requisitos de memoria: una inmersión profunda

Inteligencia Artificial

Comprensión de los parámetros del modelo de lenguaje grande y los requisitos de memoria: una inmersión profunda

mm
Cálculo de parámetros en LLM basados ​​en transformadores

Modelos de lenguaje grande Los LLM han experimentado avances notables en los últimos años. Modelos como GPT-4, Gemini de Google y Claude 3 están estableciendo nuevos estándares en capacidades y aplicaciones. Estos modelos no solo mejoran la generación y traducción de texto, sino que también abren nuevos caminos en el procesamiento multimodal, combinando entradas de texto, imagen, audio y video para ofrecer soluciones de IA más integrales.

Por ejemplo, GPT-4 de OpenAI ha mostrado mejoras significativas en la comprensión y generación de texto con un diseño similar al humano, mientras que los modelos Gemini de Google destacan en el manejo de diversos tipos de datos, como texto, imágenes y audio, lo que permite interacciones más fluidas y contextualmente relevantes. De igual forma, los modelos Claude 3 de Anthropic destacan por sus capacidades multilingües y su rendimiento mejorado en tareas de IA.

A medida que el desarrollo de los LLM continúa acelerándose, resulta crucial comprender las complejidades de estos modelos, en particular sus parámetros y requisitos de memoria. Esta guía pretende desmitificar estos aspectos, ofreciendo una explicación detallada y fácil de entender.

Los conceptos básicos de los modelos de lenguaje grandes

¿Qué son los modelos de lenguaje grande?

Los modelos de lenguaje grandes son redes neuronales entrenadas en conjuntos de datos masivos para comprender y generar el lenguaje humano. Se basan en arquitecturas como Transformers, que utilizan mecanismos como la autoatención para procesar y producir texto.

Importancia de los parámetros en los LLM

Los parámetros son los componentes principales de estos modelos. Incluyen pesos y sesgos, que el modelo ajusta durante el entrenamiento para minimizar los errores en las predicciones. El número de parámetros suele correlacionarse con la capacidad y el rendimiento del modelo, pero también influye en sus requisitos computacionales y de memoria.

Comprender la arquitectura del transformador

Arquitectura-transformadores

Arquitectura de transformadores

Descripción general

La arquitectura Transformer, presentada en el artículo "La atención es todo lo que necesitas" de Vaswani et al. (2017), se ha convertido en la base de muchos LLM. Consta de un codificador y un decodificador, cada uno de los cuales consta de varias capas idénticas.

Componentes de codificador y decodificador

  • codificador: Procesa la secuencia de entrada y crea una representación contextual.
  • Descifrador:Genera la secuencia de salida utilizando la representación del codificador y los tokens generados previamente.

Bloques de construcción clave

  1. Atención multicabezal: permite que el modelo se centre en diferentes partes de la secuencia de entrada simultáneamente.
  2. Redes neuronales de retroalimentación: Agrega no linealidad y complejidad al modelo.
  3. Normalización de capas: Estabiliza y acelera el entrenamiento normalizando las salidas intermedias.

Calcular el número de parámetros

Entrenamiento de transformadores

Modelos previamente entrenados para el entrenamiento eficiente de transformadores

Cálculo de parámetros en LLM basados ​​en transformadores

Analicemos el cálculo de parámetros para cada componente de un LLM basado en transformadores. Utilizaremos la notación del artículo original, donde d_model representa la dimensión de los estados ocultos del modelo.

  1. Capa de incrustación:
    • Parámetros = vocab_size * d_model
  2. Atención multicabezal:
    • Para productos de una sola cara, coloque el lado recubierto hacia arriba durante el templado. h cabezas, con d_k = d_v = d_model / h:
    • Parámetros = 4 * d_model^2 (para proyecciones Q, K, V y de salida)
  3. Red de retroalimentación:
    • Parámetros = 2 * d_model * d_ff + d_model + d_ff
    • ¿Donde d_ff normalmente es 4* d_model
  4. Normalización de capas:
    • Parámetros = 2 * d_model (para escala y sesgo)

Parámetros totales para una capa de transformador:

  • Parameters_layer = Parameters_attention + Parameters_ffn + 2 * Parameters_layernorm

Para un modelo con N capas:

  • Parámetros totales = N * Parameters_layer + Parameters_embedding + Parameters_output

Ejemplo de cálculo

Consideremos un modelo con las siguientes especificaciones:

  • d_model = 768
  • h (número de cabezas de atención) = 12
  • N (número de capas) = ​​12
  • vocab_size = 50,000
  1. Capa de incrustación:
    • 50,000 * 768 = 38,400,000
  2. Atención multicabezal:
    • 4*768^2 = 2,359,296
  3. Red de retroalimentación:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
  4. Normalización de capas:
    • 2 * 768 = 1,536

Parámetros totales por capa:

  • 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984

Parámetros totales para 12 capas:

  • 12 * 7,081,984 = 84,983,808

Parámetros totales del modelo:

  • 84,983,808 + = 38,400,000 123,383,808

Este modelo tendría aproximadamente 123 millones de parámetros.

Tipos de uso de la memoria

Cuando trabajamos con LLM, debemos considerar dos tipos principales de uso de memoria:

  1. Modelo de memoria: La memoria necesaria para almacenar los parámetros del modelo.
  2. Memoria de Trabajo: la memoria necesaria durante la inferencia o el entrenamiento para almacenar activaciones intermedias, gradientes y estados del optimizador.

Calcular la memoria del modelo

La memoria del modelo está directamente relacionada con la cantidad de parámetros. Cada parámetro normalmente se almacena como un número de punto flotante de 32 bits, aunque algunos modelos utilizan entrenamiento de precisión mixta con flotantes de 16 bits.

Memoria del modelo (bytes) = Número de parámetros * Bytes por parámetro

Para nuestro modelo de ejemplo con 123 millones de parámetros:

  • Memoria del modelo (32 bits) = 123,383,808 * 4 bytes = 493,535,232 bytes ≈ 494 MB
  • Memoria del modelo (16 bits) = 123,383,808 * 2 bytes = 246,767,616 bytes ≈ 247 MB

Estimación de la memoria de trabajo

Los requisitos de memoria de trabajo pueden variar significativamente según la tarea específica, el tamaño del lote y la longitud de la secuencia. Una estimación aproximada de la memoria de trabajo durante la inferencia es:

Memoria de trabajo ≈ 2 * Memoria del modelo

Esto representa almacenar tanto los parámetros del modelo como las activaciones intermedias. Durante el entrenamiento, los requisitos de memoria pueden ser aún mayores debido a la necesidad de almacenar gradientes y estados del optimizador:

Memoria de entrenamiento ≈ 4 * Memoria de modelo

Para nuestro modelo de ejemplo:

  • Memoria de trabajo de inferencia ≈ 2 * 494 MB = 988 MB ≈ 1 GB
  • Memoria de entrenamiento ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB

Uso de memoria en estado estacionario y uso máximo de memoria

Al entrenar modelos de lenguaje grandes basados ​​en la arquitectura Transformer, comprender el uso de memoria es crucial para una asignación eficiente de recursos. Dividamos los requisitos de memoria en dos categorías principales: uso de memoria estable y uso de memoria pico.

Uso de memoria de estado estacionario

El uso de la memoria de estado estable comprende los siguientes componentes:

  1. Pesos del modelo: Copias FP32 de los parámetros del modelo, que requieren 4N bytes, donde N es el número de parámetros.
  2. Estados del optimizador: Para el optimizador Adam, esto requiere 8N bytes (2 estados por parámetro).
  3. Gradientes: Copias FP32 de los gradientes, que requieren 4N bytes.
  4. Los datos de entrada: Suponiendo entradas int64, esto requiere 8BD bytes, donde B es el tamaño del lote y D es la dimensión de entrada.

El uso total de la memoria en estado estable se puede aproximar mediante:

  • M_estable = 16N + 8BD bytes

Uso máximo de la memoria

El uso máximo de memoria ocurre durante el paso hacia atrás cuando las activaciones se almacenan para el cálculo del gradiente. Los principales contribuyentes al pico de memoria son:

  1. Normalización de capas: Requiere 4E bytes por norma de capa, donde E = BSH (B: tamaño del lote, S: longitud de la secuencia, H: tamaño oculto).
  2. Bloque de atención:
    • Cálculo QKV: 2E bytes
    • Matriz de atención: 4BSS bytes (S: longitud de secuencia)
    • Salida de atención: 2E bytes
  3. Bloque de avance:
    • Primera capa lineal: 2E bytes
    • Activación GELU: 8E bytes
    • Segunda capa lineal: 2E bytes
  4. Pérdida de entropía cruzada:
    • Logits: 6BSV bytes (V: tamaño del vocabulario)

La memoria de activación total se puede estimar como:

  • M_act = L * (14E + 4BSS) + 6BSV bytes

Donde L es el número de capas del transformador.

Uso máximo total de memoria

El uso máximo de memoria durante el entrenamiento se puede aproximar combinando la memoria de estado estable y la memoria de activación:

  • M_pico = M_estable + M_act + 4BSV bytes

El plazo adicional de 4BSV representa una asignación adicional al inicio del paso hacia atrás.

Al comprender estos componentes, podemos optimizar el uso de la memoria durante el entrenamiento y la inferencia, asegurando una asignación eficiente de recursos y un rendimiento mejorado de modelos de lenguaje grandes.

Leyes de escala y consideraciones de eficiencia

 Leyes de escala para LLM

Las investigaciones han demostrado que el desempeño de los LLM tiende a seguir ciertas leyes de escala a medida que aumenta el número de parámetros. Kaplan y cols. (2020) observaron que el rendimiento del modelo mejora como una ley de potencia del número de parámetros, el presupuesto de cálculo y el tamaño del conjunto de datos.

La relación entre el rendimiento del modelo y el número de parámetros se puede aproximar mediante:

Rendimiento ∝ N^α

Donde N es el número de parámetros y α es un exponente de escala que normalmente ronda 0.07 para tareas de modelado de lenguaje.

Esto implica que para lograr una mejora del 10% en el rendimiento, necesitamos aumentar el número de parámetros en un factor de 10^(1/α) ≈ 3.7.

Técnicas de eficiencia

A medida que los LLM continúan creciendo, los investigadores y profesionales han desarrollado varias técnicas para mejorar la eficiencia:

a) Entrenamiento mixto de precisión: uso de números de punto flotante de 16 bits o incluso de 8 bits para determinadas operaciones para reducir el uso de memoria y los requisitos computacionales.

b) Modelo de paralelismo: Distribuir el modelo entre varias GPU o TPU para manejar modelos más grandes de los que caben en un solo dispositivo.

c) Puntos de control de gradiente: Intercambiar cálculo por memoria recalculando ciertas activaciones durante el paso hacia atrás en lugar de almacenarlas.

d) Poda y Cuantización: Eliminar pesos menos importantes o reducir su precisión después del entrenamiento para crear modelos más pequeños y eficientes.

e) Destilación: Entrenar modelos más pequeños para imitar el comportamiento de los más grandes, preservando potencialmente gran parte del rendimiento con menos parámetros.

Ejemplos prácticos y cálculos

GPT-3, uno de los modelos de lenguaje más grandes, tiene 175 mil millones de parámetros. Utiliza la parte decodificadora de la arquitectura Transformer. Para comprender su escala, analicemos el recuento de parámetros con valores hipotéticos:

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • Número de capas = 96

Para una capa de decodificador:

Parámetros totales = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 mil millones

Total para 96 ​​capas:

1.1 mil millones * 96 = 105.6 mil millones

Los parámetros restantes provienen de la incrustación y otros componentes.

Conclusión

Comprender los parámetros y los requisitos de memoria de los modelos de lenguaje grandes es crucial para diseñar, entrenar e implementar de manera efectiva estas poderosas herramientas. Al desglosar los componentes de la arquitectura Transformer y examinar ejemplos prácticos como GPT, obtenemos una visión más profunda de la complejidad y escala de estos modelos.

Para comprender mejor los últimos avances en modelos de lenguaje grandes y sus aplicaciones, consulte estas guías completas:

He pasado los últimos cinco años sumergiéndome en el fascinante mundo del aprendizaje automático y el aprendizaje profundo. Mi pasión y experiencia me han llevado a contribuir en más de 50 proyectos diversos de ingeniería de software, con un enfoque particular en AI/ML. Mi curiosidad constante también me ha atraído hacia el procesamiento del lenguaje natural, un campo que estoy ansioso por explorar más a fondo.