PEFT documentation

GraLoRA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

GraLoRA

Granular Low-Rank Adaptation (GraLoRA) es un método de PEFT diseñado para mejorar la expresividad de la adaptación de bajo rango, al tiempo que aumenta la robustez ante activaciones atípicas, basándose en conocimientos derivados de problemas conocidos en la cuantización.

GraLoRA Overview

A diferencia de LoRA estándar, que aplica un único adaptador de bajo rango en todo el espacio de características, GraLoRA introduce un esquema de adaptación estructurado y de gran granularidad. Divide el espacio de adaptación en una cuadrícula de 𝑘2𝑘^2 pares de adaptadores más pequeños e independientes, cada uno responsable de un subconjunto localizado de las dimensiones de entrada y salida. Como resultado, cada adaptador opera en un subespacio que es kk veces más pequeño en ambas dimensiones que el adaptador LoRA original.

Esta descomposición granular permite actualizaciones espacialmente localizadas y conscientes del contexto, aumentando eficazmente la capacidad representativa sin parámetros adicionales ni coste computacional. Al aislar la influencia de las activaciones extremas en subespacios más pequeños, GraLoRA mitiga la distorsión del gradiente y preserva el equilibrio entre canales durante la adaptación.


El resumen del artículo es:

La adaptación de bajo rango (LoRA) es un método popular para el ajuste fino eficiente en parámetros (PEFT) de modelos generativos, valorado por su simplicidad y efectividad. A pesar de las mejoras recientes, LoRA aún sufre de una limitación fundamental: el sobreajuste cuando se ensancha el cuello de botella. Rinde mejor en rangos de 32 a 64, pero su precisión se estanca o disminuye en rangos más altos, quedando aún por debajo del rendimiento del ajuste fino completo (FFT). Identificamos la causa raíz como el cuello de botella estructural de LoRA, que introduce un entrelazamiento de gradientes en los canales de entrada no relacionados y distorsiona la propagación de gradientes. Para abordar esto, presentamos una estructura novedosa, la adaptación granular de bajo rango (GraLoRA), que particiona las matrices de pesos en subbloques, cada uno con su propio adaptador de bajo rango. Con un costo computacional o de almacenamiento despreciable, GraLoRA supera las limitaciones de LoRA, aumenta efectivamente la capacidad representativa y se aproxima más al comportamiento de FFT. Los experimentos en benchmarks de generación de código, razonamiento de sentido común, razonamiento matemático, comprensión general del lenguaje y generación de imágenes muestran que GraLoRA supera consistentemente a LoRA y otras líneas base, logrando una ganancia absoluta de hasta +8,5 % en Pass@1 en HumanEval+. Estas mejoras se mantienen en diferentes tamaños de modelo y configuraciones de rango, lo que convierte a GraLoRA en una solución escalable y robusta para PEFT.

Resumen de las pruebas de rendimiento

API

GraloraConfig

clase peft.GraloraConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 32hybrid_r: int = 0target_modules: list[str] | str | None = Nonealpha: int = 64gralora_dropout: float = 0.0gralora_k: int = 2fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_weights: bool = Truelayers_to_transform: list[int] | int | None = Nonelayers_pattern: str | None = None )

