PEFT documentation
UniLoRA
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
< 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 = 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 compartidotheta_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 inicializartheta_dcon la inicialización predeterminada de UniLora. Si se establece enFalse,theta_dmantiene una inicialización aleatoria. - save_indices (
bool) — Si se deben guardar los búferes de índice y escala UniLora generados junto contheta_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 cuandotarget_moduleses una lista. - layers_pattern (
Union[list[str], str], opcional) — Patrón de nombre de capa personalizado que se utiliza junto conlayers_to_transformcuando el modelo no sigue las convenciones estándar de nomenclatura de capas. Esta opción solo es válida cuandotarget_moduleses 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
< source >( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )
Crea un adaptador UniLora alrededor de un modelo preentrenado.
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.