🤗 PEFT - Introducción Detallada a la Biblioteca de Ajuste Fino Eficiente en Parámetros
Resumen del Proyecto
PEFT (Parameter-Efficient Fine-Tuning) es una biblioteca avanzada de ajuste fino eficiente en parámetros desarrollada por Hugging Face. Este proyecto tiene como objetivo resolver los problemas de altos costos computacionales y grandes necesidades de almacenamiento en el proceso de ajuste fino de modelos pre-entrenados grandes.
Dirección de GitHub: https://github.com/huggingface/peft
Valor Central y Ventajas
1. Rentabilidad
- Reduce enormemente los costos computacionales: En comparación con el ajuste fino tradicional de todos los parámetros, los métodos PEFT solo necesitan entrenar una pequeña parte de los parámetros del modelo.
- Reduce significativamente las necesidades de almacenamiento: Los archivos de puntos de control del modelo ajustado suelen ser solo de unos pocos MB, en lugar de varios GB.
- Optimización del uso de la memoria: Puede procesar modelos más grandes en las mismas condiciones de hardware.
2. Mantenimiento del Rendimiento
- Comparable al ajuste fino de todos los parámetros: Alcanza un rendimiento comparable al ajuste fino completo en la mayoría de las tareas.
- Evita el olvido catastrófico: Protege el conocimiento original del modelo base, reduciendo el riesgo de sobreajuste.
3. Flexibilidad y Conveniencia
- Adaptación a múltiples tareas: Se pueden entrenar múltiples adaptadores ligeros para diferentes tareas.
- Integración perfecta: Se integra perfectamente con los ecosistemas de Transformers, Diffusers, Accelerate, etc.
Métodos de Ajuste Fino Soportados
Principales Técnicas PEFT
- LoRA (Low-Rank Adaptation)
- El método de ajuste fino eficiente en parámetros más popular.
- Reduce significativamente los parámetros entrenables mediante la descomposición de matrices de bajo rango.
- En escenarios típicos, solo necesita entrenar el 0.1%-1% de los parámetros originales.
- AdaLoRA
- Una versión mejorada de LoRA.
- Ajusta adaptativamente el tamaño del rango, optimizando aún más la eficiencia.
- Prefix Tuning
- Agrega un prefijo aprendible a la secuencia de entrada.
- Adecuado para tareas de generación.
- P-Tuning v2
- Método de ajuste de prompts mejorado.
- Agrega parámetros aprendibles en múltiples capas.
- IA³ (Infused Adapter by Inhibiting and Amplifying Inner Activations)
- Adapta el modelo inhibiendo y amplificando las activaciones internas.
Efectos de la Aplicación Práctica
Comparación del Uso de Memoria (A100 80GB GPU)
Modelo |
Ajuste Fino Completo |
PEFT-LoRA |
PEFT-LoRA + Descarga de CPU DeepSpeed |
T0_3B (3 mil millones de parámetros) |
47.14GB GPU / 2.96GB CPU |
14.4GB GPU / 2.96GB CPU |
9.8GB GPU / 17.8GB CPU |
mt0-xxl (12 mil millones de parámetros) |
Desbordamiento de memoria |
56GB GPU / 3GB CPU |
22GB GPU / 52GB CPU |
bloomz-7b1 (7 mil millones de parámetros) |
Desbordamiento de memoria |
32GB GPU / 3.8GB CPU |
18.1GB GPU / 35GB CPU |
Rendimiento
Comparación de la precisión en la tarea de clasificación de quejas de Twitter:
- Línea base humana: 89.7%
- Flan-T5: 89.2%
- LoRA-T0-3B: 86.3%
Instalación y Inicio Rápido
Instalación
pip install peft
Ejemplo de Uso Básico
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
# Configurar PEFT
model_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# Cargar y envolver el modelo
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
# Ver los parámetros entrenables
model.print_trainable_parameters()
# Salida: trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19
Uso para Inferencia
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
# Cargar el modelo ajustado
model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora").to("cuda")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
# Realizar la inferencia
model.eval()
inputs = tokenizer("Tu texto de entrada", return_tensors="pt")
outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
Integración con el Ecosistema
1. Integración con Transformers
- Soporta varias arquitecturas de modelos pre-entrenados.
- Flujo de trabajo de entrenamiento e inferencia sin problemas.
- Configuración y optimización automática del modelo.
2. Integración con Diffusers
- Soporta el ajuste fino eficiente de modelos de difusión.
- Adecuado para tareas de generación de imágenes, edición, etc.
- Reduce significativamente las necesidades de memoria de entrenamiento.
3. Integración con Accelerate
- Soporta el entrenamiento distribuido.
- Optimización del entrenamiento multi-GPU, TPU.
- Amigable con hardware de consumo.
4. Integración con TRL (Transformer Reinforcement Learning)
- Soporta RLHF (Aprendizaje por Refuerzo con Retroalimentación Humana).
- DPO (Optimización Directa de Preferencias).
- Entrenamiento de alineación de modelos grandes.
Escenarios de Aplicación
1. Ajuste Fino de Modelos de Lenguaje Grandes
- Ajuste fino de instrucciones.
- Optimización del sistema de diálogo.
- Adaptación a dominios específicos.
2. Modelos Multimodales
- Ajuste fino de modelos de visión-lenguaje.
- Adaptación de modelos de procesamiento de audio.
3. Modelos de Difusión
- Personalización de Stable Diffusion.
- Entrenamiento de DreamBooth.
- Conversión de estilo.
4. Aprendizaje por Refuerzo
- Ajuste fino de modelos de estrategia.
- Entrenamiento de modelos de recompensa.
- Alineación de preferencias humanas.
Ventajas Técnicas e Innovaciones
1. Eficiencia de Parámetros
- Solo entrena el 0.1%-1% de los parámetros originales.
- Mantiene más del 95% del rendimiento.
- Reduce el tamaño de los archivos de puntos de control a 1/100 del original.
2. Optimización de la Memoria
- Reduce significativamente las necesidades de memoria de la GPU.
- Soporta el entrenamiento de modelos grandes en hardware de consumo.
- El punto de control de gradiente optimiza aún más la memoria.
3. Compatibilidad con la Cuantificación
- Se combina perfectamente con la cuantificación de 8 bits y 4 bits.
- Soporte para la tecnología QLoRA.
- Reduce aún más los requisitos de hardware.
4. Diseño Modular
- Soporta múltiples métodos PEFT.
- Opciones de configuración flexibles.
- Fácil de extender a nuevos métodos.
Comunidad y Ecosistema
Recursos Oficiales
Resumen
🤗 PEFT es una biblioteca revolucionaria de ajuste fino eficiente en parámetros que no solo resuelve el problema de los costos del ajuste fino de modelos grandes, sino que también mantiene un excelente rendimiento. Ya sea para investigadores o desarrolladores de la industria, PEFT proporciona una solución rentable para la personalización de modelos grandes, impulsando la democratización de la tecnología de IA.