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

By
Aayush Mittal Mittal
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
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
- Atención multicabezal: permite que el modelo se centre en diferentes partes de la secuencia de entrada simultáneamente.
- Redes neuronales de retroalimentación: Agrega no linealidad y complejidad al modelo.
- Normalización de capas: Estabiliza y acelera el entrenamiento normalizando las salidas intermedias.
Calcular el número de parámetros
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.
- Capa de incrustación:
- Parámetros =
vocab_size*d_model
- Parámetros =
- Atención multicabezal:
- Para productos de una sola cara, coloque el lado recubierto hacia arriba durante el templado.
hcabezas, cond_k = d_v = d_model / h: - Parámetros = 4 *
d_model^2 (para proyecciones Q, K, V y de salida)
- Para productos de una sola cara, coloque el lado recubierto hacia arriba durante el templado.
- Red de retroalimentación:
- Parámetros = 2 *
d_model*d_ff+d_model+d_ff - ¿Donde
d_ffnormalmente es 4*d_model
- Parámetros = 2 *
- Normalización de capas:
- Parámetros = 2 *
d_model(para escala y sesgo)
- Parámetros = 2 *
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= 768h(número de cabezas de atención) = 12N(número de capas) = 12vocab_size= 50,000
- Capa de incrustación:
- 50,000 * 768 = 38,400,000
- Atención multicabezal:
- 4*768^2 = 2,359,296
- Red de retroalimentación:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
- 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:
- Modelo de memoria: La memoria necesaria para almacenar los parámetros del modelo.
- 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:
- Pesos del modelo: Copias FP32 de los parámetros del modelo, que requieren 4N bytes, donde N es el número de parámetros.
- Estados del optimizador: Para el optimizador Adam, esto requiere 8N bytes (2 estados por parámetro).
- Gradientes: Copias FP32 de los gradientes, que requieren 4N bytes.
- 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:
- 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).
- 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
- Bloque de avance:
- Primera capa lineal: 2E bytes
- Activación GELU: 8E bytes
- Segunda capa lineal: 2E bytes
- 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 = 12288d_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:
- Explora la guía completa de Gemma 2: El nuevo modelo abierto de lenguaje grande de Google para obtener información sobre su rendimiento mejorado y características innovadoras.
- Obtenga más información sobre la creación de agentes LLM para RAG desde cero y más allá: Una guía completa que analiza los desafíos y soluciones en la generación de recuperación aumentada.
- Descubre las complejidades de Configuración de capacitación, ajuste e inferencia de LLM con GPU NVIDIA y CUDA para optimizar los sistemas de IA.
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.
Te podría gustar
-


Cómo colar artículos científicos absurdos a los revisores de IA
-


Los modelos de IA prefieren la escritura humana a la generada por IA
-


La revolución de los MoE: cómo el enrutamiento avanzado y la especialización están transformando los LLM
-


El fin de la era del escalamiento: por qué los avances algorítmicos son más importantes que el tamaño del modelo
-


¿Por qué la IA no puede simplemente admitir que no sabe la respuesta?
-


El cambio neurosimbólico: ¿Por qué los LLM puros se están estancando?

