ข้ามไปยังเนื้อหาหลัก
ลด 50% ทุกแพลน เวลาจำกัด เริ่มต้นที่ $2.48/mo
15 min left
AI และ Machine Learning

LoRA เทียบกับ QLoRA เทียบกับ Full Fine-Tuning: ควรใช้วิธีไหน?

B โดย Brian 15 นาทีในการอ่าน
LoRA vs QLoRA vs full fine-tuning compared by VRAM use, quality, and when each method wins

คุณตัดสินใจ 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?

Three ways to adapt a model, each with a different training footprint: full fine-tuning updates all weights with the highest training footprint, LoRA freezes the base model and trains small adapter matrices, and QLoRA trains adapters on a quantized 4-bit frozen base for the lowest VRAM use

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 เท่าไหร่?

VRAM needed by fine-tuning method and model size: full fine-tuning needs 24-32 GB for 1-3B models, 60-80 GB for 7-8B models, and 4-8x 80 GB for 70B+ models, versus much lower requirements for LoRA and QLoRA, with QLoRA fine-tuning a 65B model on a single 48 GB GPU

สำหรับโมเดล 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 GB60-80 GB4-8x 80 GB
LoRA (bf16)8-12 GB16-24 GB2x 80 GB
QLoRA (4-bit NF4)6-8 GB10-14 GB40-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 การให้เหตุผลที่ซับซ้อนคือจุดที่การไฟน์จูนแบบเต็มรูปแบบยังคุ้มค่ากับต้นทุน

คุณควรเลือกวิธีการใดเมื่อใด?

Decision tree for picking a fine-tuning method: check available VRAM first, then task type and quality requirement, then speed needs, routing to QLoRA as the default, LoRA as the speed and headroom upgrade, or full fine-tuning as the maximum-performance choice

เริ่มต้นด้วย 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 สำหรับวิธีการที่คุณเลือก และคำแนะนำแบบทีละขั้นตอนสำหรับการรันงานฝึกเองนั้น เป็นคู่มือแยกต่างหากของตัวเอง

Share

บทความเพิ่มเติมจากบล็อก

อ่านต่อ

Diagram showing Odysseus as the AI workspace layer calling Ollama as the inference engine underneath
AI และ Machine Learning

Odysseus vs Ollama อะไรที่ต่างกันจริงๆ (และทำไมคุณต้องใช้ทั้งคู่)

Odysseus และ Ollama ไม่ใช่คู่แข่งกัน ตัวหนึ่งคือพื้นที่ทำงาน AI ของคุณ อีกตัวหนึ่งรันโมเดล นี่คือวิธีที่ทั้งคู่ประกอบเข้ากันและวิธี self-host ทั้งสองตัว

Bill 11 นาทีในการอ่าน
Self-hosting an LLM versus using an API: a fixed monthly GPU bill against per-token API metering, the fixed-versus-variable cost trade-off
AI และ Machine Learning

การ self-host LLM แบบ open-weight vs API การคำนวณต้นทุนจริง

การ self-host LLM แบบ open-weight บน GPU VPS เอาชนะ API ได้เฉพาะเหนือจุดคุ้มทุนที่ solo builder ส่วนใหญ่ไม่มีวันถึง การคำนวณต้นทุนปี 2026 แยกตามโมเดล + การใช้งาน

Bill 18 นาทีในการอ่าน
A browser-based VS Code IDE with a Claude Code terminal panel running on a VPS, viewed on a tablet
AI และ Machine Learning

วิธีรัน Code Server และ Claude Code บน VPS: สภาพแวดล้อมพัฒนา AI บนเบราว์เซอร์

ตั้งค่า Code Server และ Claude Code บน Linux VPS เครื่องเดียวเพื่อสภาพแวดล้อมพัฒนาที่ช่วยด้วย AI บนเบราว์เซอร์ การกำหนดขนาด การติดตั้ง การยืนยันตัวตนแบบไม่มีจอ และ HTTPS ในขั้นตอนท

Haze 16 นาทีในการอ่าน

พร้อมติดตั้งหรือยัง? เริ่มต้น $2.48/เดือน

คลาวด์อิสระ ตั้งแต่ปี 2008 AMD EPYC, NVMe, 40 Gbps คืนเงินภายใน 14 วัน