Home
Login

Biblioteca LoRA de código abierto de Microsoft que implementa la técnica de adaptación de bajo rango para grandes modelos de lenguaje, reduciendo significativamente los parámetros de entrenamiento durante el ajuste fino del modelo.

MITPython 12.1kmicrosoftLoRA Last Updated: 2024-12-17

Introducción Detallada al Proyecto Microsoft LoRA

Resumen del Proyecto

Microsoft LoRA es una biblioteca de Python de código abierto de Microsoft que implementa la técnica "LoRA: Adaptación de Bajo Rango de Modelos de Lenguaje Grandes" (Low-Rank Adaptation of Large Language Models). Este proyecto proporciona una solución revolucionaria para el ajuste fino eficiente de modelos de lenguaje grandes.

Dirección del Proyecto: https://github.com/microsoft/LoRA

Dirección del Artículo: https://arxiv.org/abs/2106.09685

Principios Técnicos Fundamentales

Introducción a la Técnica LoRA

LoRA (Low-Rank Adaptation) es un método de ajuste fino eficiente en parámetros, cuya idea central es:

  • Congelar los pesos pre-entrenados originales: No modificar los parámetros del modelo original.
  • Añadir matrices de descomposición de bajo rango: Adaptar el modelo aprendiendo un par de matrices de bajo rango.
  • Reducir significativamente los parámetros de entrenamiento: Entrenar solo los parámetros de las matrices de bajo rango añadidas.

Ventajas Técnicas

  1. Eficiencia de parámetros extremadamente alta
  • En comparación con el ajuste fino completo de GPT-3 175B, LoRA puede reducir 10,000 veces los parámetros de entrenamiento.
  • Reduce 3 veces la necesidad de memoria de la GPU.
  1. Mantenimiento de un rendimiento excelente
  • Muestra un rendimiento equivalente o mejor que el ajuste fino completo en RoBERTa, DeBERTa, GPT-2, GPT-3.
  • Obtiene resultados sobresalientes en el benchmark GLUE.
  1. Implementación amigable
  • Sin latencia de inferencia adicional.
  • Soporta el cambio eficiente de tareas.
  • Reduce significativamente las necesidades de almacenamiento.

Rendimiento

Resultados del Benchmark GLUE

En el benchmark GLUE, LoRA demostró un rendimiento excepcional:

Modelo Número de Parámetros de Entrenamiento Precisión MNLI Precisión SST-2 Precisión MRPC
RoBERTa Base Ajuste Fino Completo 125M 87.6 94.8 90.2
RoBERTa Base LoRA 0.8M 87.6±.1 95.1±.2 89.7±.7
DeBERTa XXL Ajuste Fino Completo 1.5B 91.1 96.8 92.9
DeBERTa XXL LoRA 4.7M 91.9±.1 96.9±.2 92.6±.6

Tarea de Generación de Texto GPT-2

En tareas de generación de texto como E2E, DART, WebNLG, LoRA también muestra un rendimiento excelente:

Método Parámetros de Entrenamiento E2E (BLEU) DART (BLEU) WebNLG (BLEU)
GPT-2 M Ajuste Fino Completo 354.92M 68.2 46.0 47.6
GPT-2 M LoRA 0.35M 70.4±.1 47.1±.2 55.3±.2

Estructura del Proyecto

microsoft/LoRA/
├── loralib/           # Código fuente de la biblioteca principal
├── examples/
│   ├── NLG/          # Ejemplo de generación de lenguaje natural GPT-2
│   └── NLU/          # Ejemplo de comprensión del lenguaje natural RoBERTa/DeBERTa
├── README.md
└── setup.py

Instalación y Uso

Método de Instalación

pip install loralib

# O instalar desde el código fuente
pip install git+https://github.com/microsoft/LoRA

Ejemplo de Uso Básico

1. Reemplazar la Capa Lineal

# ===== Antes de la modificación =====
# layer = nn.Linear(in_features, out_features)

# ===== Después de la modificación =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)

2. Marcar los Parámetros Entrenables

import loralib as lora

model = BigModel()
# Establecer solo los parámetros que contienen "lora_" como entrenables
lora.mark_only_lora_as_trainable(model)

# Bucle de entrenamiento
for batch in dataloader:
    # Flujo de entrenamiento normal
    pass

3. Guardar y Cargar Puntos de Control

# Guardar los parámetros LoRA
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')

# Cargar el modelo pre-entrenado
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# Cargar los parámetros LoRA
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)

Tipos de Capas Soportadas

Actualmente, la biblioteca LoRA soporta los siguientes tipos de capas:

  • nn.Linearlora.Linear
  • nn.Embeddinglora.Embedding
  • nn.Conv2dlora.Conv2d
  • lora.MergedLinear (para capas lineales fusionadas como la proyección QKV)

Características Avanzadas

1. Soporte para Capas Lineales Fusionadas

# Para escenarios como la proyección QKV
qkv_proj = lora.MergedLinear(
    d_model, 3*d_model, 
    r=8, 
    enable_lora=[True, False, True]  # Aplicar LoRA solo a Q y V
)

2. Entrenamiento de Vectores de Sesgo

# Entrenar el sesgo relacionado con LoRA
lora.mark_only_lora_as_trainable(model, bias='lora_only')

# Entrenar todos los sesgos
lora.mark_only_lora_as_trainable(model, bias='all')

3. Fusión de Pesos en Tiempo de Inferencia

# Modo de evaluación: fusionar pesos, eliminar la latencia de inferencia
model.eval()

# Modo de entrenamiento: restaurar el estado de separación
model.train()

Escenarios de Aplicación

  1. Ajuste fino de modelos grandes: Reduce significativamente los costos de ajuste fino.
  2. Aprendizaje multi-tarea: Cambio eficiente de tareas.
  3. Entornos con recursos limitados: Reduce las necesidades de memoria y almacenamiento.
  4. Desarrollo rápido de prototipos: Acelera el proceso de adaptación del modelo.

Integración del Ecosistema

  • Hugging Face PEFT: Ahora integrado en la biblioteca PEFT de HF.
  • Ecosistema PyTorch: Totalmente compatible con el framework PyTorch.
  • Modelos pre-entrenados: Soporta varios modelos pre-entrenados convencionales.

Resumen

El proyecto Microsoft LoRA proporciona una solución innovadora para el ajuste fino eficiente de modelos de lenguaje grandes. A través de la ingeniosa técnica de adaptación de bajo rango, mantiene un excelente rendimiento del modelo al tiempo que reduce significativamente los costos de computación y almacenamiento. Este proyecto no solo tiene un importante valor académico, sino que también proporciona una ruta técnica viable para aplicaciones industriales prácticas, y es un trabajo histórico en el campo del ajuste fino eficiente en parámetros.

Star History Chart