PEFT documentation
Token yang Dapat Dilatih
Token yang Dapat Dilatih
Metode Trainable Tokens menyediakan cara untuk menargetkan token embedding tertentu untuk fine-tuning tanpa perlu melatih matriks embedding penuh atau menggunakan adapter pada matriks embedding. Metode ini didasarkan pada implementasi awal dari di sini.
Metode ini hanya menargetkan token tertentu dan secara selektif melatih indeks token yang Anda tentukan. Akibatnya, RAM yang dibutuhkan akan lebih rendah dan memori disk juga jauh lebih rendah dibandingkan menyimpan matriks embedding hasil fine-tuning secara penuh.
Beberapa benchmark awal yang diperoleh dengan skrip ini menunjukkan bahwa untuk gemma-2-2b (yang memiliki matriks embedding yang cukup besar), Anda dapat menghemat sekitar 4 GiB VRAM dengan Trainable Tokens
dibandingkan fine-tuning penuh pada matriks embedding. Meskipun LoRA akan menggunakan jumlah VRAM yang sebanding, ia juga mungkin menargetkan
token yang tidak ingin Anda ubah. Perhatikan bahwa ini hanya indikasi dan ukuran matriks embedding yang bervariasi mungkin sedikit
menggeser angka-angka ini.
Perhatikan bahwa metode ini tidak menambahkan token untuk Anda; Anda harus menambahkan token ke tokenizer sendiri dan mengubah ukuran matriks embedding model secara sesuai. Metode ini hanya akan melatih ulang embedding untuk token yang Anda tentukan. Metode ini juga dapat digunakan bersamaan dengan lapisan LoRA! Lihat dokumentasi LoRA.
Menyimpan model dengan save_pretrained() atau mengambil state dict menggunakan get_peft_model_state_dict() saat menambahkan token baru dapat menyimpan matriks embedding penuh, bukan hanya selisihnya, sebagai tindakan pencegahan karena matriks embedding telah diubah ukurannya. Untuk menghemat ruang, Anda dapat menonaktifkan perilaku ini dengan mengatur
save_embedding_layers=Falsesaat memanggilsave_pretrained. Hal ini aman dilakukan selama Anda tidak memodifikasi matriks embedding melalui cara lain, karena perubahan semacam itu tidak akan dilacak oleh token yang dapat dilatih.
Ikhtisar benchmark
API
TrainableTokensConfig
kelas peft.TrainableTokensConfig
< 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 = Falsetoken_indices: list[int] = <factory>target_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = True )
Parameter
- token_indices (
list[int]) — Daftar bilangan bulat yang menandakan indeks token yang ingin dilatih. Untuk menemukan indeks sebuah token dengan tokenizer, Anda dapat melakukan tokenisasi pada string dan melihatinput_idsyang dikembalikan. Semakin dekat jumlah indeks dengan total jumlah token, semakin tidak efisien metode ini menjadi. - target_modules (
Optional[Union[list[str], str]]) — Daftar nama modul atau ekspresi regex dari nama modul yang akan diganti denganTrainableTokensLayerkami. Jika tidak didefinisikan, akan mencoba mendapatkan lapisan input embedding model jika model memiliki metodeget_input_embeddings(model transformer biasanya memilikinya), jika itu gagal, defaultnya adalah ‘embed_tokens’. Contoh target lainnya adalahembedding,encoder.embeddingsataudecoder.embeddings. - init_weights (
bool) — Secara default, bobot token baru diinisialisasi agar sama dengan embedding token yang bersangkutan. Hal ini membuat TrainableTokens menjadi no-op ketika tidak dilatih. Jika diset keFalse, bobot akan berupa nilai acak. Jangan mengubah pengaturan ini kecuali Anda tahu persis apa yang Anda lakukan.
Konfigurasi untuk metode TrainableTokens.
Memungkinkan pelatihan token baru (dan pelatihan ulang token yang sudah ada) tanpa melatih matriks embedding secara penuh. Dengan menandai beberapa token tertentu (diidentifikasi melalui indeksnya) sebagai dapat dilatih dan membiarkan sisanya tetap tidak berubah, metode ini dapat digunakan untuk menambahkan token baru atau mengubah embedding dari token yang sudah ada sambil menghemat memori. Baik penggunaan penyimpanan maupun memori kerja berkurang dibandingkan dengan melatih matriks embedding secara penuh.
Perhatikan bahwa pelatihan dengan FSDP/DeepSpeed mungkin belum sepenuhnya didukung.
TrainableTokensModel
kelas peft.TrainableTokensModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )