Introducción
La capacitación y el ajuste de los modelos lingüísticos pueden resultar complejos, especialmente cuando se busca eficiencia y eficacia. Un enfoque eficaz implica el uso de técnicas de ajuste fino eficientes en los parámetros, como la adaptación de rango bajo (LoRA) combinada con el ajuste fino de instrucciones. Este artículo describe los pasos clave y las consideraciones para ajustar el modelo de lenguaje grande LlaMa 2 utilizando esta metodología. Se explora utilizando el IA no perezosa marco para hacer que el proceso de ajuste sea aún más rápido y eficiente.
¡Iremos paso a paso para entender mejor el tema!
¿Qué es Unsloth?
Unsloth ai es una plataforma pionera diseñada para agilizar el ajuste y el entrenamiento de modelos de lenguaje (Llama 2), haciéndolo más rápido y eficiente. Este artículo se basa en una sesión práctica de Daniel Han, cofundador de Unsloth ai. A Daniel le apasiona llevar la innovación al límite. Con una amplia experiencia en Nvidia, ha tenido un impacto significativo en la industria de la inteligencia artificial y el aprendizaje automático. Configuremos el conjunto de datos de Alpaca para comprender Fine-tune Llama 2 con Unsloth.
Configurar el conjunto de datos
El conjunto de datos Alpaca es popular para entrenar modelos de lenguaje debido a su simplicidad y efectividad. Consta de 52.000 filas, cada una de las cuales contiene tres columnas: instrucción, entrada y salida. El conjunto de datos está disponible en Hugging Face y viene prelimpiado, lo que ahorra tiempo y esfuerzo en la preparación de datos.
El conjunto de datos de Alpaca tiene tres columnas: instrucción, entrada y salida. La instrucción proporciona la tarea, la entrada proporciona el contexto o la pregunta y la salida es la respuesta esperada. Por ejemplo, una instrucción podría ser: “Dé tres consejos para mantenerse saludable”, y el resultado serían tres consejos de salud relevantes. Ahora, formatearemos el conjunto de datos para garantizar su compatibilidad.
Formatear el conjunto de datos
Debemos formatearlo correctamente para garantizar que el conjunto de datos coincida con nuestro código de entrenamiento. La función de formato agrega una columna adicional, texto, que combina la instrucción, la entrada y la salida en un solo mensaje. Este mensaje se incorporará al modelo de lenguaje para la capacitación.
A continuación se muestra un ejemplo de cómo podría verse una entrada de conjunto de datos formateada:
- Instrucción: “Brinde tres consejos para mantenerse saludable”.
- Aporte: “”
- Salida: “1. Come una dieta balanceada. 2. Haga ejercicio con regularidad. 3. Duerme lo suficiente”.
- Texto: “A continuación se muestra una instrucción que describe una tarea. Escriba una respuesta que complete adecuadamente la solicitud. \n\n Instrucción: Dé tres consejos para mantenerse saludable. \n\n Respuesta: 1. Consuma una dieta equilibrada. 2. Haga ejercicio con regularidad. 3. Duerma lo suficiente. “
El El token es crucial ya que significa el final de la secuencia, evitando que el modelo genere texto interminable. Entrenemos el modelo para un mejor rendimiento.
Entrenando el modelo
Una vez que el conjunto de datos esté formateado correctamente, procedemos a la fase de capacitación. Usamos el Unsloth
marco que mejora la eficiencia del proceso de formación.
Parámetros clave para entrenar el modelo
- Tamaño de lote: Determina cuántas muestras se procesan antes de actualizar los parámetros del modelo. Un tamaño de lote típico es 2.
- Acumulación de gradiente: especifica cuántos lotes se acumularán antes de realizar un paso hacia atrás. Comúnmente establecido en 4.
- Pasos de calentamiento: al comienzo del entrenamiento, aumente gradualmente la tasa de aprendizaje. A menudo se utiliza un valor de 5.
- Pasos máximos: limita el número de pasos de entrenamiento. Para fines de demostración, esto podría establecerse en 3, pero normalmente se usaría un número más alto, como 60.
- Tasa de aprendizaje: controla el tamaño del paso durante la optimización. Un valor de 2e-4 es estándar.
- Optimizador:
AdamW 8-bit
Se recomienda para reducir el uso de memoria.
Ejecutando el entrenamiento
El script de entrenamiento utiliza el conjunto de datos formateado y los parámetros especificados para ajustar Llama 2. El script incluye funcionalidad para manejar el token EOS y garantizar la terminación adecuada de la secuencia durante el entrenamiento y la inferencia.
Inferencia para comprobar la capacidad del modelo
Después del entrenamiento, probamos la capacidad del modelo para generar respuestas apropiadas basadas en nuevas indicaciones. Por ejemplo, si le indicamos al modelo “Continuar la secuencia de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13”, el modelo debería generar “21”.
# alpaca_prompt = Copied from above
FastLanguageModel.for_inference(model) # Enable native 2x faster inference
inputs = tokenizer(
(
alpaca_prompt.format(
"Continue the fibonnaci sequence.", # instruction
"1, 1, 2, 3, 5, 8", # input
"", # output - leave this blank for generation!
)
), return_tensors = "pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens = 64, use_cache = True)
tokenizer.batch_decode(outputs)
También puedes usar un TextStreamer para inferencia continua, ¡para que puedas ver la generación token por token en lugar de esperar todo el tiempo!
# alpaca_prompt = Copied from above
FastLanguageModel.for_inference(model) # Enable native 2x faster inference
inputs = tokenizer(
(
alpaca_prompt.format(
"Continue the fibonnaci sequence.", # instruction
"1, 1, 2, 3, 5, 8", # input
"", # output - leave this blank for generation!
)
), return_tensors = "pt").to("cuda")
from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 128)
A continuación se muestra una instrucción que describe una tarea, junto con una entrada que proporciona más contexto. Escriba una respuesta que complete adecuadamente la solicitud.
Instrucción:
Continúe la secuencia de Fibonacci.
Aporte:
1, 1, 2, 3, 5, 8
Respuesta:
13, 21, 34, 55, 89, 144
Integración del modelo LoRa
Además de las técnicas tradicionales de ajuste, la incorporación del modelo LoRa (Log-odds Ratio Attention) puede mejorar aún más la eficiencia y eficacia del entrenamiento del modelo de lenguaje. El modelo LoRa, conocido por su mecanismo de atención, aprovecha los índices de probabilidades logarítmicas para capturar dependencias simbólicas y mejorar la comprensión del contexto.
Ventajas clave del modelo LoRa:
- Comprensión contextual mejorada: El mecanismo de atención del modelo LoRa le permite capturar mejor las dependencias de los tokens dentro de la secuencia de entrada, lo que conduce a una mejor comprensión contextual.
- Computación de atención eficiente: El modelo LoRa optimiza el cálculo de la atención utilizando índices de probabilidades logarítmicas, lo que da como resultado tiempos de entrenamiento e inferencia más rápidos que los mecanismos de atención tradicionales.
- Rendimiento del modelo mejorado: La integración del modelo LoRa en el proceso de capacitación puede mejorar el rendimiento del modelo, particularmente en tareas que requieren dependencias de largo alcance y una comprensión matizada del contexto.
Guardar y cargar el modelo
Después de la capacitación, el modelo se puede guardar localmente o cargar en HuggingFace para compartirlo e implementarlo fácilmente. El modelo guardado incluye:
- adaptador_config.json
- adaptador_modelo.bin
Estos archivos son esenciales para recargar el modelo y continuar con la inferencia o capacitación adicional.
Para guardar el modelo final como adaptadores LoRA, utilice push_to_hub de Huggingface para guardar en línea o save_pretrained para guardar localmente.
model.save_pretrained("lora_model") # Local saving
tokenizer.save_pretrained("lora_model")
# model.push_to_hub("your_name/lora_model", token = "...") # Online saving
# tokenizer.push_to_hub("your_name/lora_model", token = "...") # Online saving
Now, if you want to load the LoRA adapters we just saved for inference, set False to True:
if False:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = "lora_model", # YOUR MODEL YOU USED FOR TRAINING
max_seq_length = max_seq_length,
dtype = dtype,
load_in_4bit = load_in_4bit,
)
FastLanguageModel.for_inference(model) # Enable native 2x faster inference
# alpaca_prompt = You MUST copy from above!
inputs = tokenizer(
(
alpaca_prompt.format(
"What is a famous tall tower in Paris?", # instruction
"", # input
"", # output - leave this blank for generation!
)
), return_tensors = "pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens = 64, use_cache = True)
tokenizer.batch_decode(outputs)
Ajuste fino de registros no estructurados
Sí, se puede utilizar el ajuste fino para registros no estructurados almacenados en archivos blob. La clave es preparar el conjunto de datos correctamente, lo que puede llevar algún tiempo pero es factible. Es importante tener en cuenta que pasar a bits más bajos en el modelo normalmente reduce la precisión, aunque a menudo solo alrededor del 1%.
Evaluación del rendimiento del modelo
El sobreajuste suele ser el culpable si el rendimiento de un modelo se deteriora después de un ajuste fino. Para evaluar esto, debe observar la pérdida de evaluación. Para obtener orientación sobre cómo evaluar la pérdida, consulte nuestra página Wiki en GitHub. Para evitar quedarse sin memoria durante la evaluación, utilice una precisión flotante 16 y reduzca el tamaño del lote. El tamaño de lote predeterminado suele ser de alrededor de 8, pero es posible que deba reducirlo aún más para su evaluación.
Evaluación y sobreajuste
Supervise la pérdida de evaluación para comprobar si su modelo está sobreajustado. Es probable que se produzca un sobreajuste si aumenta, y debería considerar detener la carrera de entrenamiento.
Consejos y técnicas de ajuste
Aquí te dejamos los consejos y técnicas que debes conocer:
Gestión de la memoria
- Utilice la precisión float 16 durante la evaluación para evitar problemas de memoria.
- El ajuste fino a menudo requiere menos memoria que otras operaciones como guardar el modelo, especialmente con flujos de trabajo optimizados.
Soporte de biblioteca para inferencia por lotes
- Bibliotecas como Unsloft permiten la inferencia por lotes, lo que facilita el manejo de múltiples mensajes simultáneamente.
Direcciones futuras
- A medida que evolucionen modelos como GPT-5 y posteriores, los ajustes seguirán siendo relevantes, especialmente para aquellos que prefieren no cargar datos a servicios como OpenAI. El ajuste fino sigue siendo crucial para inyectar conocimientos y habilidades específicos en los modelos.
Temas avanzados
- Optimización automática de modelos arbitrarios: Estamos trabajando para optimizar cualquier arquitectura modelo utilizando un compilador automático, con el objetivo de imitar las capacidades de compilación de PyTorch.
- Manejo de modelos de lenguaje grandes: Más datos y una mayor clasificación en el ajuste pueden mejorar los resultados de los modelos de lenguaje a gran escala. Además, ajustar las tasas de aprendizaje y las épocas de entrenamiento puede mejorar el rendimiento del modelo.
- Abordar el miedo y la incertidumbre: Las preocupaciones sobre el futuro del ajuste en medio de avances en modelos como GPT-4 y posteriores son comunes. Sin embargo, el ajuste sigue siendo vital, especialmente para los modelos de código abierto, crucial para democratizar la IA y resistir la monopolización de las capacidades de IA por parte de las grandes empresas tecnológicas.
Conclusión
El ajuste y la optimización de los modelos de lenguaje son tareas cruciales en la IA que implican una preparación meticulosa de conjuntos de datos, gestión de memoria y técnicas de evaluación. Utilizando conjuntos de datos como el Alpaca El conjunto de datos y herramientas como los modelos Unsloth y LoRa pueden mejorar significativamente el rendimiento del modelo.
Mantenerse actualizado con los últimos avances es esencial para aprovechar eficazmente las herramientas de inteligencia artificial. Fine-tune Llama 2 permite la personalización del modelo, mejorando su aplicabilidad en varios dominios. Las técnicas clave, incluida la acumulación de gradientes, los pasos de calentamiento y las tasas de aprendizaje optimizadas, refinan el proceso de capacitación para lograr una mejor eficiencia y rendimiento. Modelos avanzados como lora, con mecanismos de atención mejorados y estrategias efectivas de administración de la memoria, como el uso de precisión flotante 16 durante la evaluación, contribuyen a la utilización óptima de los recursos. Las herramientas de monitoreo como NVIDIA SMI ayudan a prevenir problemas como el sobreajuste y el desbordamiento de la memoria.
A medida que la IA evoluciona con modelos como GPT-5, el ajuste fino sigue siendo vital para inyectar conocimiento específico en los modelos, especialmente para los modelos de código abierto que democratizan la IA.
En resumen, dominar el ajuste fino de Llama 2 y la optimización garantiza que los modelos funcionen de manera efectiva y eficiente. Al adoptar las mejores prácticas y mantenerse informados, los profesionales de la IA pueden impulsar aplicaciones de IA éticas e impactantes, dando forma a un futuro con capacidades de IA accesibles y beneficiosas.
Preguntas frecuentes
R: Generalmente, más datos mejoran el rendimiento del modelo. Para mejorar los resultados, considere combinar su conjunto de datos con uno de Hugging Face.
R: NVIDIA SMI es una herramienta útil para monitorear el uso de la memoria de la GPU. Si está utilizando Colab, también ofrece herramientas integradas para verificar el uso de VRAM.
R: La cuantificación ayuda a reducir el tamaño del modelo y el uso de memoria, pero puede llevar mucho tiempo. Elija siempre el método de cuantificación adecuado y evite habilitar todas las opciones simultáneamente.
R: Debido a su mayor precisión, el ajuste fino suele ser la opción preferida para entornos de producción. RAG puede resultar útil para preguntas generales con grandes conjuntos de datos, pero es posible que no proporcione el mismo nivel de precisión.
R: Normalmente, se recomiendan de 1 a 3 épocas. Algunas investigaciones sugieren hasta 100 épocas para conjuntos de datos pequeños, pero combinar su conjunto de datos con un conjunto de datos de Hugging Face generalmente es más beneficioso.
R: Sí, las conferencias CS229 de Andrew Ng, OpenCourseWare del MIT sobre álgebra lineal y varios canales de YouTube centrados en la IA y el aprendizaje automático son recursos excelentes para mejorar su comprensión de las matemáticas detrás del entrenamiento de modelos.
R: Los avances recientes han logrado una reducción del 30% en el uso de memoria con un ligero aumento en el tiempo. Al guardar modelos, opte por un método único, como guardarlos en 16 bits o cargarlos en Hugging Face, para administrar el espacio en disco de manera eficiente.
Para obtener orientación más detallada sobre cómo ajustar LLaMA 2 y otros modelos de lenguaje grandes, únase a nuestra sesión de DataHour sobre ajuste de LLM para principiantes con Unsloth.