En este tutorial, demostramos cómo ajustar de manera eficiente un modelo de lenguaje grande usando Unsloth y QLoRA. Nos centramos en crear un canal de ajuste estable y supervisado de extremo a extremo que maneje problemas comunes de Colab, como fallas de detección de GPU, fallas en el tiempo de ejecución e incompatibilidades de biblioteca. Al controlar cuidadosamente el entorno, la configuración del modelo y el ciclo de entrenamiento, mostramos cómo entrenar de manera confiable un modelo ajustado a instrucciones con recursos limitados mientras se mantiene un rendimiento sólido y una velocidad de iteración rápida.
Configuramos un entorno controlado y compatible reinstalando PyTorch y todas las bibliotecas necesarias. Nos aseguramos de que Unsloth y sus dependencias se alineen correctamente con el tiempo de ejecución CUDA disponible en Google Colab. También manejamos la lógica de reinicio del tiempo de ejecución para que el entorno esté limpio y estable antes de que comience el entrenamiento.
Verificamos la disponibilidad de GPU y configuramos PyTorch para un cálculo eficiente. Importamos Unsloth antes que todas las demás bibliotecas de capacitación para garantizar que todas las optimizaciones de rendimiento se apliquen correctamente. También definimos funciones de utilidad para administrar la memoria de la GPU durante el entrenamiento.
Cargamos un modelo sintonizado con instrucciones cuantificado de 4 bits utilizando las utilidades de carga rápida de Unsloth. Luego adjuntamos adaptadores LoRA al modelo para permitir un ajuste fino eficiente en los parámetros. Configuramos la configuración LoRA para equilibrar la eficiencia de la memoria y la capacidad de aprendizaje.
cfg = SFTConfig( salida_dir=”unsloth_sft_out”, conjunto de datos_text_field=”texto”, max_seq_length=max_seq_length, embalaje=False, per_device_train_batch_size=1, gradient_accumulation_steps=8, max_steps=150, learning_rate=2e-4, warmup_ratio=0.03, lr_scheduler_type=”coseno”, logging_steps=10, eval_strategy=”no”, save_steps=0, fp16=True, optim=”adamw_8bit”, report_to=”none”, seed=42, ) entrenador = SFTTrainer( modelo=modelo, tokenizer=tokenizer, train_dataset=train_ds, eval_dataset=eval_ds, argumentos=cfg, )
Preparamos el conjunto de datos de entrenamiento convirtiendo conversaciones de varios turnos en un formato de texto único adecuado para un ajuste fino supervisado. Dividimos el conjunto de datos para mantener la integridad del entrenamiento. También definimos la configuración de capacitación, que controla el tamaño del lote, la tasa de aprendizaje y la duración de la capacitación.
texto = tokenizer.apply_chat_template(mensajes, tokenize=False, add_generación_prompt=True) entradas = tokenizer([text]return_tensors=”pt”).to(“cuda”) streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) con torch.inference_mode(): model.generate( **inputs, max_new_tokens=max_new_tokens, temperatura=0.7, top_p=0.9, do_sample=True, streamer=streamer,) chat(“Proporcione una lista de verificación concisa para validar un modelo de aprendizaje automático antes de su implementación”). save_dir = “unsloth_lora_adapters” model.save_pretrained(save_dir) tokenizer.save_pretrained(save_dir)
Ejecutamos el ciclo de entrenamiento y monitoreamos el proceso de ajuste en la GPU. Cambiamos el modelo al modo de inferencia y validamos su comportamiento utilizando un mensaje de muestra. Finalmente guardamos los adaptadores LoRA entrenados para poder reutilizar o implementar el modelo ajustado más adelante.
En conclusión, ajustamos un modelo de lenguaje de seguimiento de instrucciones utilizando la pila de entrenamiento optimizada de Unsloth y una configuración QLoRA liviana. Demostramos que al restringir la longitud de la secuencia, el tamaño del conjunto de datos y los pasos de entrenamiento, podemos lograr un entrenamiento estable en las GPU de Colab sin interrupciones en el tiempo de ejecución. Los adaptadores LoRA resultantes proporcionan un artefacto práctico y reutilizable que podemos implementar o ampliar aún más, lo que convierte este flujo de trabajo en una base sólida para futuras experimentaciones y técnicas de alineación avanzadas.
Consulte los códigos completos aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 120.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.