PEFT documentation

C3A: Ajuste fino eficiente en parámetros mediante convolución circular

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

C3A: Ajuste fino eficiente en parámetros mediante convolución circular

C3A es una técnica de ajuste fino eficiente en parámetros que aprovecha la Convolución Circular para lograr una adaptación de alto rango dentro de límites de recursos razonables.

Tenga en cuenta que debe usar una tasa de aprendizaje (LR) mucho mayor para C3A que para otros métodos. Por ejemplo, una LR de 1e-1 para C3A es un buen punto de partida. Además, se debe usar un decaimiento de peso mucho menor. Puede consultar la carpeta method_comparison para más detalles.

En el caso de block_size, afecta a los parámetros ajustables y al rendimiento. Para empezar, puedes elegir un gcd(d1,d2)\mathrm{gcd}(d_1,d_2) cercano a $\frac{\sqrt{d_1 \times d_2}}{r}$, donde rr es el rango de LoRA que usarías para esta tarea.

C3A tiene actualmente las siguientes restricciones:

  • Solo se admiten capas nn.Linear.
  • No se admiten capas cuantizadas.
  • El tamaño de bloque debe ser un divisor común de los tamaños de entrada y salida de las capas objetivo.

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

El resumen del artículo es:

La Adaptación de Bajo Rango (LoRA) ha ganado popularidad para el ajuste fino de grandes modelos de base, aprovechando matrices de bajo rango A\mathbf{A} y B\mathbf{B} para representar los cambios de pesos (es decir, $\Delta \mathbf{W} = \mathbf{B} \mathbf{A}$). Este método reduce los parámetros entrenables y mitiga el alto consumo de memoria asociado con las matrices delta completas al multiplicar secuencialmente A\mathbf{A} y B\mathbf{B} con la activación. A pesar de su éxito, la característica intrínseca de bajo rango puede limitar su rendimiento. Aunque se han propuesto varias variantes para abordar este problema, a menudo pasan por alto la crucial eficiencia computacional y de memoria que aporta LoRA. En este artículo, proponemos la Adaptación de Convolución Circular (C3A), que no solo logra una adaptación de alto rango con un rendimiento mejorado, sino que también destaca tanto en potencia computacional como en uso de memoria. Experimentos extensos demuestran que C3A supera consistentemente a LoRA y sus variantes en diversas tareas de ajuste fino.

Resumen de las pruebas de rendimiento

API

C3AConfig

clase peft.C3AConfig

< >

( 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 = Falseblock_size: int = 256target_modules: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneblock_size_pattern: Optional[dict] = <factory>init_weights: Optional[Union[bool, Literal['gaussian', 'kaiming_uniform', 'xavier_uniform']]] = 'xavier_uniform' )

Parámetros

  • block_size (int) — tamaño de bloque para C3A, debe ser divisible tanto por el tamaño de entrada como por el tamaño de salida de la capa objetivo. Si no tienes idea de qué block_size deberías usar, establécelo en el máximo común divisor de todos los tamaños de entrada & salida de tus capas objetivo. Aumentarlo resultaría en menos parámetros.
  • target_modules (Union[list[str],str]) — Los nombres de los módulos a los que se aplicará C3A.
  • bias (str) — Tipo de sesgo para C3A. Puede ser ‘none’, ‘all’ o ‘c3a_only’. Si se establece en ‘all’ o ‘c3a_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 (list[str]) —lista de módulos, aparte de las capas C3A, que se configurarán como entrenables y se guardarán en el punto de control final.
  • layers_to_transform (Union[list[int],int]) — Los índices de las capas a transformar. Si se especifica este argumento, se aplicará C3A a los índices de capa indicados en esta lista. Si se pasa un solo entero, se aplicará C3A a la capa en ese índice.
  • layers_pattern (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.
  • block_size_pattern (dict) — El mapeo de nombres de capas o expresiones regulares a block_size que difieren del valor predeterminado especificado. Por ejemplo, {"model.decoder.layers.0.encoder_attn.k_proj": 1280}
  • init_weights (Union[bool, Literal["gaussian", "kaiming_uniform", "xavier_uniform"]]) — Por defecto, es ‘xavier_uniform’. Si se establece en False, también se usa ‘xavier_uniform’. Para establecer los pesos en cero (haciendo que C3A sea una operación sin efecto), establezca el valor en True.

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

C3AModel

clase peft.C3AModel

< >

( 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 (C3AConfig) — La configuración del modelo C3A.
  • adapter_name (str) — El nombre del adaptador, por defecto es "default".

Devuelve

torch.nn.Module

El modelo C3A.

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

El método se describe en detalle en https://huggingface.co/papers/2407.19342.

Atributos:

Update on GitHub