Recientemente escribí sobre mi proyecto de vacaciones: ajustar un modelo preentrenado de Llama 2 con el historial completo de mis 240,000 mensajes de texto, ¡con resultados sorprendentemente buenos! Entrenar un LLM en tus textos es un proceso muy divertido. Ahora, presento una guía paso a paso para que tú también puedas tener una conversación sustancial contigo mismo…
¿Aún no estás inscrito en el curso completo?
Accede a todo el contenido del curso Ingeniería de LLMs e IA Generativa y domina las técnicas más avanzadas de IA generativa. ¡No pierdas esta oportunidad para transformar tu carrera profesional! 🚀
Apúntate al curso ahoraRequisitos previos para entrenar un LLM en tus textos:
1️⃣ Un iPhone con un historial respetable de SMS, iMessage o WhatsApp: al menos unos miles de mensajes. Si no has conservado tus textos, despeja tu calendario para el próximo fin de semana y prepárate para escribir mucho. Mis disculpas al equipo Android: no estoy seguro de cómo obtener los mensajes desde allí, pero si conoces una buena herramienta, por favor coméntala para poder utilizarla sin problema.
2️⃣ Un presupuesto entre $50 y $100 (o su equivalente local).
3️⃣ Conocimientos básicos de Python y al menos fundamentos de conceptos de Ciencia de Datos: transformadores preentrenados, tokens, generación de texto, etc. Al final del post incluyo una lista de lecturas recomendadas.
4️⃣ Paciencia y entusiasmo: ¡Se trata del viaje, no del destino! (Aunque, en mi caso, el destino fue bastante genial).
He probado esta guía en EE.UU. y el Reino Unido, pero no en otras regiones. Contáctanos dejando un comentario si encuentras problemas para que trabajemos juntos en ellos.
Preliminares
Si no tienes estas herramientas, deberías configurarlas:
- Una cuenta gratuita en Hugging Face: para acceder al modelo base de Llama 2, y almacenar de forma privada tu conjunto de datos y progreso de ajuste fino.
- Una cuenta gratuita en Weights and Biases: para visualizar el progreso de tu entrenamiento.
- Un plan de Google Colab: yo comencé con la opción de pago por uso, pero actualicé al plan Pro+ durante mi aventura. Puedes usar cualquier alternativa similar a Google Colab, o incluso correr el proceso localmente si tienes una GPU disponible.
Enseñando nuevos trucos a Llama
Llama (“Large Language Model Meta AI”) probablemente no necesita presentación. Es el modelo de lenguaje autorregresivo de código abierto de Meta, ajustado mediante fine-tuning supervisado (SFT) y aprendizaje por refuerzo con retroalimentación humana (RLHF). Llama 2 fue lanzado en julio de 2023 tras 7 meses de entrenamiento, y está disponible en tamaños que van de 7B a 70B parámetros. Comenzaremos con la versión de 7B parámetros y luego actualizaremos a la de 13B cuando los resultados sean decentes.
Si no lo has hecho ya, necesitas solicitar acceso al modelo Llama:
1️⃣ Visita el formulario de solicitud de Meta, selecciona el modelo Llama 2 & Llama Chat, y acepta los términos y condiciones de Meta. El correo que completes en este formulario debe coincidir con el de tu cuenta de Hugging Face.
2️⃣ Teóricamente, deberías esperar 1-2 días para la confirmación por correo de Meta. En la práctica, lo recibí en pocas horas, y he oído que otros tuvieron la misma experiencia.
3️⃣ Luego, visita la página del modelo en Hugging Face y solicita acceso.
¿Cómo se ve antes de ajustar el modelo LLM en tus textos?
He creado este Notebook básico para que pruebes la configuración usando Google Colab, preferiblemente en una instancia V100. Comienza con las instalaciones de pip
:
# Install libraries
!pip install transformers accelerate sentencepiece bitsandbytes
A continuación, ve al sitio web de Hugging Face. En el menú de Perfil, selecciona Settings y luego Access Tokens. Configura un nuevo token.
Regresa al Notebook, ejecuta este código y pega tu token. Ahora tu Notebook estará vinculado a tu cuenta de Hugging Face.
from huggingface_hub import notebook_login
notebook_login()
Es hora de cargar el modelo Llama de 7B. Usaremos la variante Chat.
# Carga el modelo
import torch
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, pipeline
base_model_name = "meta-llama/Llama-2-7b-chat-hf"
tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_name,
quantization_config=quant_config,
device_map="auto",
)
Finalmente, utilizamos el pipeline de generación de texto de Hugging Face para imaginar una conversación. Explicaré el formato de nuestra consulta, incluyendo el uso de las etiquetas <<SYS>>
y [INST]
, en el próximo post de esta serie.
Si ya has trabajado con Llama 2, es posible que notes que no seguí estrictamente el formato de consulta recomendado: descubrí que esta estructura ofrecía un rendimiento ligeramente mejor.
# Pídale a la modelo que continúe un intercambio de mensajes de texto básico
query = "<s><<SYS>>Escribe un mensaje de texto realista para el chat. Evita las repeticiones.<</SYS>>\n"
query += "[INST]Escribe un chat entre John y Jane[/INST]\n"
query += "### John: Hola, Jane. ¿Cómo estás?\n"
query += "### Jane: "
text_gen = transformers.pipeline(task="text-generation", model=base_model, tokenizer=tokenizer, max_length=300)
output = text_gen(query)
print(output[0]['generated_text'])
Este es el resultado que obtuve. Nada más sacarlo de la caja, el 7B Llama 2 me ofrece algo perfectamente creíble.
<s><<SYS>>
Escribe un mensaje de texto realista para el chat. Evita las repeticiones.
<</SYS>>
[INST]Escribe un chat entre John y Jane[/INST]
### John:
Hola, Jane. ¿Cómo estás?\n"<s><<SYS>>
### Jane: ¡Hola, John! Estoy bien, ¡gracias por preguntar! Acabo de regresar de una gran caminata con algunos amigos. ¿Y tú?
¡Genial! He estado bastante ocupado con el trabajo últimamente. Tenía un gran proyecto pendiente anoche y fue un poco complicado llegar a la meta. Pero me alegro de que haya terminado. ¿Cómo estuvo tu caminata?
### John:
### Jane:
¡Fue increíble! ¡Vimos un montón de ciervos e incluso un oso! Al principio estaba un poco asustada, pero mis amigos me apoyaron mucho y todos regresamos sanos y salvos. ¿Cómo va tu trabajo? ¿Algún proyecto emocionante en el horizonte?Sí, el trabajo ha estado bastante agitado últimamente. Pero espero asumir más responsabilidades pronto. De hecho, estoy pensando en comenzar mi propio negocio. Es un poco arriesgado, pero creo que podría ser muy gratificante. ¿Qué piensas?
### John:
### Jane: ¡Eso suena muy emocionante! Estoy segura de que te irá muy bien. Sólo asegúrate de tomarte algo de tiempo para
¡Adelante! ¡Casi estamos listos para entrenar un LLM en tus textos!
Todo está configurado para poder entrenar un modelo LLM en tus textos. ¡Ya casi es hora de actuar! Antes de dar el gran paso, quería sugerirte que tomes un momento para repasar cualquier área en la que no te sientas completamente cómodo.
- Para una excelente introducción al Deep Learning, Transformers y todo lo relacionado con los LLM, no puedo recomendar lo suficiente los videos de mi gran amigo y colega Jon Krohn. Jon es un genio explicando conceptos profundamente técnicos de una manera que simplemente. tiene. sentido. También tienes los cursos de IA de la ruta de Frogames Formación.
- La documentación de Hugging Face tiene APIs y tutoriales que cubren Transformers, Tokenizers, Generación de Texto y mucho más.
- Usaremos QLoRA para el ajuste fino. Esto se implementa en Hugging Face utilizando métodos PEFT (Fine-Tuning Eficiente en Parámetros). Lee todo sobre esto en la documentación de Hugging Face. También puedes leer el artículo original de LoRA (Adaptación de Bajo Rango de Modelos de Lenguaje Grandes), y el artículo de QLoRA de mayo pasado.
La Parte 2 de cómo entrenar un LLM en tus textos está aquí [PRÓXIMAMENTE]. Leeremos el archivo CSV, luego organizaremos e investigaremos nuestro historial de textos. En las siguientes partes, curaremos el conjunto de datos, ajustaremos el modelo, experimentaremos con los hiperparámetros y, finalmente, realizaremos la generación. Luego podrás relajarte y dejar que tu IA se haga cargo.