PEFT documentation

Token yang Dapat Dilatih

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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=False saat memanggil save_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

< >

( 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 melihat input_ids yang 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 dengan TrainableTokensLayer kami. Jika tidak didefinisikan, akan mencoba mendapatkan lapisan input embedding model jika model memiliki metode get_input_embeddings (model transformer biasanya memilikinya), jika itu gagal, defaultnya adalah ‘embed_tokens’. Contoh target lainnya adalah embedding, encoder.embeddings atau decoder.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 ke False, 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

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub