คุณตัดสินใจ fine-tune โมเดล 7B ด้วยข้อมูลของคุณเอง แล้วก็มาเจอทางแยกจริงครั้งแรก นั่นคือชื่อวิธีสามชื่อ แต่ละชื่อมีคำตอบต่างกัน เอกสารของ Unsloth บอกให้เริ่มด้วย QLoRA Axolotl บอกว่าขึ้นอยู่กับฮาร์ดแวร์ของคุณ บล็อกโพสต์ที่คุณผ่านตามาครึ่งหนึ่งบอกว่า "ใช้ LoRA สำหรับงานส่วนใหญ่" แล้วก็จบไป ในขณะเดียวกันคุณกำลังจ้อง GPU เพียงตัวเดียว ไม่แน่ใจด้วยซ้ำว่ามันจะรันวิธีใดวิธีหนึ่งได้หรือไม่
นี่คือการตัดสินใจที่อยู่เหนือทุกอย่างที่ตามมา วิธีที่คุณเลือกจะกำหนดงบ VRAM งบ VRAM จะเลือกฮาร์ดแวร์ และฮาร์ดแวร์จะกำหนดค่าใช้จ่าย เลือกวิธีผิดแล้วคุณจะเสียเงินไปกับหน่วยความจำ GPU ที่ไม่ต้องการ หรือเสียเวลาทั้งสุดสัปดาห์ไล่ตามอาการแครชจากหน่วยความจำไม่พอบนการ์ดที่ไม่มีทางรองรับงานนี้ได้อยู่แล้ว
มาสรุปกันให้ชัด นี่คือความแตกต่างที่แท้จริงระหว่าง LoRA, QLoRA และ full fine-tuning แต่ละแบบมีค่าใช้จ่ายด้านหน่วยความจำและคุณภาพอย่างไร และกฎสำหรับเลือกวิธีที่เหมาะกับกรณีของคุณ
เวอร์ชันสั้น
- ค่าเริ่มต้นคือ QLoRA สำหรับการ fine-tune บน GPU เดียวส่วนใหญ่ ให้เริ่มด้วย QLoRA ตารางของ Axolotl ระบุว่าการรัน QLoRA สำหรับโมเดล 7-8B ใช้ VRAM ประมาณ 10-14 GB โดยสมมติว่า context สั้นและ micro-batch เล็ก ซึ่งเหมาะกับการ์ดระดับผู้บริโภคหรือ prosumer ขนาด 12-24 GB จำนวนมาก แต่ไม่ใช่ทุกการ์ดที่มี VRAM ต่ำ เลือกใช้ LoRA แบบธรรมดาเมื่อมีหน่วยความจำเหลือเฟือและต้องการขั้นตอนที่เร็วขึ้น สงวน full fine-tuning ไว้สำหรับกรณีที่จำเป็นจริงๆซึ่งพบได้น้อย
- ช่องว่างของ VRAM นั้นมาก การ fine-tune โมเดล 7B ใช้ VRAM ประมาณ 60-80 GB สำหรับ full fine-tuning, 16-24 GB สำหรับ LoRA และ 10-14 GB สำหรับ QLoRA ตามข้อมูลที่ Axolotl เผยแพร่ ความแตกต่างนี้คือเหตุผลทั้งหมดที่ทำให้วิธีที่ประหยัดพารามิเตอร์เหล่านี้มีอยู่
- การสูญเสียคุณภาพขึ้นอยู่กับงาน ไม่ใช่ค่าคงที่ ในงานส่วนใหญ่ที่เกี่ยวกับการทำตามคำสั่งและผลลัพธ์ที่มีโครงสร้าง LoRA และ QLoRA ทำได้ใกล้เคียงกับการ fine-tuning แบบเต็มรูปแบบเพียงไม่กี่เปอร์เซ็นต์ ช่องว่างจะกว้างขึ้นในงานที่ต้องใช้การให้เหตุผลที่ซับซ้อนอย่างคณิตศาสตร์ นั่นคือจุดที่การ fine-tuning แบบเต็มรูปแบบยังคุ้มค่ากับต้นทุน
- การ fine-tuning แบบเต็มรูปแบบเป็นข้อยกเว้น ไม่ใช่ค่าพื้นฐาน คุณจะเลื่อนไปใช้วิธีนี้เมื่อมีการเปลี่ยนแปลงของการกระจายข้อมูลขนาดใหญ่ การเปลี่ยนแปลงระดับ pre-training หรืองานที่การให้เหตุผลมีความสำคัญและ benchmark แสดงให้เห็นช่องว่างชัดเจน ไม่ใช่ใช้เป็นตัวเลือกปลอดภัยตามค่าเริ่มต้น
สิ่งที่คู่มือนี้ไม่ครอบคลุม
นี่คือคู่มือการเลือกวิธีการ ไม่ใช่การสอนวิธีการนำไปใช้จริง มีบางสิ่งที่จงใจไม่รวมอยู่ในเนื้อหานี้:
- รูปแบบต่างๆ ของ LoRA (DoRA, VeRA, LoRA+) วิธีหลักทั้งสามคือการตัดสินใจที่สำคัญเป็นอันดับแรก ส่วนรูปแบบต่างๆ คือการปรับปรุงที่คุณจะนำมาใช้ในภายหลัง
- โค้ดแบบทีละขั้นตอน ที่นี่ไม่มีคำสั่งติดตั้งหรือสคริปต์การฝึกโมเดล นั่นเป็นคู่มือปฏิบัติแยกต่างหาก ซึ่งไม่ได้ครอบคลุมในที่นี้
- การฝึกโมเดลแบบ Multi-GPU (FSDP, DeepSpeed ZeRO) และ การเตรียมชุดข้อมูล: ทั้งสองเป็นหัวข้อใหญ่ในตัวเอง
- RLHF, DPO และการปรับให้เหมาะสมตามความชอบ สิ่งเหล่านี้เป็นกลุ่มเป้าหมายที่แตกต่างจาก supervised fine-tuning
- ควรทำ fine-tune หรือไม่เลย ถ้าคุณไม่แน่ใจว่า fine-tuning เป็นเครื่องมือที่ถูกต้องเมื่อเทียบกับ retrieval การเปรียบเทียบนั้นควรมีคำตอบของตัวเองก่อนที่คุณจะเลือกวิธีการที่นี่
อะไรที่แตกต่างกันจริง ๆ ระหว่าง LoRA, QLoRA และ Full Fine-Tuning?
Full fine-tuning จะอัปเดตทุกพารามิเตอร์ในโมเดล ส่วน LoRA จะแช่แข็งโมเดลฐานไว้และฝึกเมทริกซ์อะแดปเตอร์แบบ low-rank ขนาดเล็กแทน (ประมาณ 0.1-2% ของจำนวนพารามิเตอร์ทั้งหมด) QLoRA เพิ่มอีกหนึ่งขั้นตอนต่อจาก LoRA คือการควอนไทซ์โมเดลฐานที่แช่แข็งไว้ให้เหลือความละเอียด 4 บิต (โดยใช้ชนิดข้อมูลที่เรียกว่า NF4, NormalFloat) เพื่อให้โมเดลฐานใช้หน่วยความจำน้อยลงมากขณะที่คุณฝึกอะแดปเตอร์
วิธีที่ชัดเจนที่สุดในการจดจำทั้งสามอย่างนี้คือมองเป็นบันได แต่ละขั้นจะขจัดต้นทุนหนึ่งอย่างออกจากขั้นที่อยู่ด้านล่าง
การไฟน์จูนแบบเต็มรูปแบบ เป็นขั้นล่างสุด และหนักที่สุด ทุกน้ำหนักสามารถฝึกได้ ดังนั้นออปติไมเซอร์ต้องติดตามเกรเดียนต์และสถานะออปติไมเซอร์สำหรับทุกพารามิเตอร์ในโมเดล นั่นคือจุดที่หน่วยความจำถูกใช้ไป และเราจะพูดถึงคณิตศาสตร์ในส่วนถัดไป
LoRA (Low-Rank Adaptation) จะแช่แข็งน้ำหนักดั้งเดิมและฉีดเมทริกซ์ขนาดเล็กที่ฝึกได้เข้าไปในเลเยอร์ของโมเดล มีเพียงเมทริกซ์เหล่านั้นที่เรียนรู้ ส่วนโมเดลฐานก็แค่ติดไปด้วย เปเปอร์ LoRA รายงานว่าวิธีนี้ลดพารามิเตอร์ที่ฝึกได้ลงถึง 10,000x สำหรับโมเดลขนาด 175B และลดหน่วยความจำ GPU ลงประมาณ 3x ที่สเกลนั้น ในขณะที่ให้ผลลัพธ์ "เทียบเท่าหรือดีกว่าการไฟน์จูนในด้านคุณภาพโมเดล" กับโมเดลที่ผู้เขียนทดสอบ เพราะมีพารามิเตอร์เปลี่ยนแปลงน้อยมาก ผลลัพธ์ที่ฝึกได้จึงมีขนาดเล็กมาก บล็อก บล็อก PEFT ให้จุดอ้างอิงที่มีประโยชน์สองจุด คือเช็คพอยต์เต็มขนาด 40 GB สำหรับ bigscience/mt0-xxl และตัวอย่าง LoRA แยกอีกกรณีที่แอดแดปเตอร์ที่บันทึกไว้มีขนาดเพียง 19 MB ประเด็นก็ยังเหมือนเดิม เช็คพอยต์ PEFT มักมีขนาดเล็กมากเมื่อเทียบกับเช็คพอยต์โมเดลแบบเต็ม
QLoRA นำ LoRA มาแล้วลดขนาดส่วนที่ LoRA ไม่ได้แตะ นั่นคือฐานที่ถูกแช่แข็ง การควอนไทซ์น้ำหนักเหล่านั้นเป็น NF4 แบบ 4 บิต หมายความว่าโมเดลฐานใช้หน่วยความจำเพียงเสี้ยวหนึ่งของที่จะต้องใช้ที่ 16 บิต ในขณะที่แอดแดปเตอร์ยังคงฝึกด้วยความละเอียดเต็มที่อยู่ด้านบน เปเปอร์ QLoRA อธิบาย NF4 ว่า "เหมาะสมที่สุดในทางทฤษฎีสารสนเทศสำหรับน้ำหนักที่มีการแจกแจงแบบปกติ" ซึ่งเป็นวิธีพูดที่ชัดเจนว่าการแทนค่าแบบ 4 บิตถูกเลือกให้สอดคล้องกับวิธีที่น้ำหนักของโมเดลกระจายตัวจริง ๆ ดังนั้นคุณจะสูญเสียน้อยกว่าที่การปัดเศษ 4 บิตแบบตรงไปตรงมาจะทำให้เสียไป
นั่นคือสแต็กแนวคิดทั้งหมด การไฟน์จูนแบบเต็มรูปแบบฝึกทุกอย่าง LoRA แช่แข็งฐานและฝึกแอดแดปเตอร์ QLoRA บีบอัดฐานที่แช่แข็งและฝึกแอดแดปเตอร์ ทุกอย่างที่เหลือ (VRAM คุณภาพ เมื่อใดควรใช้ตัวไหน) ล้วนตามมาจากสามตัวเลือกนี้
แต่ละวิธีต้องใช้ VRAM เท่าไหร่?
สำหรับโมเดล 7B ตัวเลขประมาณคือ 60-80 GB สำหรับ full fine-tuning, 16-24 GB สำหรับ LoRA และ 10-14 GB สำหรับ QLoRA ตามข้อมูลจาก ตารางที่เผยแพร่โดย Axolotl. ผลลัพธ์ในทางปฏิบัติคือ QLoRA มักจะพอดีกับ GPU สำหรับผู้บริโภคหรือระดับโปรซูเมอร์เดี่ยวขนาด 12-24 GB จำนวนมากในการตั้งค่าคอนเท็กซ์สั้นและแบทช์ขนาดเล็ก ในขณะที่ full fine-tuning ของโมเดล 7B ต้องใช้หน่วยความจำระดับดาต้าเซ็นเตอร์หรือการตั้งค่าแบบมัลติ GPU
ทำไม full fine-tuning จึงหนักขนาดนี้? คำนวณสั้นๆ เมื่อคุณเทรนทุกพารามิเตอร์ GPU จะเก็บสามสิ่งต่อพารามิเตอร์ คือ ค่า weight เอง, gradient ของมัน, และสถานะของ optimizer (optimizer แบบ Adam จะเก็บค่าเพิ่มอีกสองค่าต่อ weight) นี่คือเหตุผลที่ค่าใช้จ่ายด้านหน่วยความจำสูงกว่าขนาดโมเดลเองหลายเท่า LoRA จะแช่แข็ง base ไว้ จึงต้องจ่ายภาระ gradient-and-optimizer นี้เฉพาะกับเมทริกซ์ adapter ขนาดเล็กเท่านั้น QLoRA ยังเก็บ base ที่แช่แข็งไว้ในรูปแบบ 4-bit แทน 16-bit ซึ่งช่วยลดต้นทุนที่เหลือที่ใหญ่ที่สุดลงไปอีก
นี่คือการเปรียบเทียบทั้งสามวิธีในแต่ละขนาดโมเดล โดยอ้างอิงจากเอกสารของ Axolotl และเปเปอร์ QLoRA สำหรับตัวเลขของโมเดลขนาดใหญ่:
| วิธี | โมเดล 1-3B | โมเดล 7-8B | โมเดล 70B+ |
|---|---|---|---|
| Full fine-tuning (bf16 + AdamW) | 24-32 GB | 60-80 GB | 4-8x 80 GB |
| LoRA (bf16) | 8-12 GB | 16-24 GB | 2x 80 GB |
| QLoRA (4-bit NF4) | 6-8 GB | 10-14 GB | 40-48 GB |
แหล่งที่มา: เอกสารของ Axolotl สำหรับทั้งสามวิธีในทุกขนาดโมเดล; งานวิจัย QLoRA รายงานอย่างเป็นอิสระว่าได้ทำการ fine-tune โมเดล 65B บน GPU ขนาด 48 GB เพียงตัวเดียว "ในขณะที่ยังคงประสิทธิภาพของงานเทียบเท่า full 16-bit finetuning" ซึ่งสอดคล้องกับตัวเลข QLoRA ของโมเดล 70B บล็อกของ Hugging Face เกี่ยวกับ บล็อกเกี่ยวกับการควอนไทซ์ 4 บิต แสดงให้เห็นแยกกันว่าโมเดล 13B ที่ฝึกบน T4 ขนาด 16 GB เพียงตัวเดียว และโมเดล 33B บน GPU ขนาด 24 GB ด้วย QLoRA นี่คือจุดอ้างอิงที่มีประโยชน์หากเป้าหมายของคุณอยู่ระหว่างแถวของตาราง
ตัวเลขเดียวที่ควรจดจำ: โมเดล 65B บนการ์ดเดียวขนาด 48 GB นี่คือผลลัพธ์เด่นของ QLoRA และมันเปลี่ยนความหมายของคำว่า "ฉันมี GPU แค่ตัวเดียว" ไปเลย
ข้อสรุปของส่วนนี้: ลำดับการใช้ VRAM คือ full >> LoRA > QLoRA และช่องว่างจาก full ไปยัง QLoRA นั้นมากพอที่จะย้ายงานจากแร็ค GPU หลายตัวไปยังการ์ดเดียวได้
LoRA หรือ QLoRA ทำให้คุณภาพลดลงจริงหรือไม่?
สำหรับงานส่วนใหญ่ที่เกี่ยวกับการปฏิบัติตามคำสั่งและผลลัพธ์ที่มีโครงสร้าง LoRA และ QLoRA ให้ผลลัพธ์ใกล้เคียงกับ full fine-tuning เพียงไม่กี่เปอร์เซ็นต์ ช่องว่างจะกว้างขึ้นในงานที่ต้องใช้การให้เหตุผลที่ซับซ้อน (โดยเฉพาะคณิตศาสตร์) ซึ่ง full fine-tuning ยังคงนำอย่างชัดเจน ดังนั้นคำตอบจึงไม่ใช่ "ใกล้เคียงกัน" หรือ "แย่กว่า" แต่ขึ้นอยู่กับประเภทของงาน และประเภทของงานจะบอกคุณว่าคุณอยู่ฝั่งไหนของเส้นแบ่งนั้น
หลักฐานที่ชัดเจนที่สุดตามลักษณะงานมาจากการศึกษาของ Anyscale ในเดือนกันยายน 2023 เกี่ยวกับ การศึกษาของ Anyscale เกี่ยวกับ Llama 2 ใน ViGGO ซึ่งเป็นงานแสดงฟังก์ชันเชิงโครงสร้าง LoRA ทำได้ประมาณ 95% ของความแม่นยำของการไฟน์จูนแบบเต็มรูปแบบในโมเดล 7B และ 13B ซึ่งเป็นช่องว่าง 2% ที่ผู้เขียนมองว่าเป็นการแลกเปลี่ยนที่ยอมรับได้ ในการสร้าง SQL LoRA ทำได้ใกล้เคียงกับการไฟน์จูนแบบเต็มรูปแบบมาก และโมเดล LoRA 13B เอาชนะโมเดล 7B ที่ไฟน์จูนแบบเต็มรูปแบบได้จริง ใน GSM8k ซึ่งเป็นเบนช์มาร์กด้านการให้เหตุผลทางคณิตศาสตร์ LoRA มีประสิทธิภาพต่ำกว่าการไฟน์จูนแบบเต็มรูปแบบอย่างสม่ำเสมอทั้งใน 7B และ 13B โดยช่องว่างจะแคบลงเฉพาะที่ 70B เท่านั้น ทีม Anyscale ตีความว่าการประมาณค่าแบบ low-rank ของ LoRA อาจไม่สามารถจับทักษะที่ซับซ้อนอย่างคณิตศาสตร์แบบหลายขั้นตอนได้
ข้อควรระวังหนึ่งเกี่ยวกับตัวเลขเหล่านี้ การศึกษานี้ทำกับ Llama 2 ในเดือนกันยายน 2023 รูปแบบตามประเภทงาน (เอาต์พุตที่มีโครงสร้างใกล้เคียงกัน การให้เหตุผลที่ซับซ้อนห่างกันมากขึ้น) เป็นข้อสรุปที่ยั่งยืนและยังคงเป็นจริงในแก่นแท้ตั้งแต่นั้นมา แต่เปอร์เซ็นต์ที่แน่นอนอาจแตกต่างกันในโมเดลพื้นฐานที่ใหม่กว่าอย่าง Llama 3 หรือ Mistral ดังนั้นควรมองตัวเลขเหล่านี้เป็นรูปแบบของการแลกเปลี่ยน ไม่ใช่การรับประกันสำหรับโมเดลของคุณ
เรื่องคุณภาพของ QLoRA เป็นเรื่องของตัวเอง เอกสาร QLoRA รายงานว่า Guanaco ซึ่งเป็นโมเดล 65B ที่ฝึกด้วย QLoRA มีประสิทธิภาพถึง 99.3% ของ ChatGPT บนเบนช์มาร์ก Vicuna แข็งแกร่ง แต่ผูกติดกับเบนช์มาร์กเฉพาะนั้นและการเปรียบเทียบในปี 2023 นั้น ไม่ใช่การอ้างทั่วไปว่า "QLoRA เทียบเท่า ChatGPT" เมื่อเทียบกับ LoRA แบบธรรมดา Axolotl อธิบายว่า QLoRA มี "ความเสื่อมเล็กน้อยจากสัญญาณรบกวนของการควอนไทซ์" ฐานแบบ 4 บิตทำให้เกิดข้อผิดพลาดเล็กๆ ที่ฐานความละเอียดเต็มของ LoRA ไม่มี สำหรับงานส่วนใหญ่สิ่งนี้มองไม่เห็น แต่สำหรับงานที่อ่อนไหวต่อการเปลี่ยนแปลงความละเอียดเล็กๆ นี่คือสิ่งที่ควรตรวจสอบมากกว่าที่จะสมมติเอา
เคล็ดลับ: ความประหลาดใจด้านคุณภาพที่พบบ่อยที่สุดไม่ใช่ QLoRA เทียบกับ LoRA แต่เป็นโมเดลที่ผ่านการไฟน์จูนแล้วออกมาแย่กว่าโมเดลพื้นฐานที่คุณเริ่มต้นไว้ โดยปกติหมายความว่าการฝึกทำสิ่งที่คุณไม่ได้ตั้งใจ: ก้าวร้าวเกินไปกับชุดข้อมูลที่แคบ หรือประเมินเฉพาะงานใหม่ในขณะที่ความสามารถทั่วไปถดถอยลงอย่างเงียบๆ ทดสอบโมเดลที่ไฟน์จูนแล้วเสมอด้วยพรอมป์ไม่กี่ตัวที่อยู่นอกการกระจายข้อมูลฝึกของคุณก่อนที่จะเชื่อถือมัน การถดถอยที่นั่นคือสัญญาณให้ถอยกลับ ไม่ใช่ปล่อยใช้งาน
ข้อสรุปของส่วนนี้: ความเท่าเทียมด้านคุณภาพขึ้นอยู่กับงาน เอาต์พุตที่มีโครงสร้างและการทำตามคำสั่งปลอดภัยสำหรับ LoRA/QLoRA การให้เหตุผลที่ซับซ้อนคือจุดที่การไฟน์จูนแบบเต็มรูปแบบยังคุ้มค่ากับต้นทุน
คุณควรเลือกวิธีการใดเมื่อใด?
เริ่มต้นด้วย QLoRA สำหรับการไฟน์จูนแบบ GPU เดียวส่วนใหญ่ อัปเกรดไปที่ LoRA แบบธรรมดาเมื่อคุณมีพื้นที่ VRAM เหลือและต้องการขั้นตอนที่เร็วขึ้นหรือเพดานคุณภาพที่สูงขึ้นเล็กน้อย สงวนการไฟน์จูนแบบเต็มรูปแบบไว้สำหรับกรณีที่จำเป็นจริงๆ: การเปลี่ยนแปลงการกระจายข้อมูลขนาดใหญ่ การเปลี่ยนแปลงระดับพรีเทรน หรืองานที่การให้เหตุผลมีความสำคัญซึ่งช่องว่างของเบนช์มาร์กเป็นเรื่องจริง กำหนดทิศทางด้วยปัจจัยสามอย่างตามลำดับ: VRAM ที่มี ประเภทงานและข้อกำหนดคุณภาพ จากนั้นความเร็ว
นี่คือแนวทางในรูปแบบ "ทำแบบนี้ ไม่ใช่แบบนั้น":
1. ตรวจสอบ VRAM ของคุณก่อน ถ้าคุณใช้การ์ดเดียวที่มี VRAM 24 GB หรือน้อยกว่า (GPU สำหรับผู้ใช้ทั่วไปและ prosumer ส่วนใหญ่) QLoRA คือวิธีเริ่มต้นของคุณ เพราะเป็นวิธีเดียวจากสามวิธีที่รองรับโมเดล 7B ได้อย่างน่าเชื่อถือในขนาดนี้ อย่าเลือก full fine-tuning บนการ์ดสำหรับผู้ใช้ทั่วไปเพียงตัวเดียว ตารางข้างต้นบอกคุณแล้วว่างาน 7B จะไม่พอดี และคุณจะเสียเวลาทั้งสัปดาห์เพื่อเรียนรู้เรื่องนี้ด้วยวิธีที่ยากลำบาก
2. จากนั้นตรวจสอบงานของคุณและมาตรฐานคุณภาพ ถ้างานของคุณคือการทำตามคำสั่ง (instruction-following) เอาต์พุตที่มีโครงสร้าง SQL หรือการปรับใช้กับโดเมนทั่วไป หลักฐานจาก Anyscale บอกว่า LoRA และ QLoRA ให้คุณภาพที่ใกล้เคียงกับแบบเต็มรูปแบบ ให้คงค่าเริ่มต้นไว้ แต่ถ้างานของคุณเน้นการให้เหตุผลอย่างมาก (คณิตศาสตร์หลายขั้นตอน ห่วงโซ่ตรรกะที่ซับซ้อน) และคุณภาพต้องไม่มีการต่อรอง นั่นคือเหตุผลแรกที่แท้จริงในการพิจารณาขยับไปใช้ full fine-tuning เพราะเป็นประเภทงานเดียวที่ผลการทดสอบมาตรฐานแสดงช่องว่างที่สอดคล้องกันอย่างต่อเนื่อง
3. จากนั้นพิจารณาความเร็ว QLoRA แลกความเร็วต่อสเต็ปบางส่วนเพื่อประหยัดหน่วยความจำ เพราะฐานแบบ 4-bit ต้องถูก dequantize แบบเรียลไทม์ ถ้าคุณมี VRAM พอสำหรับรัน LoRA แบบธรรมดา (16-24 GB สำหรับโมเดล 7B) คุณจะได้สเต็ปที่เร็วขึ้นและหลีกเลี่ยงสัญญาณรบกวนจากการควอนไทซ์ ทำให้ LoRA เป็นตัวเลือกที่ดีกว่าเมื่อหน่วยความจำไม่ใช่ข้อจำกัดหลักและคุณต้องทำการทดลองซ้ำบ่อยๆ
แล้วเมื่อไหร่ is full fine-tuning คือคำตอบที่ถูกต้องหรือไม่? คำแนะนำของ Axolotl ตรงไปตรงมา นั่นคือมันจำเป็นสำหรับ pre-training และเป็นตัวเลือกที่ใช้ "เมื่อคุณมีหน่วยความจำ GPU มากเพียงพอ หรือมีการตั้งค่าแบบ multi-GPU และต้องการประสิทธิภาพสูงสุด" นอกเหนือจากเงื่อนไขเหล่านั้น (และสำหรับ fine-tuning ส่วนใหญ่ในทางปฏิบัติ ซึ่งคือการปรับโมเดลที่มีอยู่ให้เข้ากับพฤติกรรมหรือโดเมนเฉพาะ) วิธีที่ประหยัดพารามิเตอร์จะให้คุณภาพส่วนใหญ่โดยใช้ฮาร์ดแวร์เพียงเสี้ยวเดียว
Unsloth ระบุค่าเริ่มต้นไว้อย่างตรงไปตรงมาว่า
"เราแนะนำให้เริ่มต้นด้วย QLoRA เพราะเป็นหนึ่งในวิธีที่เข้าถึงได้ง่ายและมีประสิทธิภาพมากที่สุดสำหรับการฝึกโมเดล"
นั่นคือหลักการ ใช้ QLoRA เป็นค่าเริ่มต้น ขยับไปใช้ LoRA เพื่อความเร็วเมื่อมีหน่วยความจำเพียงพอ และขยับไปใช้ full fine-tuning เฉพาะเมื่องานหรือขนาดของโมเดลบีบให้ต้องทำเท่านั้น
ข้อสรุปของส่วนนี้: QLoRA คือค่าเริ่มต้น LoRA คือการอัปเกรดเพื่อความเร็วและพื้นที่เผื่อ ส่วน full fine-tuning คือข้อยกเว้นที่ต้องมีเหตุผลรองรับ เช่น การเปลี่ยนแปลงของการกระจายข้อมูล การเทรนล่วงหน้า หรือการวัดผลด้านการให้เหตุผล
คนส่วนใหญ่เข้าใจผิดอะไรเกี่ยวกับวิธีการ fine-tuning?
ความเข้าใจผิดสองอย่างเป็นสาเหตุของวันหยุดสุดสัปดาห์ที่เสียเปล่าส่วนใหญ่ อย่างแรกคือการมองว่า fine-tuning เป็นวิธีสอนข้อเท็จจริงใหม่ ๆ ให้กับโมเดล ทั้งที่ผลหลักของมันคือการปรับพฤติกรรม อย่างที่สองคือการสมมติว่าคุณสามารถซื้อคุณภาพได้ด้วยการหมุนปุ่มเพียงปุ่มเดียว: ว่า LoRA rank ที่สูงขึ้น หรือ full fine-tuning แทน QLoRA จะให้โมเดลที่ดีขึ้นโดยอัตโนมัติ ทั้งสองอย่างถูกครึ่งหนึ่ง ซึ่งนั่นคือเหตุผลที่มันทำให้เข้าใจผิด
Fine-tuning สอนข้อเท็จจริงใหม่ให้กับโมเดลได้จริงหรือ?
เรื่องนี้มีความเห็นที่แตกต่างกันจริง ๆ ระหว่างผู้เชี่ยวชาญ ดังนั้นควรทำความเข้าใจรายละเอียดที่ละเอียดอ่อนให้ถูกต้องมากกว่าการเลือกฝ่ายใดฝ่ายหนึ่ง คู่มือสำหรับผู้ปฏิบัติงานหลายฉบับระบุว่า "fine-tuning สอนข้อเท็จจริงใหม่" เป็นความเข้าใจผิดอันดับหนึ่ง: ประเด็นของพวกเขาคือ fine-tuning เก่งกว่ามากในการปรับวิธีที่โมเดลตอบสนอง มากกว่าการฝังข้อเท็จจริงเฉพาะที่โมเดลไม่เคยเห็นมาก่อนในช่วง pre-training ได้อย่างน่าเชื่อถือ เอกสารของ Unsloth คัดค้านเรื่องนี้โดยตรง โดยเรียกข้ออ้างที่ว่า fine-tuning ไม่สามารถสอนความรู้ใหม่ได้ว่า "ไม่จริง" และอธิบายว่า fine-tuning เป็นวิธี "ฝังและเรียนรู้ข้อมูลใหม่ที่เฉพาะเจาะจงกับโดเมน"
ทั้งสองฝ่ายถูกบางส่วน และการตีความที่ประนีประนอมคือ: fine-tuning น่าเชื่อถือในการปรับพฤติกรรมและเสริมความรู้ที่แฝงอยู่แล้วในโมเดลพื้นฐาน และสามารถเข้ารหัสรูปแบบที่เฉพาะเจาะจงกับโดเมนได้ สิ่งที่ไม่น่าเชื่อถือคือการฝังข้อเท็จจริงแยกส่วนที่ไม่มีอยู่เลยในช่วง pre-training ยิ่งเป้าหมายของคุณดูเหมือน "จำเอกสารเฉพาะนี้" มากเท่าไหร่ ก็ยิ่งมีโอกาสที่คุณกำลังใช้เครื่องมือผิดมากขึ้นเท่านั้น และ retrieval อาจตอบโจทย์คุณได้ดีกว่า ดังนั้นคำแนะนำเชิงปฏิบัติจึงยังใช้ได้แม้จะมีความเห็นต่างกัน: พึ่งพา fine-tuning สำหรับพฤติกรรมและสไตล์ แต่จงระแวงการใช้มันเป็นกลไกการฝังข้อเท็จจริง
LoRA rank ที่สูงขึ้นจะช่วยเพิ่มคุณภาพเสมอหรือไม่?
ไม่จริง และนี่คือปุ่มที่หมุนเกินได้ง่ายที่สุด สัญชาตญาณบอกว่า rank ที่สูงขึ้นให้ความจุมากขึ้นแก่ adapter ดังนั้นยิ่งมากก็ต้องยิ่งดี Databricks ทดสอบเรื่องนี้ด้วยข้อมูลเชิงประจักษ์ และพบว่าการเพิ่ม rank เป็นสองเท่า "ดูเหมือนจะไม่ส่งผลให้คุณภาพของผลลัพธ์เพิ่มขึ้นอย่างเห็นได้ชัด" สิ่งที่สร้างความแตกต่างจริง ๆ ในการทดลองของพวกเขาคือเลเยอร์ที่พวกเขาเลือกกำหนดเป้าหมาย (การปรับทุกเลเยอร์เชิงเส้นแทนที่จะเป็นแค่ attention blocks) ไม่ใช่การเพิ่มตัวเลข rank ข้อสรุปที่ควรจดจำคือ: ทุ่มความพยายามในการปรับแต่งไปที่โมดูลเป้าหมายและคุณภาพของข้อมูลก่อนที่จะทุ่มไปกับการเพิ่ม rank
คุณภาพของ LoRA เทียบเท่ากับ Full Fine-Tuning เสมอหรือไม่?
ไม่ใช่เสมอไป และงานวิจัยล่าสุดได้ระบุรูปแบบความล้มเหลวที่ชัดเจนไว้ "LoRA vs Full Fine-tuning: An Illusion of Equivalence" โดย Shuttleworth et al. พบว่าการฝึก LoRA อาจก่อให้เกิด "มิติผู้บุกรุก" (เวกเตอร์เอกฐานอันดับสูงที่ไม่พบในโมเดลที่ผ่าน full fine-tuning) และเชื่อมโยงสิ่งนี้กับการหลงลืมในสถานการณ์การเรียนรู้ต่อเนื่อง ซึ่งโมเดลเดียวกันถูกทำ fine-tuning ซ้ำแล้วซ้ำเล่า นี่เป็นข้อควรระวังที่เฉพาะเจาะจง ไม่ใช่การหักล้างแบบเหมารวม หากคุณทำ fine-tuning เพียงรอบเดียวสำหรับงานเดียว หลักฐานเรื่องความเท่าเทียมด้านคุณภาพในภาพรวมยังคงใช้ได้ แต่หากคุณทำ fine-tuning ต่อเนื่องกันหลายรอบและใส่ใจการรักษาความสามารถทั่วไปของโมเดลฐาน นี่คือรูปแบบความล้มเหลวที่ควรจับตาดู
คำถามที่พบบ่อย
LoRA, QLoRA และ Full Fine-Tuning ต่างกันอย่างไร?
Full fine-tuning จะอัปเดตทุกพารามิเตอร์ในโมเดล ส่วน LoRA จะแช่แข็งโมเดลฐานและฝึกเมทริกซ์อะแดปเตอร์แบบ low-rank ขนาดเล็กแทน ซึ่งคิดเป็นประมาณ 0.1-2% ของพารามิเตอร์ทั้งหมด QLoRA ทำสิ่งที่ LoRA ทำ และยังทำการควอนไทซ์โมเดลฐานที่แช่แข็งไว้ให้เป็นความละเอียด 4-bit NF4 ด้วย ทำให้โมเดลฐานใช้หน่วยความจำน้อยลงมากในระหว่างที่ฝึกอะแดปเตอร์ ผลลัพธ์คือลำดับขั้นการใช้หน่วยความจำที่ชัดเจน: full fine-tuning หนักที่สุด, LoRA เบากว่า, และ QLoRA เบาที่สุด
ต้องใช้ VRAM เท่าไรในการ Fine-Tune โมเดลขนาด 7B?
สำหรับโมเดลขนาด 7B ตัวเลขจาก Axolotl ระบุว่า full fine-tuning ใช้ประมาณ 60-80 GB, LoRA ใช้ 16-24 GB, และ QLoRA ใช้ 10-14 GB QLoRA เป็นวิธีเดียวจากทั้งสามที่มักจะพอดีกับ GPU สำหรับผู้บริโภคหรือระดับโปรซูเมอร์ขนาด 12-24 GB เพียงตัวเดียว ส่วน full fine-tuning ของโมเดลขนาด 7B ต้องใช้หน่วยความจำระดับดาต้าเซ็นเตอร์หรือ GPU หลายตัว
คุณภาพของ QLoRA แย่กว่า LoRA หรือ Full Fine-Tuning หรือไม่?
ขึ้นอยู่กับงาน สำหรับงานทำตามคำสั่งและเอาต์พุตที่มีโครงสร้างส่วนใหญ่ QLoRA อยู่ในระดับใกล้เคียงกับการไฟน์จูนแบบเต็มรูปแบบเพียงไม่กี่เปอร์เซ็นต์ และ Axolotl อธิบายเพียง "ความเสื่อมเล็กน้อยจากสัญญาณรบกวนของการควอนไทซ์" เมื่อเทียบกับ LoRA แบบธรรมดา ช่องว่างจะกว้างขึ้นในงานให้เหตุผลที่ซับซ้อนอย่างคณิตศาสตร์ ซึ่งการไฟน์จูนแบบเต็มรูปแบบแสดงความได้เปรียบอย่างสม่ำเสมอในการศึกษาของ Anyscale ปี 2023 เกี่ยวกับ Llama 2
การไฟน์จูนแบบเต็มรูปแบบคุ้มค่าจริงๆ เมื่อใด?
การไฟน์จูนแบบเต็มรูปแบบคุ้มค่ากับต้นทุนสำหรับการพรีเทรน การเปลี่ยนแปลงการกระจายข้อมูลขนาดใหญ่ และงานที่การให้เหตุผลมีความสำคัญซึ่งเบนช์มาร์กแสดงช่องว่างคุณภาพที่แท้จริง นี่ยังเป็นแนวทางเมื่อคุณมีหน่วยความจำ GPU มากพอหรือการตั้งค่าแบบหลาย GPU และต้องการคุณภาพสูงสุด สำหรับกรณีทั่วไป (การปรับโมเดลที่มีอยู่ให้เข้ากับพฤติกรรมหรือโดเมนที่เจาะจง) LoRA หรือ QLoRA ให้คุณภาพส่วนใหญ่ด้วยฮาร์ดแวร์เพียงเสี้ยวเดียว
Fine-tuning สอนข้อเท็จจริงใหม่ให้กับโมเดลได้จริงหรือ?
บางส่วน การไฟน์จูนน่าเชื่อถือในการกำหนดพฤติกรรมและเสริมความรู้ที่แอบแฝงอยู่ในโมเดลพื้นฐานอยู่แล้ว และสามารถเข้ารหัสรูปแบบเฉพาะโดเมนได้ มันไม่น่าเชื่อถือในการฝังข้อเท็จจริงแยกส่วนที่ไม่มีอยู่เลยในการพรีเทรน มีความเห็นที่ขัดแย้งกันอย่างแท้จริงระหว่างผู้เชี่ยวชาญในเรื่องนี้ เอกสารของ Unsloth ยืนยันว่าการไฟน์จูนสามารถสอนความรู้ใหม่ได้ ในขณะที่คู่มืออื่นๆ เรียกสิ่งนี้ว่าความเข้าใจผิดอันดับหนึ่ง และมุมมองที่ประนีประนอมคือใช้การไฟน์จูนสำหรับพฤติกรรมและสไตล์ และหันไปใช้การค้นคืนข้อมูลเมื่อเป้าหมายคือการจดจำข้อเท็จจริงที่เจาะจง
สิ่งนี้ทำให้คุณอยู่ที่ไหน
การเลือกวิธีการมาลงที่ค่าเริ่มต้นหนึ่งและทางออกฉุกเฉินสองทาง: เริ่มด้วย QLoRA ขยับไป LoRA เมื่อหน่วยความจำไม่ใช่ข้อจำกัดและคุณต้องการขั้นตอนที่เร็วขึ้น ขยับไปการไฟน์จูนแบบเต็มรูปแบบเมื่อการเปลี่ยนแปลงการกระจายข้อมูล การพรีเทรน หรือเบนช์มาร์กการให้เหตุผลบังคับให้ต้องทำเท่านั้น
เมื่อกำหนดวิธีการแล้ว การตัดสินใจต่อไปคือฮาร์ดแวร์ที่มันบ่งบอก การเลือกวิธีการของคุณเพิ่งบอกคุณว่าคุณกำลังหาการ์ดสำหรับผู้บริโภคตัวเดียวหรือหน่วยความจำระดับดาต้าเซ็นเตอร์ หากคุณต้องการเปรียบเทียบการ์ดที่เจาะจงสำหรับงาน AI เปรียบเทียบประสิทธิภาพ H100 กับ RTX 4090 ครอบคลุมเรื่องนั้น การกำหนดขนาด GPU สำหรับวิธีการที่คุณเลือก และคำแนะนำแบบทีละขั้นตอนสำหรับการรันงานฝึกเองนั้น เป็นคู่มือแยกต่างหากของตัวเอง