PEFT documentation

RoAd

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

RoAd

RoAd es una técnica de ajuste fino eficiente en parámetros que adapta modelos de lenguaje de gran escala aprendiendo un pequeño conjunto de matrices de rotación de 2×2 (y factores de escalado opcionales) aplicados a pares de dimensiones ocultas. RoAd logra un rendimiento competitivo o superior en comparación con otros métodos PEFT con menos del 0,1 % de parámetros entrenables. A diferencia de las actualizaciones de bajo rango por lotes de LoRA, las rotaciones dispersas de RoAd se reformulan en operaciones elementales simples, lo que genera un rendimiento de servicio significativamente mayor al manejar solicitudes heterogéneas en el mismo lote, es decir, al servir múltiples adaptadores simultáneamente. Además, RoAd se integra de manera fluida en un marco de intervención de intercambio distribuido, interpretando sus rotaciones 2D dispersas como intervenciones específicas de la tarea dentro de subespacios aprendidos de las representaciones ocultas. Estos subespacios ortogonales pueden componerse para fusionar múltiples comportamientos específicos de la tarea, como capacidades multilingües o el seguimiento de instrucciones, sin necesidad de un ajuste fino adicional, lo que permite adaptaciones modulares e interpretables en LLMs.

El ajuste fino con RoAd generalmente requiere una tasa de aprendizaje más alta en comparación con LoRA o métodos similares, alrededor de 1e-3. Actualmente, RoAd solo admite capas lineales y se puede utilizar en modelos cuantizados con bitsandbytes (4 bits u 8 bits).

Para ejecutar la inferencia con diferentes adaptadores RoAd en el mismo lote, consulte Inferencia con diferentes adaptadores LoRA en el mismo lote.

Resumen de las pruebas de rendimiento

API

RoadConfig

clase peft.RoadConfig

< >

( 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 = Falsevariant: Union[str, RoadVariant] = 'road_1'group_size: int = 64init_weights: bool = Truetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )

Parámetros

  • variant (Union[RoadVariant, str]) — La variante del modelo Road a utilizar. Puede ser una de road_1, road_2 o road_4. Consulte el artículo para obtener más detalles.
    • road_1: Utiliza la misma escala y el mismo ángulo para todas las parejas de elementos. Esta variante tiene el menor número de parámetros, ya que almacena un número igual al tamaño oculto de salida de parámetros para cada capa a la que se aplica RoAd.
    • road_2: Utiliza la misma escala y el mismo ángulo para cada elemento. Esta variante tiene el doble de parámetros en comparación con road_1.
    • road_4: Utiliza dos escalas y ángulos diferentes para cada elemento. Esta variante tiene 4 veces más parámetros que road_1.
  • group_size (int) — El tamaño de grupo define cómo se agrupan los elementos en vectores 2D para la rotación. Dentro de cada grupo, el elemento 0 se empareja con el elemento group_size/2, luego el elemento 1 se empareja con el elemento group_size/2+1 y así sucesivamente. Esto no afecta al rendimiento del modelo, ya que los elementos no están ordenados, pero tiene cierto efecto en la velocidad de inferencia cuando se utiliza, por ejemplo, en VLLM. Para obtener la mejor velocidad, se recomienda un tamaño de grupo de al menos 32 o 64 (el valor predeterminado). Tenga en cuenta que el tamaño oculto del modelo (o el tamaño oculto por partición cuando se usa con paralelismo de tensor) debe ser divisible por group_size, por lo que para modelos muy pequeños es posible que necesite reducir este parámetro.
  • init_weights (bool) — Si se debe realizar la inicialización de los pesos de RoAd.
  • target_modules (Optional[Union[List[str], str]]) — Los nombres de los módulos a los que se aplicará el adaptador. Si se especifica, solo se reemplazarán los módulos con los nombres indicados. Al pasar una cadena de caracteres, se realizará una coincidencia mediante expresión regular. Al pasar una lista de cadenas de caracteres, se realizará una coincidencia exacta o se verificará si el nombre del módulo termina con alguna de las cadenas pasadas. Si se especifica como ‘all-linear’, se seleccionarán todos los módulos lineales/Conv1D (si el modelo es un PreTrainedModel, excluyendo la capa de salida). Si no se especifica, los módulos se elegirán según la arquitectura del modelo. Si la arquitectura no es conocida, se generará un error; en este caso, debe especificar los módulos objetivo manualmente.
  • modules_to_save (List[str]) — Lista de módulos, aparte de las capas de Road, que se configurarán como entrenables y se guardarán en el punto de control final.

Esta es la clase de configuración para almacenar la configuración de un RoadModel. El adaptador RoAd se propone en https://huggingface.co/papers/2409.00119.

RoadModel

clase peft.RoadModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub