PEFT documentation
Jenis adapter campuran
Jenis adapter campuran
Biasanya, tidak mungkin mencampur berbagai jenis adapter di 🤗 PEFT. Anda dapat membuat model PEFT dengan dua adapter LoRA yang berbeda (yang dapat memiliki opsi konfigurasi yang berbeda), tetapi tidak mungkin menggabungkan adapter LoRA dan LoHa. Namun, dengan PeftMixedModel, hal ini dapat dilakukan selama jenis adapternya kompatibel. Tujuan utama dari mengizinkan jenis adapter yang dicampur adalah untuk menggabungkan adapter yang telah dilatih untuk inferensi. Meskipun memungkinkan untuk melatih model adapter campuran, hal ini belum diuji dan tidak direkomendasikan.
Untuk memuat berbagai jenis adapter ke dalam model PEFT, gunakan PeftMixedModel alih-alih 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"])Metode set_adapter() diperlukan untuk mengaktifkan kedua adapter, jika tidak hanya adapter pertama yang akan aktif. Anda dapat terus menambahkan lebih banyak adapter dengan memanggil add_adapter() secara berulang.
PeftMixedModel tidak mendukung penyimpanan dan pemuatan adapter campuran. Adapter harus sudah dilatih, dan pemuatan model memerlukan eksekusi skrip setiap kali.
Tips
- Tidak semua tipe adapter dapat digabungkan. Lihat
peft.tuners.mixed.COMPATIBLE_TUNER_TYPESuntuk daftar tipe yang kompatibel. Error akan dilempar jika Anda mencoba menggabungkan tipe adapter yang tidak kompatibel. - Dimungkinkan untuk mencampur beberapa adapter dari tipe yang sama, yang dapat berguna untuk menggabungkan adapter dengan konfigurasi yang sangat berbeda.
- Jika Anda ingin menggabungkan banyak adapter yang berbeda, cara paling performan adalah dengan menambahkan tipe adapter yang sama secara berurutan. Misalnya, tambahkan LoRA1, LoRA2, LoHa1, LoHa2 dalam urutan ini, bukan LoRA1, LoHa1, LoRA2, dan LoHa2. Meskipun urutan dapat memengaruhi output, tidak ada urutan terbaik secara inheren, sehingga sebaiknya pilih urutan yang tercepat.