Parámetros

  • r (int) — La dimensión de atención de GraLoRA determina el rango del adaptador GraLoRA. La cantidad total de parámetros del adaptador GraLoRA es la misma que la de LoRA con el mismo rango r, mientras que la expresividad se multiplica por gralora_k.
  • hybrid_r (int) — El rango de Hybrid GraLoRA determina el rango asignado al método vanilla LoRA cuando se utiliza el método Hybrid GraLoRA. Hybrid GraLoRA, una combinación de GraLoRA y vanilla LoRA, se vuelve disponible cuando hybrid_r > 0. La cantidad de parámetros del adaptador GraLoRA es r + hybrid_r.
  • target_modules (Union[List[str], str]) — Lista de nombres de módulos o expresión regular de los nombres de módulos que se reemplazarán con GraLoRA. Por ejemplo, [‘q’, ‘v’] o ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. También puede ser un comodín ‘all-linear’ que coincide con todos los lineales/Conv1D (si el modelo es un PreTrainedModel, excluyendo la capa de salida). Si no se especifica, los módulos se elegirán según la arquitectura del modelo. Si la arquitectura no es conocida, se generará un error; en este caso, debe especificar los módulos objetivo manualmente.
  • alpha (int) — GraLoRA alpha. GraLoRA alpha es el factor de escala para el adaptador GraLoRA. La escala se convierte en alpha / (r + hybrid_r).
  • gralora_dropout (float) — El dropout de GraLoRA es la probabilidad de dropout para el adaptador GraLoRA. Se utiliza para evitar el sobreajuste y mejorar la generalización del adaptador GraLoRA.
  • gralora_k (int) — GraLoRA k determina el número de subbloques en el adaptador GraLoRA. El rango r debe ser divisible por gralora_k para que el adaptador GraLoRA sea válido. La cantidad total de parámetros se conserva independientemente de gralora_k. El rango total del adaptador GraLoRA se incrementa por gralora_k, mientras que el rango de cada subbloque se reduce por gralora_k. Se recomienda gralora_k=2 para rangos de 32 o inferiores, y gralora_k=4 para rangos de 64 o superiores.
  • fan_in_fan_out (bool) — Establezca este valor en True si la capa que se va a reemplazar almacena los pesos como (fan_in, fan_out). Por ejemplo, gpt-2 utiliza Conv1D, que almacena los pesos como (fan_in, fan_out), por lo que este valor debe establecerse en True.
  • bias (str) — Tipo de sesgo para gralora. Puede ser ‘none’, ‘all’ o ‘gralora_only’. Si es ‘all’ o ‘gralora_only’, los sesgos correspondientes se actualizarán durante el entrenamiento. Tenga en cuenta que esto significa que, incluso al desactivar los adaptadores, el modelo no producirá la misma salida que habría producido el modelo base sin adaptación.
  • modules_to_save (Optional[list[str]]) — Lista de módulos, aparte de las capas gralora, que se configurarán como entrenables y se guardarán en el checkpoint final. Por ejemplo, en tareas de clasificación de secuencias o clasificación de tokens, la capa final classifier/score se inicializa aleatoriamente y, por lo tanto, debe ser entrenable y guardada.
  • init_weights (bool) — Si se deben inicializar los pesos de las capas GraLoRA con su inicialización predeterminada. No cambies esta configuración, a menos que sepas exactamente lo que estás haciendo.
  • layers_to_transform (Union[List[int], int]) — Los índices de las capas a transformar. Si se especifica este argumento, PEFT transformará solo los índices de capas indicados en esta lista. Si se pasa un solo entero, PEFT transformará solo la capa en ese índice. Esto solo funciona cuando target_modules es una lista de str.
  • layers_pattern (Optional[Union[List[str], str]]) — El nombre del patrón de capas, utilizado solo si layers_to_transform es diferente de None y si el patrón de capas no está en el patrón de capas común. Esto solo funciona cuando target_modules es una lista de str. Esto debe apuntar al nn.ModuleList del modelo, que a menudo se llama 'layers' o 'h'.

Esta es la clase de configuración para almacenar la configuración de un GraloraModel.

GraloraModel

clase peft.GraloraModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module

Parámetros

  • model (PreTrainedModel) — El modelo que se va a adaptar.
  • config (GraloraConfig) — La configuración del modelo Gralora.
  • adapter_name (str) — El nombre del adaptador, por defecto es "default".

Devuelve

torch.nn.Module

El modelo Gralora.

Crea un modelo de Adaptación de Matrices Aleatorias basadas en vectores (Gralora) a partir de un modelo de transformers preentrenado.

Ejemplo:

>>> from transformers import AutoModelForCausalLM
>>> from peft import GraloraConfig, get_peft_model

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = GraloraConfig(r=128)
>>> model = get_peft_model(base_model, config)

Atributos:

Update on GitHub