? PEFT
Metode Penyempurnaan Efisien Parameter (PEFT) yang canggih
Menyempurnakan model besar yang telah dilatih sebelumnya seringkali sangat mahal karena skalanya. Metode Penyempurnaan Efisien Parameter (PEFT) memungkinkan adaptasi yang efisien dari model besar yang telah dilatih sebelumnya ke berbagai aplikasi hilir dengan hanya menyempurnakan sejumlah kecil parameter model (ekstra), bukan semua parameter model. Hal ini secara signifikan mengurangi biaya komputasi dan penyimpanan. Teknik PEFT mutakhir mencapai kinerja yang sebanding dengan model yang telah disetel sepenuhnya.
PEFT terintegrasi dengan Transformers untuk pelatihan dan inferensi model yang mudah, Diffuser untuk mengelola berbagai adaptor dengan mudah, dan Accelerate untuk pelatihan terdistribusi dan inferensi untuk model yang sangat besar.
Tip
Kunjungi organisasi PEFT untuk membaca tentang metode PEFT yang diterapkan di perpustakaan dan melihat buku catatan yang menunjukkan cara menerapkan metode ini pada berbagai tugas hilir. Klik tombol "Tonton repo" di halaman organisasi untuk diberitahu tentang metode dan buku catatan yang baru diterapkan!
Periksa bagian Referensi API Adaptor PEFT untuk daftar metode PEFT yang didukung, dan baca Panduan Konsep Adaptor, Petunjuk lunak, dan IA3 untuk mempelajari lebih lanjut tentang cara kerja metode ini.
Instal PEFT dari pip:
pip install peft
Siapkan model untuk pelatihan dengan metode PEFT seperti LoRA dengan menggabungkan model dasar dan konfigurasi PEFT dengan get_peft_model
. Untuk model bigscience/mt0-large, Anda hanya melatih 0,19% parameter!
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config , get_peft_model , LoraConfig , TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig (
task_type = TaskType . SEQ_2_SEQ_LM , inference_mode = False , r = 8 , lora_alpha = 32 , lora_dropout = 0.1
)
model = AutoModelForSeq2SeqLM . from_pretrained ( model_name_or_path )
model = get_peft_model ( model , peft_config )
model . print_trainable_parameters ()
"trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19151053100118282"
Untuk memuat model PEFT untuk inferensi:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
Ada banyak manfaat menggunakan PEFT, namun yang utama adalah penghematan besar dalam komputasi dan penyimpanan, sehingga PEFT dapat diterapkan pada banyak kasus penggunaan berbeda.
Pertimbangkan persyaratan memori untuk melatih model berikut pada kumpulan data seharusnya/raft/twitter_complaints dengan GPU A100 80 GB dengan RAM CPU lebih dari 64 GB.
Model | Penyempurnaan Penuh | PEFT-LoRA PyTorch | PEFT-LoRA DeepSpeed dengan Pembongkaran CPU |
---|---|---|---|
bigscience/T0_3B (param 3B) | GPU 47,14 GB/CPU 2,96 GB | GPU 14,4 GB/CPU 2,96 GB | GPU 9,8 GB/CPU 17,8 GB |
bigscience/mt0-xxl (param 12B) | GPU OOM | GPU 56 GB/CPU 3 GB | GPU 22 GB/CPU 52 GB |
bigscience/bloomz-7b1 (param 7B) | GPU OOM | GPU 32 GB/CPU 3,8 GB | GPU 18,1 GB/CPU 35 GB |
Dengan LoRA Anda dapat menyempurnakan sepenuhnya model parameter 12B yang mungkin akan kehabisan memori pada GPU 80 GB, dan menyesuaikan serta melatih model parameter 3B dengan nyaman. Jika Anda melihat performa model parameter 3B, performa ini sebanding dengan model yang telah disempurnakan sepenuhnya dengan hanya menggunakan sedikit memori GPU.
Nama Pengiriman | Ketepatan |
---|---|
Garis dasar manusia (crowdsourced) | 0,897 |
Flan-T5 | 0,892 |
lora-t0-3b | 0,863 |
Tip
Performa model bigscience/T0_3B tidak dioptimalkan pada tabel di atas. Anda dapat memaksimalkan kinerjanya dengan bermain-main dengan templat instruksi masukan, hyperparameter LoRA, dan hyperparameter terkait pelatihan lainnya. Ukuran pos pemeriksaan akhir model ini hanya 19 MB dibandingkan dengan 11 GB model bigscience/T0_3B penuh. Pelajari lebih lanjut tentang keuntungan melakukan finetuning dengan PEFT dalam postingan blog ini.
Kuantisasi adalah metode lain untuk mengurangi kebutuhan memori suatu model dengan merepresentasikan data dalam presisi yang lebih rendah. Ini dapat dikombinasikan dengan metode PEFT untuk mempermudah pelatihan dan memuat LLM untuk inferensi.
PEFT dapat membantu Anda menghemat penyimpanan dengan menghindari penyesuaian model secara menyeluruh pada setiap tugas atau kumpulan data hilir. Dalam banyak kasus, Anda hanya menyempurnakan sebagian kecil parameter model dan setiap pos pemeriksaan hanya berukuran beberapa MB (bukan GB). Adaptor PEFT yang lebih kecil ini menunjukkan kinerja yang sebanding dengan model yang sepenuhnya disempurnakan. Jika Anda memiliki banyak kumpulan data, Anda dapat menghemat banyak penyimpanan dengan model PEFT dan tidak perlu khawatir akan terjadinya bencana lupa atau overfitting pada tulang punggung atau model dasar.
PEFT didukung secara luas di seluruh ekosistem Hugging Face karena efisiensi besar yang dihasilkannya dalam pelatihan dan inferensi.
Proses difusi berulang menghabiskan banyak memori sehingga menyulitkan pelatihan. PEFT dapat membantu mengurangi kebutuhan memori dan mengurangi ukuran penyimpanan pos pemeriksaan model akhir. Misalnya, pertimbangkan memori yang diperlukan untuk melatih model Difusi Stabil dengan LoRA pada GPU A100 80 GB dengan RAM CPU lebih dari 64 GB. Ukuran pos pemeriksaan model akhir hanya 8,8 MB!
Model | Penyempurnaan Penuh | PEFT-LoRA | PEFT-LoRA dengan Pos Pemeriksaan Gradien |
---|---|---|---|
CompVis/difusi-stabil-v1-4 | GPU 27,5 GB/CPU 3,97 GB | GPU 15,5 GB/CPU 3,84 GB | GPU 8,12 GB/CPU 3,77 GB |
Tip
Lihatlah skrip pelatihan example/lora_dreambooth/train_dreambooth.py untuk mencoba melatih model Difusi Stabil Anda sendiri dengan LoRA, dan bermain-main dengan Ruang smangrul/peft-lora-sd-dreambooth yang berjalan pada instans T4. Pelajari lebih lanjut tentang integrasi PEFT di Diffusers dalam tutorial ini.
Accelerate adalah perpustakaan untuk pelatihan terdistribusi dan inferensi pada berbagai pengaturan pelatihan dan perangkat keras (GPU, TPU, Apple Silicon, dll.). Model PEFT bekerja dengan Accelerate secara langsung, sehingga sangat memudahkan untuk melatih model yang sangat besar atau menggunakannya untuk inferensi pada perangkat keras konsumen dengan sumber daya terbatas.
PEFT juga dapat diterapkan pada pelatihan LLM dengan komponen RLHF seperti ranker dan kebijakan. Mulailah dengan membaca:
Gunakan Ruang ini atau lihat dokumen untuk mengetahui model mana yang secara resmi mendukung metode PEFT. Meskipun Anda tidak melihat model tercantum di bawah, Anda dapat mengonfigurasi konfigurasi model secara manual untuk mengaktifkan PEFT pada suatu model. Baca panduan arsitektur transformator baru untuk mempelajari caranya.
Jika Anda ingin berkontribusi pada PEFT, silakan lihat panduan kontribusi kami.
Untuk menggunakan? PEFT dalam publikasi Anda, silakan kutip dengan menggunakan entri BibTeX berikut.
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}