LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย
ฝึกเฉพาะตัวปรับแต่งอันดับต่ำบนฐานโมเดลที่ลดความละเอียดแล้ว — ทำการปรับแต่งโมเดล 70B ได้บน GPU เดียว
LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เหตุใดจึงใช้ PEFT
การปรับแต่ง Llama 70B แบบเต็มรูปแบบต้องใช้ H100 อย่างน้อย 8 ใบ และอัปเดตพารามิเตอร์ 70 พันล้านรายการ PEFT (การปรับแต่งที่ใช้พารามิเตอร์อย่างมีประสิทธิภาพ) อัปเดตพารามิเตอร์น้อยกว่า 1% โดยให้คุณภาพใกล้เคียงกัน ช่วยประหยัดต้นทุนได้มหาศาล
LoRA: การปรับให้เข้ากับแรงก์ต่ำ
LoRA (Hu et al. 2021) ฝึกเมทริกซ์ "อะแดปเตอร์" ขนาดเล็กร่วมกับน้ำหนักฐานที่ตรึงไว้:
- เพิ่มเมทริกซ์ A x B โดย A มีขนาด dxr และ B มีขนาด rxd ส่วน r มีขนาดเล็ก (8, 16, 64)
- การส่งต่อ: y = Wx + (BA)x
- ฝึกเฉพาะ A และ B เท่านั้น ทำให้มีพารามิเตอร์น้อยลงหลายลำดับขั้น
QLoRA: LoRA แบบควอนไทซ์
QLoRA (Dettmers et al. 2023) ลดต้นทุนเพิ่มเติมด้วยการควอนไทซ์โมเดลฐานเป็น 4 บิตระหว่างการฝึก:
- โมเดลฐานอยู่ในรูปแบบ NF4 (4 บิต)
- อะแดปเตอร์ LoRA ใช้ความละเอียดสูงกว่า
- สามารถปรับแต่งโมเดล 70B บน A100/H100 เพียงใบเดียวได้
Setup with peft + transformers
# pip install peft transformers bitsandbytes
from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
'meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True, # QLoRA
device_map='auto'
)
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=['q_proj', 'v_proj'],
lora_dropout=0.05,
bias='none'
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: ~0.5% of totalTraining Loop with TRL
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
learning_rate=2e-4,
num_train_epochs=3,
output_dir='./lora-out'
)
)
trainer.train()
model.save_pretrained('./adapter')การใช้ Unsloth
Unsloth เป็นไลบรารี LoRA ที่เร็วที่สุด เร็วกว่า peft แบบดั้งเดิม 2 เท่า มี API ที่นำมาใช้แทนได้ทันที:
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name='meta-llama/Llama-3.1-8B-Instruct',
load_in_4bit=True
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj', 'gate_proj', 'up_proj', 'down_proj']
)ประมาณการต้นทุน
QLoRA บน Llama 3.1 8B พร้อมตัวอย่าง 10k รายการ:
- ประมาณ 4 ชั่วโมงบน H100 เพียงใบเดียว
- ประมาณ 5-10 ดอลลาร์สำหรับต้นทุน GPU บนคลาวด์
- ไฟล์อะแดปเตอร์: 100-300 MB
การเลือกแรงก์ r
- r = 8 — ขั้นต่ำ เหมาะกับการเปลี่ยนรูปแบบหรือสไตล์
- r = 16-32 — เหมาะกับกรณีส่วนใหญ่
- r = 64+ — เหมาะกับพฤติกรรมใหม่ที่เพิ่มขึ้นอย่างมาก และต้องการความจุมากขึ้น
โมดูลเป้าหมาย
โดยค่าเริ่มต้นให้ใช้โพรเจกชันของกลไกความสนใจ (q, v) หากต้องการความจุมากขึ้น ให้รวมเลเยอร์เชิงเส้นทั้งหมด ซึ่งจะให้คุณภาพดีขึ้นแต่มีพารามิเตอร์มากขึ้น
ไฮเปอร์พารามิเตอร์ที่สำคัญ
- อัตราการเรียนรู้ — โดยทั่วไปอยู่ที่ 1e-4 ถึง 5e-4
- จำนวนรอบการฝึก — 2-5 รอบสำหรับ SFT
- ขนาดแบตช์ — ขึ้นอยู่กับ VRAM ใช้การสะสมกราเดียนต์เพื่อจำลองแบตช์ที่ใหญ่ขึ้น
การรวมอะแดปเตอร์เข้ากับโมเดลฐาน
สำหรับการอนุมาน คุณสามารถรวม LoRA กลับเข้าไปในน้ำหนักฐานได้:
merged = model.merge_and_unload()
merged.save_pretrained('./full-model')การให้บริการ LoRA หลายชุด
vLLM รองรับการสลับ LoRA ขณะทำงานในเวลาอนุมาน ซึ่งมีประโยชน์สำหรับการปรับแต่งแยกตามลูกค้าบนโมเดลฐานที่ใช้ร่วมกัน:
llm = LLM(model='base', enable_lora=True, max_lora_rank=64)
response = llm.generate(prompt, lora_request=LoRARequest('customer-a', 1, './customer-a-adapter'))การประเมินอะแดปเตอร์
เรียกใช้ชุดประเมินของ YOUR กับโมเดลที่ปรับแต่งเสมอ บางครั้งการปรับแต่งทำให้ผลลัพธ์ในกรณีขอบแย่ลง จึงควรยอมรับการถดถอยอย่างตรงไปตรงมา
ข้อได้เปรียบของ LoRA
ข้อได้เปรียบเชิงปฏิบัติหลักของ LoRA เหนือการปรับแต่งแบบเต็มรูปแบบคืออะไร
สรุปทบทวน
LoRA + QLoRA = การปรับแต่งที่ประหยัดต้นทุน ใช้ Unsloth เพื่อความเร็ว และใช้ peft/TRL เพื่อความครอบคลุม ใช้แรงก์ 16-32 สำหรับกรณีส่วนใหญ่ ประเมินเทียบกับชุดข้อมูลอ้างอิงของคุณ
คำถามที่พบบ่อย
บทเรียน “LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย”
ฝึกเฉพาะตัวปรับแต่งอันดับต่ำบนฐานโมเดลที่ลดความละเอียดแล้ว — ทำการปรับแต่งโมเดล 70B ได้บน GPU เดียว คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เมื่อการปรับแต่งโมเดลดีกว่าการเขียนคำสั่ง
- การรวบรวมข้อมูล: เส้นทางการทำงานและการเล่นร่องรอยซ้ำ
- LoRA และ QLoRA เพื่อการปรับแต่งที่ประหยัดค่าใช้จ่าย
- การประเมินโมเดลที่ปรับแต่งเทียบกับโมเดลฐาน