PEFT documentation
Tipos de adaptador mistos
Tipos de adaptador mistos
Normalmente, não é possível misturar diferentes tipos de adaptador no 🤗 PEFT. Você pode criar um modelo PEFT com dois adaptadores LoRA diferentes (que podem ter opções de configuração distintas), mas não é possível combinar um adaptador LoRA e um adaptador LoHa. Com o PeftMixedModel, no entanto, isso funciona, desde que os tipos de adaptador sejam compatíveis. O principal objetivo de permitir tipos de adaptador mistos é combinar adaptadores treinados para inferência. Embora seja possível treinar um modelo de adaptador misto, isso não foi testado e não é recomendado.
Para carregar diferentes tipos de adaptadores em um modelo PEFT, use PeftMixedModel em vez de PeftModel:
from peft import PeftMixedModel
base_model = ... # load the base model, e.g. from transformers
# load first adapter, which will be called "default"
peft_model = PeftMixedModel.from_pretrained(base_model, <path_to_adapter1>)
peft_model.load_adapter(<path_to_adapter2>, adapter_name="other")
peft_model.set_adapter(["default", "other"])O método set_adapter() é necessário para ativar ambos os adaptadores; caso contrário, apenas o primeiro adaptador ficaria ativo. Você pode continuar adicionando mais adaptadores chamando add_adapter() repetidamente.
PeftMixedModel não suporta salvar e carregar adaptadores mistos. Os adaptadores devem já ter sido treinados, e a carga do modelo requer a execução de um script a cada vez.
Dicas
- Nem todos os tipos de adaptador podem ser combinados. Consulte
peft.tuners.mixed.COMPATIBLE_TUNER_TYPESpara obter uma lista dos tipos compatíveis. Um erro será lançado se você tentar combinar tipos de adaptador incompatíveis. - É possível misturar vários adaptadores do mesmo tipo, o que pode ser útil para combinar adaptadores com configurações muito diferentes.
- Se você deseja combinar muitos adaptadores diferentes, a maneira mais performática de fazê-lo é adicionar consecutivamente os mesmos tipos de adaptadores. Por exemplo, adicione LoRA1, LoRA2, LoHa1, LoHa2 nessa ordem, em vez de LoRA1, LoHa1, LoRA2 e LoHa2. Embora a ordem possa afetar a saída, não existe uma ordem melhor inerente, então o ideal é escolher a mais rápida.