miércoles, 10 de diciembre de 2025

Ajuste fino de un modelo de lenguaje (SLM) de pequeña escala

Ajuste Fino de Gemma 270M con Datos Dolly-15k

Este proyecto culminó con éxito el entrenamiento de un modelo de lenguaje de pequeña escala para mejorar su capacidad de seguir instrucciones, utilizando un flujo de trabajo optimizado y recursos limitados de Google Colab.

Resultado (Hugging Face Hub)  /  Cuaderno de trabajo (Colab)

Visualización del proceso de fine-tuning del modelo Gemma.


Objetivo Principal

El objetivo fue realizar el Ajuste Fino de Instrucciones (Instruction Fine-Tuning) del modelo [2B-270M] (variante eficiente de Google) utilizando la técnica LoRA (Low-Rank Adaptation) sobre un conjunto de datos público de alta calidad para tareas conversacionales.


I. Fases y Logros Clave del Preprocesamiento

La fase más desafiante fue el preprocesamiento del dataset para adaptarlo al formato específico de chat requerido por el modelo Gemma.

1. Carga y Selección del Dataset

  • Dataset utilizado: databricks/databricks-dolly-15k. Más de 15000 registros únicos de pares de instrucción/respuesta.
  • Ajuste por limitaciones de memoria: El dataset fue reducido a un subconjunto viable para garantizar la estabilidad de la sesión.
  • Logro: Se confirmó la carga correcta del dataset inicial sin errores.

El dataset Databricks Dolly 15k es un corpus clave para el Ajuste Fino de Instrucciones (Instruction Fine-Tuning). Sus principales usos son:

  • Ajuste Fino de Instrucciones: Permite entrenar LLMs para exhibir un comportamiento conversacional.
  • Generación de Datos Sintéticos: Los prompts pueden usarse para generar un corpus de millones de ejemplos adicionales (método Self-Instruct).
  • Aumento de Datos (Data Augmentation): Mejora la solidez del modelo mediante la reformulación de instrucciones.

2. Conversión al Formato ChatML (Conversational Format)

El formato original de Dolly fue transformado al formato de conversación (ChatML) requerido por el framework de entrenamiento:

  • Función clave: convert_to_chatml.
  • Estructura creada: Nueva columna conversations con pares {"role": "user", "content": ...} y {"role": "assistant", "content": ...}.
  • Logro: Se resolvió el error inicial de KeyError alineando correctamente los nombres de las columnas.

3. Formateo y Optimización de Memoria

Esta etapa fue crítica para superar los fallos recurrentes de RAM:

  • Función clave: formatting_prompts_func.
  • Propósito: Usar el tokenizer de Gemma para aplicar la plantilla de chat (e.g., <start_of_turn>user\n...\n<end_of_turn>) a la columna conversations.
  • Técnicas de estabilidad aplicadas: Limpieza explícita de memoria, optimización del mapeo usando batched=True, y resolución de KeyError e IndexError.
  • Logro: Se generó la columna final text sin desbordar la memoria del sistema.

II. Logros del Entrenamiento y Despliegue

El entrenamiento se ejecutó utilizando el framework Unsloth para una optimización superior en el entorno de Google Colab.

1. Configuración de Entrenamiento

  • Método: Ajuste Fino de Instrucciones (SFT) con LoRA.
  • Clase utilizada: SFTTrainer (librería trl).
  • Optimización de memoria: Se configuró packing = True y se usó un per_device_train_batch_size bajo junto con gradient_accumulation_steps.
  • Logro: El modelo ejecutó el bucle completo de entrenamiento; la pérdida (*loss*) mostró una disminución progresiva, confirmando el aprendizaje efectivo.

2. Reto Final: Fallo en la Exportación

El proyecto encontró su principal limitación al intentar la **exportación a GGUF** y la **subida al Hugging Face Hub**.

  • Problema: La fusión de pesos (LoRA + modelo base) y la conversión a formato GGUF (Q8_0) agotaron la RAM del sistema Colab a pesar de las optimizaciones.
  • Estado final: El modelo afinado existe correctamente, pero no pudo ser exportado ni subido en formato GGUF directamente desde Colab.

3. Verificación de la Afinación

  • Resultado del modelo: El éxito del *fine-tuning* se verificó empíricamente al observar la adopción del estilo de respuesta del dataset Dolly.
  • El modelo afinado ahora responde a instrucciones complejas con formatos estructurados (listas, viñetas) y con un tono conversacional consistente, a diferencia del comportamiento del modelo base.

Ver o correr el modelo afinado en: Hugging Face


III. Conclusión y Próximos Pasos Recomendados

El proyecto fue un éxito desde el punto de vista del entrenamiento, demostrando la capacidad para manejar flujos de trabajo avanzados con SLM en entornos con recursos limitados.

  • Logro principal: Modelo Gemma 270M ajustado con éxito para el seguimiento de instrucciones usando el dataset **Dolly-15k**.
  • Recomendación de despliegue: Para asegurar la preservación del trabajo, el siguiente paso debe ser:
    1. Subir el modelo fusionado en formato estándar de Hugging Face (merged_16bit).
    2. Realizar posteriormente la conversión final a GGUF (Q8_0) de forma local en una máquina con mayor capacidad de memoria o en un servidor dedicado.

Propiedad Intelectual (indiscutible) de: RJCG

No hay comentarios.:

Publicar un comentario

Páginas

Entrada destacada

Ajuste fino de un modelo de lenguaje (SLM) de pequeña escala

Ajuste Fino de Gemma 270M con Datos Dolly-15k Este proyecto culminó con éxito el entrenamiento de un modelo de lenguaje de peq...

Entradas populares

Visitas: