PEFT documentation

Llama-Adapter

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

Llama-Adapter

LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention

Llama-Adapter es un método de PEFT diseñado específicamente para convertir Llama en un modelo que sigue instrucciones. El modelo Llama se congela y solo se aprende un conjunto de prompts de adaptación que se prefijan a los tokens de la instrucción de entrada. Dado que los módulos inicializados aleatoriamente e insertados en el modelo pueden hacer que este pierda parte de su conocimiento existente, Llama-Adapter utiliza atención inicializada en cero con compuerta en cero para añadir progresivamente los prompts de instrucción al modelo.

El resumen del artículo es:

Presentamos LLaMA-Adapter, un método ligero de adaptación para afinar eficientemente LLaMA en un modelo que sigue instrucciones. Utilizando 52K demostraciones de auto-instruct, LLaMA-Adapter introduce solo 1,2M de parámetros aprendibles sobre el modelo LLaMA 7B congelado, y el costo de la afinación es inferior a una hora en 8 GPUs A100. Específicamente, adoptamos un conjunto de prompts de adaptación aprendibles y los antepone a los tokens de texto de entrada en las capas superiores del transformer. A continuación, se propone un mecanismo de atención con inicialización cero y compuerta cero, que inyecta de forma adaptativa las nuevas pistas instruccionales en LLaMA, mientras que preserva eficazmente su conocimiento preentrenado. Con un entrenamiento eficiente, LLaMA-Adapter genera respuestas de alta calidad, comparables a las de Alpaca con 7B parámetros totalmente afinados. Además, nuestro enfoque puede extenderse fácilmente a entradas multimodales, p. ej., imágenes, para un LLaMA condicionado por imágenes, que logra una capacidad de razonamiento superior en ScienceQA. Publicamos nuestro código en https://github.com/ZrrSkywalker/LLaMA-Adapter.

Cuándo usar Llama-Adapter

Llama-Adapter es una buena opción cuando:

  • Desea un checkpoint muy pequeño. Solo se entrenan y guardan los prompts de adaptación y sus puertas, lo que equivale a adapter_layers * (adapter_len * hidden_size + 1) parámetros.
  • Estás realizando instruction-tuning en un modelo compatible (Llama, Mistral o GPT-2), el caso de uso en el que se centra el artículo.
  • Deseas mantener varios adaptadores específicos para tareas para el mismo modelo base y alternar entre ellos con set_adapter.

Cuándo no usar Llama-Adapter

Llama-Adapter puede no ser la mejor opción cuando:

  • Tu modelo no es un modelo Llama, Mistral o GPT-2. Otras arquitecturas generan un ValueError. Considera usar LoRA en su lugar.
  • Se necesita una sobrecarga de inferencia nula. El adaptador no puede fusionarse en los pesos base (merge_and_unload() no está soportado), por lo que cada capa adaptada atiende a adapter_len tokens adicionales durante la inferencia.
  • Desea que varios adaptadores estén activos al mismo tiempo. Solo puede haber un adaptador activo, y los prompts de adaptación no se pueden apilar en el mismo módulo de atención.

Resumen de las pruebas de rendimiento

API

AdaptionPromptConfig

clase peft.AdaptionPromptConfig

< >

( 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: str = Noneadapter_len: int = Noneadapter_layers: int = None )

Almacena la configuración de un AdaptionPromptModel.

AdaptionPromptModel

clase peft.AdaptionPromptModel

< >

( modelconfigs: dictadapter_name: str )

Implementa prompts de adaptación tal como se describe en https://huggingface.co/papers/2303.16199.

Los módulos de atención L superiores se reemplazan con módulos AdaptedAttention que envuelven a los originales, pero insertan prompts entrenables con puertas (para inicialización en cero).

Notas sobre el patrón multi-adapter:

  • Guardamos los estados de diferentes adaptadores manteniendo un diccionario de módulos AdaptedAttention indexados por el nombre del adaptador.
  • Cada vez que cambiamos de adaptador, eliminamos los módulos del adaptador actualmente activo del modelo, los almacenamos en el diccionario y los reemplazamos con los módulos del nuevo adaptador.
  • Para evitar un estado duplicado y potencialmente inconsistente, el adaptador activo actual siempre se elimina del diccionario.
  • Desactivar el adaptador también provocaría que los módulos se eliminaran del modelo.

add_adapter

< >

( adapter_name: strconfig: AdaptionPromptConfig )

Añade un adaptador con el nombre y la configuración dados.

delete_adapter

< >

( adapter_name: str )

Eliminar un adaptador con el nombre indicado.

disable_adapter_layers

< >

( )

Desactiva las capas de adaptador reemplazando los módulos AdaptedAttention.

enable_adapter_layers

< >

( )

Habilite las capas de adaptador mediante el intercambio de los módulos AdaptedAttention en caché.

set_adapter

< >

( adapter_name: strinference_mode: bool = False )

Establezca el modelo para que use el adaptador con el nombre indicado.

Update on GitHub