PEFT documentation

DeLoRA: Adaptación de bajo rango desacoplada

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

DeLoRA: Adaptación de bajo rango desacoplada

DeLoRA es una técnica de ajuste fino eficiente en parámetros que mantiene implícitamente un límite de Frobenius con respecto a los pesos preentrenados mediante la normalización y el escalado de matrices de bajo rango aprendibles. Esto desacopla efectivamente el aprendizaje de las direcciones (término BA) y la magnitud (término de límite) de las actualizaciones de pesos, evitando cambios catastróficos en los pesos adaptados y mejorando la robustez ante las elecciones de hiperparámetros.

Nota:

  • utilice una tasa de aprendizaje 10-100 veces mayor que la de las variantes estándar de LoRA (valores típicos de 1e-3/1e-2/..)
  • asegúrese de que el parámetro de frontera inicial lambda no sea demasiado pequeño (valores típicos alrededor de 10/15/..). Es posible establecer lambdas diferentes para diferentes capas

DeLoRA tiene actualmente las siguientes restricciones:

  • Solo se admiten capas nn.Linear.
  • No se admiten capas cuantizadas.

Si estas restricciones no se ajustan a su caso de uso, considere otros métodos.

El resumen del artículo es:

Los métodos de ajuste fino eficiente en parámetros (PEFT) han ganado una popularidad significativa recientemente gracias a la amplia disponibilidad de modelos preentrenados a gran escala. Estos métodos permiten una adaptación rápida a tareas posteriores con un coste computacional mínimo. Sin embargo, los métodos de ajuste fino populares, como LoRA, presentan una robustez limitada en cuanto a la elección de hiperparámetros o regímenes de entrenamiento extendidos, lo que impide un rendimiento óptimo desde el principio. En contraste, los enfoques acotados, como ETHER, ofrecen una mayor robustez, pero están limitados a adaptaciones de rango extremadamente bajo y transformaciones de fuerza fija, lo que reduce su capacidad expresiva de adaptación. En este trabajo, proponemos la Adaptación de Bajo Rango Desacoplada (DeLoRA), un nuevo método de ajuste fino que normaliza y escala matrices de bajo rango aprendibles. Al acotar la distancia de la transformación, DeLoRA desacopla eficazmente el aprendizaje angular de la fuerza de adaptación, mejorando la robustez sin comprometer el rendimiento. A través de evaluaciones en la generación de imágenes dirigida por el sujeto, la comprensión del lenguaje natural y el ajuste de instrucciones, demostramos que DeLoRA iguala o supera el rendimiento de los métodos PEFT competidores, al tiempo que exhibe una mayor robustez.

Resumen de las pruebas de rendimiento

API

DeloraConfig

clase peft.DeloraConfig

< >

( 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 = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )

Parámetros

  • r (int) — El rango del adaptador DeLoRA.
  • delora_lambda (int) — El valor inicial del límite del adaptador DeLoRA. Esta variable establece un límite superior para la norma de Frobenius del cambio de peso, evitando que el modelo afinado se desvíe demasiado del modelo original.
  • module_dropout (float) — La probabilidad de dropout para desactivar los módulos DeLoRA durante el entrenamiento.
  • target_modules (Optional[Union[List[str], str]]) — Los nombres de los módulos a los que se aplicará el adaptador. Si se especifica, solo se reemplazarán los módulos con los nombres indicados. Al pasar una cadena de caracteres, se realizará una coincidencia mediante expresión regular. Al pasar una lista de cadenas de caracteres, se realizará una coincidencia exacta o se verificará si el nombre del módulo termina con alguna de las cadenas pasadas. Si se especifica como ‘all-linear’, se seleccionarán todos los módulos lineales/Conv1D, 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.
  • exclude_modules (Optional[Union[List[str], str]]) — Los nombres de los módulos a los que no se aplicará el adaptador. Al pasar una cadena de caracteres, se realizará una coincidencia mediante expresión regular. Al pasar una lista de cadenas de caracteres, se realizará una coincidencia exacta o se comprobará si el nombre del módulo termina con alguna de las cadenas de caracteres pasadas.
  • bias (str) — Tipo de sesgo para DeLoRA. Puede ser ‘none’, ‘all’ o ‘delora_only’. Si es ‘all’ o ‘delora_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.
  • init_weights (bool) — Si se debe realizar la inicialización de los pesos del adaptador. Si True (predeterminado): A se inicializa con inicialización uniforme de kaiming, mientras que B se inicializa con ceros. Si False: A y B se inicializan ambos con uniforme de kaiming, contribuyendo inmediatamente con un delta no nulo. Esto generalmente se desaconseja para un uso normal.
  • layers_to_transform (Union[List[int], int]) — Los índices de las capas a transformar. Si se pasa una lista de enteros, se aplicará el adaptador a los índices de capa especificados en esta lista. Si se pasa un solo entero, se aplicarán las transformaciones a la capa en este índice.
  • layers_pattern (Optional[Union[List[str], str]]) — El nombre del patrón de capas, utilizado solo si layers_to_transform es diferente de None. Esto debe apuntar al nn.ModuleList del modelo, que a menudo se llama 'layers' o 'h'.
  • rank_pattern (dict) — El mapeo de nombres de capas o expresiones regulares a los rangos que difieren del rango predeterminado especificado por r. Por ejemplo, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • lambda_pattern (dict) — El mapeo de nombres de capas o expresiones regulares a lambdas que difieren de la lambda predeterminada especificada por delora_lambda. Por ejemplo, {'^model.decoder.layers.0.encoder_attn.k_proj': 16}.
  • modules_to_save (Optional[List[str]]) — Lista de módulos, aparte de las capas de adaptador, que se configurarán como entrenables y se guardarán en el punto de control final.

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

DeloraModel

clase peft.DeloraModel

< >

( 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 (torch.nn.Module) — El modelo que se va a adaptar.
  • config (DeloraConfig) — La configuración del modelo DeLoRA.
  • adapter_name (str) — El nombre del adaptador, por defecto es "default".

Devuelve

torch.nn.Module

El modelo DeLoRA.

Crea un modelo DeLoRA a partir de un modelo de transformers preentrenado.

El método se describe en detalle en DeLoRA: Decoupled Low-rank Adaptation.

Atributos:

Update on GitHub