PEFT documentation

UniLoRA

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

UniLoRA

Uni-LoRA es un método PEFT que comparte un banco compacto de vectores entrenables entre los pesos de los adaptadores de bajo rango. En lugar de aprender cada elemento de la matriz LoRA de forma independiente, UniLoRA proyecta de manera determinista las entradas en valores compartidos de theta_d y aprende los parámetros compartidos utilizados por la actualización del adaptador.

Inicio rápido

from peft import UniLoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")

config = UniLoraConfig(
    r=32,
    theta_d_length=256,
    proj_seed=42,
    target_modules=["q_proj", "v_proj"],
    unilora_dropout=0.0,
    init_weights=True,
    task_type="CAUSAL_LM",
)

peft_model = get_peft_model(model, config)
peft_model.print_healthcheck()

Parámetros importantes

r controla la dimensión del adaptador de bajo rango. Los valores más grandes aumentan la capacidad del adaptador y el uso de memoria.

theta_d_length controla la longitud del banco de vectores UniLoRA compartido. Este es el almacenamiento principal entrenable compartido por las entradas del adaptador proyectado.

proj_seed controla la generación determinista de índices para las proyecciones fijas hacia theta_d. Reutilizar la misma semilla y configuración hace que los índices de adaptador generados sean reproducibles.

target_modules selecciona qué módulos reciben adaptadores UniLoRA. Utilice sufijos de módulo como ["q_proj", "v_proj"], una cadena regex o "all-linear" cuando la arquitectura del modelo lo soporte.

unilora_dropout aplica dropout dentro de las capas de adaptador UniLoRA durante el entrenamiento.

init_weights controla la inicialización de los parámetros de UniLoRA. Establécelo en False para mantener una inicialización aleatoria de theta_d cuando necesites gestionar la inicialización manualmente.

save_indices controla si los puntos de control de UniLoRA guardan los tensores de índice y escala generados junto con los parámetros compartidos theta_d. Mantener esta opción desactivada produce puntos de control más pequeños y regenera los índices a partir de proj_seed; activarla hace que los adaptadores guardados sean independientes de los cambios futuros en la generación de índices.

Resumen de las pruebas de rendimiento

API

UniLoraConfig

clase peft.UniLoraConfig

< >

( 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 = 4proj_seed: int = 42theta_d_length: int = 256target_modules: list[str] | str | None = Noneunilora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_theta_d_bound: float = 0.02init_weights: bool = Truesave_indices: bool = Falselayers_to_transform: list[int] | int | None = Nonelayers_pattern: list[str] | str | None = None )

Parámetros

  • r (int) — Rango de la adaptación de bajo rango. Esto controla la capacidad expresiva de la actualización de UniLora.
  • proj_seed (int) — Semilla aleatoria utilizada para generar la asignación de índices fija. Esto garantiza la reproducibilidad entre ejecuciones.
  • theta_d_length (int) — Longitud del vector UniLora compartido theta_d.
  • target_modules (Union[list[str], str], opcional) — Nombres o patrones de módulos a los que se aplican los adaptadores UniLora.
    • Si se proporciona una cadena, se trata como una expresión regular.
    • Si se proporciona una lista, los módulos se coinciden por nombre exacto o sufijo.
    • El valor especial ‘all-linear’ aplica UniLora a todas las capas Linear / Conv1D, excepto a la capa de salida. Si no se especifica, los módulos se infieren a partir de la arquitectura del modelo. Se genera un error si la arquitectura no es compatible.
  • unilora_dropout (float) — Probabilidad de dropout aplicada dentro de las capas UniLora.
  • fan_in_fan_out (bool) — Si la capa reemplazada almacena los pesos en el formato (fan_in, fan_out). Esto debe establecerse en True para modelos como GPT-2 que utilizan capas Conv1D.
  • bias (str) — Especifica qué términos de sesgo son entrenables:
    • ‘none’: no se actualizan los parámetros de sesgo
    • ‘all’: se actualizan todos los parámetros de sesgo
    • ‘unilora_only’: solo se actualizan los sesgos dentro de las capas UniLora Nota: habilitar la actualización de sesgos cambia las salidas del modelo incluso cuando los adaptadores están deshabilitados.
  • modules_to_save (list[str], opcional) — Módulos adicionales (fuera de las capas UniLora) que deben permanecer entrenables y guardarse en el punto de control final. Esto se utiliza comúnmente para cabezas específicas de la tarea, como clasificadores.
  • init_theta_d_bound (float) — Límite de inicialización para el banco de vectores de UniLora. Los vectores se muestrean uniformemente desde [-init_theta_d_bound, init_theta_d_bound]. Se evita la inicialización con ceros para prevenir gradientes que se desvanecen. Se recomiendan valores pequeños (p. ej., 0.02) para un entrenamiento estable.
  • init_weights (bool) — Si se debe inicializar theta_d con la inicialización predeterminada de UniLora. Si se establece en False, theta_d mantiene una inicialización aleatoria.
  • save_indices (bool) — Si se deben guardar los búferes de índice y escala UniLora generados junto con theta_d. Esto aumenta el tamaño del punto de control, pero hace que los adaptadores guardados sean independientes de los cambios futuros en la rutina de generación de índices.
  • layers_to_transform (Union[list[int], int], opcional) — Índices de las capas de transformer a las que se aplica UniLora. Si se especifica, solo se modifican estas capas. Esta opción es válida solo cuando target_modules es una lista.
  • layers_pattern (Union[list[str], str], opcional) — Patrón de nombre de capa personalizado que se utiliza junto con layers_to_transform cuando el modelo no sigue las convenciones estándar de nomenclatura de capas. Esta opción solo es válida cuando target_modules es una lista.

Clase de configuración para adaptadores UniLora.

Esta clase define todos los hiperparámetros necesarios para inicializar y aplicar las capas UniLora dentro del marco PEFT. La configuración es intencionalmente mínima e incluye solo los parámetros que se utilizan activamente en la implementación actual de UniLora.

Reference: Uni-LoRA: One Vector Is All You Need https://arxiv.org/abs/2506.00799

UniLoraModel

clase peft.UniLoraModel

< >

( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )

Crea un adaptador UniLora alrededor de un modelo preentrenado.

generate_index

< >

( lora_param_count: inttheta_d_length: intproj_seed: int )

Asigne índices theta_d deterministas al espacio de parámetros UniLora aplanado.

Un simple np.random.choice(np.arange(theta_d_length), size=lora_param_count) muestrea cada posición de forma independiente, lo que puede dejar algunas entradas de theta_d sin usar en adaptadores más pequeños. UniLora, en cambio, utiliza una asignación determinista equilibrada: cada índice aparece floor(D / d) o ceil(D / d) veces, donde D es la cantidad de parámetros de LoRA aplanados y d es theta_d_length. Esto mantiene estable la normalización por índice mientras sigue barajando la asignación con proj_seed.

Update on GitHub