QLoRA: Entrenamiento de un modelo de LLM en una GPU de 16 GB

¿Te interesa entrenar un modelo de lenguaje de gran escala (LLM) en una GPU de 16 GB, pero no tienes mucha experiencia técnica? ¡No te preocupes! Con técnicas como QLoRA es posible reducir la memoria que usan estos modelos y hacerlos funcionar en equipos con menos recursos, todo sin perder precisión ni rendimiento.
En esta guía, te explico paso a paso y con ejemplos sencillos cómo lograrlo.
¿Qué es QLoRA y por qué es Útil?
Entrenar modelos grandes de lenguaje (LLMs) requiere de mucha memoria, algo que normalmente solo está disponible en equipos muy potentes.
Sin embargo, con QLoRA podemos reducir ese consumo de memoria, haciéndolo posible en GPUs de menor capacidad, como una de 16 GB.
QLoRA combina dos técnicas clave:
Herramientas Necesarias
Antes de comenzar, asegúrate de tener lo siguiente:
Instalación de Herramientas
Abre tu terminal y ejecuta los siguientes comandos para instalar lo necesario:
También es recomendable instalar DeepSpeed, una biblioteca que ayuda a reducir el uso de memoria en tareas más complejas:
Paso 1: Configurar QLoRA para reducir el tamaño del Modelo
El primer paso es descargar un modelo LLM preentrenado y prepararlo para que use menos memoria. Usaremos un modelo conocido (como GPT-2
de OpenAI) para simplificar.
Ejemplo: Cargar un Modelo en 4 Bits
Con load_in_4bit=True
, el modelo solo usa 4 bits para cada parámetro, reduciendo significativamente el uso de memoria. Esto significa que podemos trabajar con modelos más grandes en una GPU de 16 GB.
Paso 2: Aplicar Adaptación de Baja Dimensión (LoRA)
La técnica LoRA permite ajustar solo una parte del modelo, lo que significa que solo entrenamos los parámetros esenciales, ahorrando mucha memoria y tiempo.
Primero, instalemos peft, una biblioteca de Hugging Face que ayuda a aplicar LoRA fácilmente:
Ejemplo de Configuración LoRA en el Modelo
LoRA nos permite entrenar solo las capas más importantes del modelo, las que realmente influencian el resultado final.

Esto significa que podemos entrenar sin que la GPU se quede sin memoria.
Paso 3: Preparación de los Datos
Necesitamos un conjunto de datos para entrenar el modelo. Imaginemos que vamos a usar el modelo para responder preguntas en un estilo de conversación similar al de Wikipedia.
Para esto, cargamos y preparamos datos de ejemplo.
Ejemplo de Preparación de Datos
Este ejemplo usa Wikitext, un conjunto de datos similar a la Wikipedia.
Lo tokenizamos para que el modelo pueda procesarlo más fácilmente.
Paso 4: Entrenamiento del Modelo
Para entrenar el modelo, usamos un optimizador (AdamW) y configuramos algunos parámetros clave como el tamaño del lote (batch size) y el número de épocas (epochs).
Estos determinan cuántas veces el modelo verá cada dato para aprender mejor.
Ejemplo de Configuración de Entrenamiento
En este paso, estamos entrenando el modelo en "modo FP16", una técnica que también reduce la cantidad de memoria utilizada al almacenar los datos en formato de 16 bits en lugar de 32 bits.
Explicación de los Parámetros
Paso 5: Evaluar el Modelo
Para verificar que el modelo realmente aprendió, es importante evaluarlo y ver cómo responde en comparación con los datos de prueba.
En definitiva, entrenar un LLM en una GPU de 16 GB puede ser complicado, pero con técnicas como QLoRA, que usa la cuantización en 4 bits y adaptación de baja dimensión (LoRA), es totalmente posible.
Estas técnicas reducen el consumo de memoria sin sacrificar el rendimiento del modelo, permitiéndonos entrenar y usar grandes modelos en equipos más modestos.
Ahora tienes una guía sencilla para empezar a entrenar modelos grandes de lenguaje en una GPU pequeña.
Con un poco de práctica, puedes aplicar estos conocimientos en otros proyectos de IA y personalizar modelos para aplicaciones específicas.

¡Manos a la obra y descubre el potencial de los LLMs en tu proyecto!
Deja una respuesta