PEFT documentation
Tuners
Tuners
Tuner (atau adapter) adalah modul yang dapat disambungkan ke torch.nn.Module. Kelas dasar BaseTuner untuk tuner lainnya dan menyediakan metode serta atribut bersama untuk menyiapkan konfigurasi adapter dan mengganti modul target dengan modul adapter. BaseTunerLayer adalah kelas dasar untuk lapisan adapter. Kelas ini menawarkan metode dan atribut untuk mengelola adapter, seperti mengaktifkan dan menonaktifkan adapter.
BaseTuner
kelas peft.tuners.tuners_utils.BaseTuner
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
Parameter
- model (
torch.nn.Module) β Model tempat lapisan tuner adapter akan dilampirkan. - forward (
Callable) β Metode forward dari model. - peft_config (
Union[PeftConfig, dict[str, PeftConfig]]) β Objek konfigurasi adapter, seharusnya berupa kamus daristrke objekPeftConfig. Anda juga dapat melewati objek PeftConfig dan adapter baru akan dibuat dengan nama defaultadapteratau membuat kamus baru dengan kunciadapter_namedan nilai berupa peft config tersebut. - config (
dict[str, Any]) β Objek konfigurasi model, seharusnya berupa kamus dari objekstrkeAny. - targeted_module_names (
list[str]) β Daftar nama modul yang benar-benar diadaptasi. Dapat berguna untuk memeriksa jika Anda ingin dengan cepat memastikan bahwaconfig.target_modulestelah ditentukan dengan benar. - targeted_parameter_names (
list[str]) β Daftar nama parameter yang benar-benar diadaptasi. Dapat berguna untuk memeriksa jika Anda ingin dengan cepat memastikan bahwaconfig.target_parameterstelah ditentukan dengan benar. - prefix (
str) β Prefiks unik yang spesifik untuk metode PEFT. Misalnya,"lora_"untuk LoRA.
Model tuner dasar yang menyediakan metode dan atribut umum untuk semua tuner yang dapat disuntikkan ke dalam torch.nn.Module
Untuk menambahkan kelas Tuner baru, Anda perlu menimpa metode-metode berikut:
- _prepare_adapter_config:
Metode privat untuk menyiapkan konfigurasi adapter, misalnya jika field
target_modulestidak ada. - _create_and_replace: Metode privat untuk membuat dan mengganti modul target dengan modul adapter.
- _check_target_module_exists: Metode helper privat untuk memeriksa apakah nama kunci modul yang diteruskan cocok dengan salah satu modul target dalam adapter_config.
Cara termudah adalah memeriksa apa yang dilakukan di kelas peft.tuners.lora.LoraModel.
delete_adapter
< source >( adapter_name: str )
Menghapus adapter yang sudah ada.
Nonaktifkan semua adapter secara in-place.
Saat semua adapter dinonaktifkan, output model sesuai dengan output model dasar.
Aktifkan semua adapter di tempat
get_model_config
< source >( model: nn.Module )
Metode ini mengambil konfigurasi dari model dalam bentuk kamus. Jika model tidak memiliki atribut config, maka metode ini mengembalikan konfigurasi default.
inject_adapter
< source >( model: nn.Moduleadapter_name: strautocast_adapter_dtype: bool = Truelow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
Parameter
- model (
nn.Module) β Model yang akan disetel. - adapter_name (
str) β Nama adapter. - autocast_adapter_dtype (
bool, opsional) β Apakah akan melakukan autocast pada dtype adapter. Defaultnya adalahTrue. - low_cpu_mem_usage (
bool,optional, defaults toFalse) β Membuat bobot adapter kosong pada perangkat meta. Berguna untuk mempercepat proses pemuatan. - state_dict (
dict, opsional, defaultNone) β Jika state_dict diberikan di sini, adapter akan disuntikkan berdasarkan entri dari state_dict. Hal ini dapat berguna ketikatarget_modulesyang tepat dari metode PEFT tidak diketahui, misalnya karena checkpoint dibuat tanpa meta data. Perhatikan bahwa nilai dari state_dict tidak digunakan, hanya kuncinya yang digunakan untuk menentukan lapisan yang benar yang harus diadaptasi.
Membuat lapisan adapter dan mengganti modul target dengan lapisan adapter. Metode ini dipanggil di balik layar oleh peft.mapping.get_peft_model jika kelas adapter non-prompt tuning dilewatkan.
Konfigurasi PEFT yang sesuai diambil langsung dari atribut peft_config dari kelas BaseTuner.
merge_adapter
< source >( adapter_names: Optional[list[str]] = Nonesafe_merge: bool = False )
Parameter
- adapter_names (
list[str], opsional) β Daftar nama adapter yang harus digabungkan. JikaNone, semua adapter aktif akan digabungkan. Nilai defaultnya adalahNone. - safe_merge (
bool, opsional) β JikaTrue, operasi penggabungan akan dilakukan pada salinan bobot asli dan memeriksa NaN sebelum menggabungkan bobot. Ini berguna jika Anda ingin memeriksa apakah operasi penggabungan akan menghasilkan NaN. Bawaan adalahFalse.
Metode ini menggabungkan lapisan adapter ke dalam model dasar.
Menggabungkan adapter dapat mempercepat proses forward pass. Salinan bobot adapter tetap disimpan di memori, yang diperlukan untuk memisahkan kembali adapter. Untuk menggabungkan bobot adapter tanpa menyimpannya di memori, silakan panggil merge_and_unload.
Setelah sebuah layer menggabungkan bobot adapter, jalur maju (forward pass) layer tersebut hanya menggunakan bobot yang telah digabungkan tersebut. Oleh karena itu, jika adapter_names tidak mencakup semua adapter yang aktif, adapter aktif yang tersisa akan secara diam-diam tidak diterapkan, meskipun mereka masih dilaporkan sebagai aktif. Gabungkan semua adapter yang aktif atau panggil unmerge_adapter terlebih dahulu. Perhatikan bahwa perilaku ini direncanakan untuk diubah dalam rilis v1.0.
merge_and_unload
< source >( progressbar: bool = Falsesafe_merge: bool = Falseadapter_names: Optional[list[str]] = None )
Parameter
- progressbar (
bool) β apakah menampilkan progressbar yang menunjukkan proses unload dan merge (default: False). - safe_merge (
bool) β apakah mengaktifkan pemeriksaan penggabungan aman untuk memeriksa apakah ada potensi Nan pada bobot adapter. - adapter_names (
List[str], opsional) β Daftar nama adapter yang harus digabungkan. Jika None, semua adapter aktif akan digabungkan. Defaultnya adalahNone.
Metode ini menggabungkan lapisan adapter ke dalam model dasar.
Hal ini diperlukan jika seseorang ingin menggunakan model dasar sebagai model mandiri. Model yang dikembalikan memiliki arsitektur yang sama dengan model dasar aslinya.
Penting untuk menugaskan model yang dikembalikan ke sebuah variabel dan menggunakannya, karena ini bukan operasi in-place!
Contoh:
>>> from transformers import AutoModelForCausalLM
>>> from peft import PeftModel
>>> model_id = ...
>>> base_model = AutoModelForCausalLM.from_pretrained(model_id)
>>> peft_model_id = ...
>>> model = PeftModel.from_pretrained(base_model, peft_model_id)
>>> merged_model = model.merge_and_unload()set_adapter
< source >( adapter_name: str | list[str]inference_mode: bool = False )
Atur adapter yang aktif.
set_requires_grad
< source >( adapter_names: str | Sequence[str]requires_grad: bool = True )
Aktifkan atau nonaktifkan gradien pada adapter yang diberikan.
Apakah adapter dari model ini dapat dikonversi ke LoRA.
Biasanya, ini berfungsi jika metode PEFT bersifat aditif, yaitu Wβ = W_base + delta_weight.
Kembalikan model dasar dengan menghapus semua modul PEFT.
Penting untuk menugaskan model yang dikembalikan ke sebuah variabel dan menggunakannya, karena ini bukan operasi in-place!
Metode ini memisahkan semua lapisan adapter yang telah digabungkan dari model dasar.
BaseTunerLayer
kelas peft.tuners.tuners_utils.BaseTunerLayer
< source >( )
Mixin lapisan tuner yang menyediakan metode dan atribut umum untuk semua tuner.
delete_adapter
< source >( adapter_name: str )
Hapus adapter dari layer
Ini harus dipanggil di semua lapisan adapter, atau kita akan mendapatkan keadaan yang tidak konsisten.
Metode ini juga akan mengatur adapter aktif baru jika adapter yang dihapus merupakan adapter aktif. Penting bahwa adapter baru dipilih secara deterministik, sehingga adapter yang sama dipilih di semua lapisan.
enable_adapters
< source >( enabled: bool )
Beralihkan pengaktifan dan penonaktifan adapter
Menangani pengaturan flag requires_grad untuk bobot adapter.
(Resursif) dapatkan base_layer.
Hal ini diperlukan untuk kasus di mana lapisan tuner membungkus lapisan tuner lainnya.
Kembalikan bobot dari lapisan dasar.
Hal ini menangani kemungkinan dekuantisasi bobot jika bobot tersebut terkuantisasi.
set_adapter
< source >( adapter_names: str | list[str]inference_mode: bool = False )
Atur adapter yang aktif.
Selain itu, fungsi ini akan mengatur adapter yang ditentukan agar dapat dilatih (yaitu, requires_grad=True) kecuali inference_mode bernilai True.
Menetapkan bobot dasar dari lapisan dasar ke tensor baru
Ini juga berfungsi dengan bobot terkuantisasi.
set_requires_grad
< source >( adapter_names: str | Sequence[str]requires_grad: bool = True )
Aktifkan atau nonaktifkan gradien pada adapter yang diberikan.
set_training
< source >( adapter_names: str | Sequence[str]training: bool = True )
Aktifkan atau nonaktifkan mode pelatihan pada modul adapter yang diberikan.
Apakah tipe layer ini dapat dikonversi ke LoRA.
Biasanya, ini berfungsi jika metode PEFT bersifat aditif, yaitu Wβ = W_base + delta_weight.