- เพฟต์
วิธีการปรับพารามิเตอร์แบบละเอียดที่มีประสิทธิภาพ (PEFT) ที่ล้ำสมัย
การปรับแต่งโมเดลที่ได้รับการฝึกล่วงหน้าขนาดใหญ่อย่างละเอียดมักมีค่าใช้จ่ายสูงเนื่องจากขนาดของโมเดล วิธีการปรับพารามิเตอร์แบบละเอียดที่มีประสิทธิภาพ (PEFT) ช่วยให้สามารถปรับโมเดลที่ได้รับการฝึกล่วงหน้าขนาดใหญ่เข้ากับการใช้งานดาวน์สตรีมต่างๆ ได้อย่างมีประสิทธิภาพ โดยการปรับพารามิเตอร์โมเดล (พิเศษ) จำนวนเล็กน้อยเท่านั้น แทนที่จะปรับพารามิเตอร์ของโมเดลทั้งหมด ซึ่งจะช่วยลดต้นทุนการคำนวณและการจัดเก็บลงอย่างมาก เทคนิค PEFT ที่ล้ำสมัยล่าสุดให้ประสิทธิภาพที่เทียบได้กับรุ่นที่ปรับแต่งมาอย่างดี
PEFT ถูกรวมเข้ากับ Transformers เพื่อการฝึกและการอนุมานโมเดลที่ง่ายดาย, Diffusers สำหรับการจัดการอะแดปเตอร์ต่างๆ ได้อย่างสะดวก และ Accelerate สำหรับการฝึกและการอนุมานแบบกระจายสำหรับโมเดลขนาดใหญ่จริงๆ
เคล็ดลับ
เยี่ยมชมองค์กร PEFT เพื่ออ่านเกี่ยวกับวิธีการ PEFT ที่นำมาใช้ในห้องสมุด และดูสมุดบันทึกที่สาธิตวิธีการใช้วิธีการเหล่านี้กับงานขั้นปลายที่หลากหลาย คลิกปุ่ม "ดู repos" บนหน้าองค์กรเพื่อรับการแจ้งเตือนเกี่ยวกับวิธีการและสมุดบันทึกที่นำมาใช้ใหม่!
ตรวจสอบส่วนการอ้างอิง API ของอะแดปเตอร์ PEFT เพื่อดูรายการวิธี PEFT ที่รองรับ และอ่านคำแนะนำเกี่ยวกับอะแดปเตอร์, Soft prompts และ IA3 เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานของวิธีการเหล่านี้
ติดตั้ง PEFT จาก pip:
pip install peft
เตรียมโมเดลสำหรับการฝึกด้วยวิธี PEFT เช่น LoRA โดยรวมโมเดลพื้นฐานและการกำหนดค่า PEFT ด้วย get_peft_model
สำหรับรุ่น bigscience/mt0-large คุณฝึกฝนพารามิเตอร์เพียง 0.19% เท่านั้น!
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"
หากต้องการโหลดโมเดล PEFT เพื่อการอนุมาน:
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."
การใช้ PEFT มีประโยชน์มากมาย แต่ข้อดีหลักคือการประหยัดการประมวลผลและพื้นที่เก็บข้อมูลได้มหาศาล ทำให้ PEFT ใช้ได้กับกรณีการใช้งานต่างๆ มากมาย
พิจารณาข้อกำหนดหน่วยความจำสำหรับการฝึกโมเดลต่อไปนี้บนชุดข้อมูล ought/raft/twitter_complaints ด้วย GPU A100 80GB พร้อม CPU RAM มากกว่า 64GB
แบบอย่าง | การปรับแต่งแบบเต็มรูปแบบ | PEFT-LoRA PyTorch | PEFT-LoRA DeepSpeed พร้อมการถ่าย CPU |
---|---|---|---|
bigscience/T0_3B (พารามิเตอร์ 3B) | จีพียู 47.14GB / ซีพียู 2.96GB | จีพียู 14.4GB / ซีพียู 2.96GB | จีพียู 9.8GB / ซีพียู 17.8GB |
bigscience/mt0-xxl (พารามิเตอร์ 12B) | ซูมจีพียู | จีพียู 56GB / ซีพียู 3GB | จีพียู 22GB / ซีพียู 52GB |
bigscience/bloomz-7b1 (พารามิเตอร์ 7B) | ซูมจีพียู | จีพียู 32GB / ซีพียู 3.8GB | จีพียู 18.1GB / ซีพียู 35GB |
ด้วย LoRA คุณสามารถปรับแต่งโมเดลพารามิเตอร์ 12B ได้อย่างเต็มที่ ซึ่งถ้าไม่อย่างนั้นหน่วยความจำจะหมดบน GPU ขนาด 80GB และปรับให้พอดีและฝึกฝนโมเดลพารามิเตอร์ 3B ได้อย่างสะดวกสบาย เมื่อคุณดูประสิทธิภาพของโมเดลพารามิเตอร์ 3B จะเทียบได้กับโมเดลที่ได้รับการปรับแต่งอย่างสมบูรณ์โดยใช้หน่วยความจำเพียงเศษเสี้ยวของ GPU
ชื่อผลงาน | ความแม่นยำ |
---|---|
ข้อมูลพื้นฐานของมนุษย์ (จากแหล่งข้อมูลจำนวนมาก) | 0.897 |
ประหม่า-T5 | 0.892 |
ลอรา-t0-3b | 0.863 |
เคล็ดลับ
ประสิทธิภาพของโมเดล bigscience/T0_3B ไม่ได้รับการปรับให้เหมาะสมในตารางด้านบน คุณสามารถบีบประสิทธิภาพออกมาได้มากขึ้นโดยลองใช้เทมเพลตคำสั่งอินพุต ไฮเปอร์พารามิเตอร์ LoRA และไฮเปอร์พารามิเตอร์อื่นๆ ที่เกี่ยวข้องกับการฝึกอบรม ขนาดจุดตรวจสุดท้ายของรุ่นนี้คือ 19MB เทียบกับ 11GB ของรุ่น bigscience/T0_3B เต็มรูปแบบ เรียนรู้เพิ่มเติมเกี่ยวกับข้อดีของการปรับแต่งอย่างละเอียดด้วย PEFT ในโพสต์บนบล็อกนี้
การหาปริมาณเป็นอีกวิธีหนึ่งในการลดความต้องการหน่วยความจำของแบบจำลองโดยการแสดงข้อมูลด้วยความแม่นยำที่ต่ำกว่า สามารถใช้ร่วมกับวิธี PEFT เพื่อให้ฝึกและโหลด LLM เพื่อการอนุมานได้ง่ายยิ่งขึ้น
PEFT สามารถช่วยคุณประหยัดพื้นที่จัดเก็บข้อมูลได้โดยหลีกเลี่ยงการปรับแต่งโมเดลอย่างละเอียดบนงานหรือชุดข้อมูลดาวน์สตรีมแต่ละรายการ ในหลายกรณี คุณกำลังปรับแต่งพารามิเตอร์ของโมเดลเพียงเล็กน้อยเท่านั้น และแต่ละจุดตรวจสอบจะมีขนาดเพียงไม่กี่ MB (แทนที่จะเป็น GB) อะแดปเตอร์ PEFT ขนาดเล็กเหล่านี้แสดงประสิทธิภาพที่เทียบได้กับรุ่นที่ปรับแต่งอย่างเต็มรูปแบบ หากคุณมีชุดข้อมูลจำนวนมาก คุณสามารถประหยัดพื้นที่จัดเก็บข้อมูลได้มากด้วยโมเดล PEFT และไม่ต้องกังวลกับการลืมหรือใส่แกนหลักหรือโมเดลพื้นฐานมากเกินไป
PEFT ได้รับการสนับสนุนอย่างกว้างขวางทั่วทั้งระบบนิเวศ Hugging Face เนื่องจากมีประสิทธิภาพมหาศาลในการฝึกอบรมและการอนุมาน
กระบวนการแพร่กระจายแบบวนซ้ำใช้หน่วยความจำจำนวนมาก ซึ่งทำให้ฝึกได้ยาก PEFT สามารถช่วยลดความต้องการหน่วยความจำและลดขนาดการจัดเก็บข้อมูลของจุดตรวจสอบโมเดลขั้นสุดท้ายได้ ตัวอย่างเช่น พิจารณาหน่วยความจำที่จำเป็นสำหรับการฝึกโมเดล Stable Diffusion ด้วย LoRA บน GPU A100 80GB ที่มี CPU RAM มากกว่า 64GB ขนาดจุดตรวจรุ่นสุดท้ายเพียง 8.8MB เท่านั้น!
แบบอย่าง | การปรับแต่งแบบเต็มรูปแบบ | PEFT-LoRA | PEFT-LoRA พร้อมจุดตรวจไล่ระดับ |
---|---|---|---|
CompVis/เสถียร-การแพร่กระจาย-v1-4 | จีพียู 27.5GB / ซีพียู 3.97GB | จีพียู 15.5GB / ซีพียู 3.84GB | จีพียู 8.12GB / ซีพียู 3.77GB |
เคล็ดลับ
ดูสคริปต์การฝึกอบรม example/lora_dreambooth/train_dreambooth.py เพื่อลองฝึกโมเดล Stable Diffusion ของคุณเองด้วย LoRA และลองใช้ smangrul/peft-lora-sd-dreambooth Space ที่ทำงานบนอินสแตนซ์ T4 เรียนรู้เพิ่มเติมเกี่ยวกับการรวม PEFT ใน Diffusers ในบทช่วยสอนนี้
Accelerate เป็นไลบรารีสำหรับการฝึกอบรมแบบกระจายและการอนุมานเกี่ยวกับการตั้งค่าการฝึกอบรมและฮาร์ดแวร์ต่างๆ (GPU, TPU, Apple Silicon ฯลฯ) โมเดล PEFT ทำงานร่วมกับ Accelerate ได้ตั้งแต่แกะกล่อง ทำให้สะดวกมากในการฝึกโมเดลขนาดใหญ่มาก หรือใช้สำหรับการอนุมานฮาร์ดแวร์สำหรับผู้บริโภคที่มีทรัพยากรจำกัด
PEFT ยังสามารถนำไปใช้กับการฝึกอบรม LLM ด้วยส่วนประกอบ RLHF เช่น ผู้จัดอันดับและนโยบาย เริ่มต้นด้วยการอ่าน:
ใช้ Space นี้หรือดูเอกสารเพื่อดูว่ารุ่นใดบ้างที่รองรับวิธี PEFT อย่างเป็นทางการตั้งแต่แกะกล่อง แม้ว่าคุณจะไม่เห็นโมเดลในรายการด้านล่าง แต่คุณสามารถกำหนดค่าการกำหนดค่าโมเดลด้วยตนเองเพื่อเปิดใช้งาน PEFT สำหรับโมเดลได้ อ่านคู่มือสถาปัตยกรรม Transformers ใหม่เพื่อเรียนรู้วิธีการ
หากคุณต้องการสนับสนุน PEFT โปรดดูคู่มือการมีส่วนร่วมของเรา
เพื่อใช้ ? PEFT ในสิ่งพิมพ์ของคุณ โปรดอ้างอิงโดยใช้รายการ BibTeX ต่อไปนี้
@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 }
}