PEFT documentation
FRoD: Ajuste fino eficiente de rango completo con grados rotacionales
FRoD: Ajuste fino eficiente de rango completo con grados rotacionales
FRoD es un método de ajuste fino eficiente en parámetros que combina una base de rango completo compartida con grados de rotación aprendibles dispersos. La actualización del adaptador se expresa mediante tensores de proyección fijos y coeficientes entrenables, lo que permite a FRoD aplicar actualizaciones de rango completo manteniendo bajo el número de parámetros entrenados.
Artículo: Full-Rank Efficient Fine-Tuning with Rotational Degrees.
Al guardar los parámetros del adaptador, es posible evitar el almacenamiento de los tensores de proyección estableciendo save_projection=False en FrodConfig. En ese caso, las proyecciones se restauran a partir de los pesos del modelo base y de la semilla aleatoria fija de projection_prng_key. Esto reduce el tamaño del checkpoint, pero el valor predeterminado es save_projection=True para que la carga del checkpoint sea independiente de los detalles de la regeneración.
En comparación con LoRA, FRoD puede expresar una actualización de rango completo en cada capa lineal adaptada, mientras que solo entrena los coeficientes diagonales y un conjunto disperso de coeficientes de rotación fuera de la diagonal. Esto puede ser útil cuando una actualización de rango bajo resulta demasiado restrictiva. El contrapeso es que FRoD calcula tensores de proyección fijos a partir de los pesos base durante la inyección del adaptador, lo que hace que la configuración sea más costosa y que la implementación tenga un soporte menos amplio que el de LoRA.
La inicialización de la proyección puede ser lenta en modelos grandes porque FRoD ejecuta descomposiciones de matrices sobre las categorías del módulo objetivo antes de inyectar los adaptadores. Se muestra una barra de progreso de forma predeterminada y se puede desactivar con FrodConfig(progressbar=False).
Para el entrenamiento con restricciones de memoria, runtime_offload_base_weight=True mantiene los pesos base objetivo en la CPU cuando la ruta activa de FRoD no los necesita. Esta opción se activa de forma explícita porque los métodos de PEFT suelen mantener todos los parámetros base en el acelerador después de mover el modelo y después de las pasadas hacia adelante.
FRoD tiene actualmente la siguiente restricción:
- Solo se admiten las capas
nn.Linearytransformers.pytorch_utils.Conv1D.
Introducción
from transformers import AutoModelForSequenceClassification
from peft import FrodConfig, TaskType, get_peft_model
model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)
peft_config = FrodConfig(
task_type=TaskType.SEQ_CLS,
target_modules=["query", "value"],
modules_to_save=["classifier"],
sparse_rate=0.02,
frod_dropout=0.0,
runtime_offload_base_weight=True,
)
model = get_peft_model(model, peft_config)
model.print_healthcheck()FrodConfig
clase peft.FrodConfig
< 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )
Parámetros
- target_modules (
Union[List[str], str]) — Los nombres de los módulos a los que se aplicará FRoD. Solo se admiten capas lineales. - projection_prng_key (
int) — Semilla aleatoria utilizada al inicializar el patrón COO de FRoD disperso. - save_projection (
bool) — Si se deben guardar los tensores de proyección de FRoD en el state dict. Esto aumenta el tamaño del checkpoint, pero hace que la recarga del adaptador sea independiente de la regeneración de la caché local. El valor predeterminado esTrue. - frod_dropout (
float) — La probabilidad de dropout para las capas FRoD. - 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 utilizaConv1D, que almacena los pesos como (fan_in, fan_out), por lo que este valor debe establecerse enTrue. - bias (
str) — Tipo de sesgo para FRoD. Puede ser ‘none’, ‘all’ o ‘frod_only’. Si es ‘all’ o ‘frod_only’, los sesgos correspondientes se actualizarán durante el entrenamiento. Tenga en cuenta que esto significa que, incluso al deshabilitar 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 FRoD, que se configurarán como entrenables y se guardarán en el punto de control final. - init_weights (
bool) — Si se deben inicializar los pesos de las capas FRoD 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, se aplicarán las transformaciones FRoD a los índices de capa indicados en esta lista. Si se pasa un solo entero, se aplicarán las transformaciones FRoD a la capa en ese índice. - layers_pattern (
Optional[Union[List[str], str]]) — El nombre del patrón de capas, utilizado solo silayers_to_transformes diferente deNone. Esto debe apuntar alnn.ModuleListdel modelo, que a menudo se llama'layers'o'h'. - sparse_rate (
float) — Fracción de entradas no diagonales en la matriz de rotación entrenable dispersa. Valores más altos aumentan la capacidad y los parámetros entrenables; los valores más bajos son más económicos. El valor predeterminado es0.01. - regularization_alpha (
float) — Valor positivo pequeño utilizado al construir la base compartida a partir de los pesos base. Estabiliza la inversa de la matriz cuando las capas de la misma categoría tienen pesos correlacionados. El valor predeterminado es1e-3. - progressbar (
bool) — Indica si se debe mostrar una barra de progreso mientras se construyen las proyecciones FRoD. La inicialización de las proyecciones puede ser lenta en modelos grandes porque ejecuta descomposiciones de matrices sobre las categorías de módulos objetivo. El valor predeterminado esTrue. - runtime_offload_base_weight (
bool) — Si se mantienen los pesos base objetivo en la CPU cuando la ruta activa de FRoD no los necesita. Esto puede reducir la memoria de GPU porque FRoD reconstruye directamente el peso adaptado, pero cambia la convención habitual de PEFT de que todos los parámetros base permanecen en el acelerador después de mover el modelo o ejecutar el paso hacia adelante. El valor predeterminado esFalse.
Esta es la clase de configuración para almacenar la configuración de un FrodModel.
Artículo: https://doi.org/10.1609/aaai.v40i31.39813.
FrodModel
clase peft.FrodModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )