PEFT documentation
Llama-Adapter
Llama-Adapter

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 aadapter_lentokens 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
< 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: str = Noneadapter_len: int = Noneadapter_layers: int = None )
Almacena la configuración de un AdaptionPromptModel.
AdaptionPromptModel
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.
Añade un adaptador con el nombre y la configuración dados.
Eliminar un adaptador con el nombre indicado.
Desactiva las capas de adaptador reemplazando los módulos AdaptedAttention.
Habilite las capas de adaptador mediante el intercambio de los módulos AdaptedAttention en caché.
Establezca el modelo para que use el adaptador con el nombre indicado.