PEFT documentation
Tipos de adaptadores mixtos
Tipos de adaptadores mixtos
Normalmente, no es posible mezclar diferentes tipos de adaptadores en 🤗 PEFT. Puede crear un modelo PEFT con dos adaptadores LoRA diferentes (que pueden tener opciones de configuración distintas), pero no es posible combinar un adaptador LoRA y uno LoHa. Sin embargo, con PeftMixedModel esto funciona siempre que los tipos de adaptadores sean compatibles. El propósito principal de permitir tipos de adaptadores mixtos es combinar adaptadores entrenados para inferencia. Si bien es posible entrenar un modelo de adaptadores mixtos, esto no ha sido probado y no se recomienda.
Para cargar diferentes tipos de adaptadores en un modelo PEFT, use PeftMixedModel en lugar 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"])El método set_adapter() es necesario para activar ambos adaptadores; de lo contrario, solo el primer adaptador estaría activo. Puedes seguir añadiendo más adaptadores llamando repetidamente a add_adapter().
PeftMixedModel no admite guardar y cargar adaptadores mixtos. Los adaptadores ya deben estar entrenados y la carga del modelo requiere ejecutar un script cada vez.
Consejos
- No todos los tipos de adaptador se pueden combinar. Consulte
peft.tuners.mixed.COMPATIBLE_TUNER_TYPESpara obtener una lista de los tipos compatibles. Se generará un error si intenta combinar tipos de adaptador incompatibles. - Es posible combinar varios adaptadores del mismo tipo, lo cual puede ser útil para combinar adaptadores con configuraciones muy diferentes.
- Si deseas combinar muchos adaptadores diferentes, la forma más eficiente de hacerlo es añadir consecutivamente los mismos tipos de adaptador. Por ejemplo, añade LoRA1, LoRA2, LoHa1, LoHa2 en este orden, en lugar de LoRA1, LoHa1, LoRA2 y LoHa2. Aunque el orden puede afectar la salida, no existe un orden óptimo inherente, por lo que lo mejor es elegir el más rápido.