PEFT documentation
C3A: Ajuste fino eficiente en parámetros mediante convolución circular
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 cercano a $\frac{\sqrt{d_1 \times d_2}}{r}$, donde 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 y 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 y 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
< source >( 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 silayers_to_transformes diferente deNoney 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 enFalse, también se usa ‘xavier_uniform’. Para establecer los pesos en cero (haciendo que C3A sea una operación sin efecto), establezca el valor enTrue.
Esta es la clase de configuración para almacenar la configuración de un C3AModel.
C3AModel
clase peft.C3AModel
< source >( 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:
- model (PreTrainedModel) — El modelo que se va a adaptar.
- peft_config (C3AConfig): La configuración del modelo C3A.