PEFT documentation
Llama-Adapter
Llama-Adapter

Llama-Adapter é um método PEFT projetado especificamente para transformar o Llama em um modelo que segue instruções. O modelo Llama é congelado e apenas um conjunto de prompts de adaptação prefixados aos tokens de instrução de entrada é aprendido. Como módulos inicializados aleatoriamente inseridos no modelo podem fazer com que ele perca parte de seu conhecimento existente, o Llama-Adapter usa atenção inicializada em zero com gating em zero para adicionar progressivamente os prompts de instrução ao modelo.
O resumo do artigo é:
Apresentamos o LLaMA-Adapter, um método de adaptação leve para ajustar eficientemente o LLaMA em um modelo que segue instruções. Utilizando 52K demonstrações de auto-instrução, o LLaMA-Adapter introduz apenas 1,2M de parâmetros aprendíveis sobre o modelo LLaMA 7B congelado e custa menos de uma hora para ajuste fino em 8 GPUs A100. Especificamente, adotamos um conjunto de prompts de adaptação aprendíveis e os adicionamos aos tokens de texto de entrada nas camadas superiores do transformer. Em seguida, propomos um mecanismo de atenção com inicialização zero e gating zero, que injeta adaptivamente as novas pistas instrucionais no LLaMA, preservando eficazmente seu conhecimento pré-treinado. Com treinamento eficiente, o LLaMA-Adapter gera respostas de alta qualidade, comparáveis ao Alpaca com 7B parâmetros totalmente ajustados. Além disso, nossa abordagem pode ser estendida simplesmente para entrada multimodal, por exemplo, imagens, para LLaMA condicionado por imagem, que alcança capacidade de raciocínio superior no ScienceQA. Liberamos nosso código em https://github.com/ZrrSkywalker/LLaMA-Adapter.
Quando usar o Llama-Adapter
Llama-Adapter é uma boa escolha quando:
- Você deseja um checkpoint muito pequeno. Apenas os prompts de adaptação e seus gates são treinados e salvos, o que corresponde a
adapter_layers * (adapter_len * hidden_size + 1)parâmetros. - Você está fazendo instruction-tuning em um modelo suportado (Llama, Mistral ou GPT-2), o caso de uso em que o artigo se concentra.
- Você deseja manter vários adaptadores específicos para tarefas para o mesmo modelo base e alternar entre eles com
set_adapter.
Quando não usar Llama-Adapter
O Llama-Adapter pode não ser a melhor escolha quando:
- Seu modelo não é um modelo Llama, Mistral ou GPT-2. Outras arquiteturas geram um
ValueError. Considere usar LoRA em vez disso. - Você precisa de zero sobrecarga de inferência. O adaptador não pode ser mesclado nos pesos base (
merge_and_unload()não é suportado), portanto, cada camada adaptada atende aadapter_lentokens adicionais no momento da inferência. - Você deseja que vários adaptadores estejam ativos ao mesmo tempo. Apenas um adaptador pode estar ativo, e os prompts de adaptação não podem ser empilhados no mesmo módulo de atenção.
Visão geral do benchmark
API
AdaptionPromptConfig
classe 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 )
Armazena a configuração de um AdaptionPromptModel.
AdaptionPromptModel
Implementa prompts de adaptação conforme descrito em https://huggingface.co/papers/2303.16199.
Os módulos de atenção L superiores são substituídos por módulos AdaptedAttention que envolvem os originais, mas inserem prompts treináveis com portões (para inicialização zero).
Observações sobre o padrão multi-adapter:
- Armazenamos os estados de diferentes adaptadores mantendo um dicionário de módulos AdaptedAttention indexados pelo nome do adaptador.
- Sempre que alternamos adaptadores, removemos os módulos do adaptador atualmente ativo do modelo, os armazenamos no dicionário e os substituímos pelos módulos do novo adaptador.
- Para evitar estado duplicado e potencialmente inconsistente, o adaptador ativo atual é sempre removido do dicionário.
- Desativar o adaptador também resultaria na remoção dos módulos do modelo.
Adicione um adaptador com o nome e a configuração fornecidos.
Exclua um adaptador com o nome especificado.
Desative as camadas de adaptador substituindo os módulos AdaptedAttention.
Ative as camadas de adaptador substituindo os módulos AdaptedAttention em cache.
Defina o modelo para usar o adaptador com o nome especificado.