17 คะแนน โดย GN⁺ 2024-03-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โอเพนซอร์สที่ผสาน FSDP(Fully Sharded Data Parallel) และ QLoRA(Quantization + Low-Rank Adaptation") เข้าด้วยกัน
  • สามารถทำ fine-tuning โมเดลภาษาขนาด 70b ได้อย่างมีประสิทธิภาพด้วยคอมพิวเตอร์เดสก์ท็อปทั่วไปและ GPU เกมมิงมาตรฐานเพียง 2 ใบ

เบื้องหลัง

  • แม้ฮาร์ดแวร์ระดับดาต้าเซ็นเตอร์กับ GPU เกมมิงที่ติดตั้งในคอมพิวเตอร์เดสก์ท็อปจะมีช่องว่างด้านประสิทธิภาพไม่มาก แต่ราคากลับต่างกันมาก
  • GPU เกมมิงมีหน่วยความจำน้อย จึงฝึกโมเดลภาษาขนาดใหญ่ได้ยาก
  • Answer.AI ต้องการหาวิธีแก้ปัญหานี้ด้วยการใช้ GPU เกมมิงราคาย่อมเยาเพื่อฝึกโมเดลโอเพนซอร์สที่ดีที่สุด

QLoRA: ฝึกโมเดลที่ใหญ่ขึ้นบน GPU ใบเดียว

  • QLoRA คือการผสาน quantization กับ LoRA โดยลดน้ำหนักของโมเดลเหลือ 4 บิตเพื่อลดการใช้หน่วยความจำ GPU
  • LoRA หลีกเลี่ยงข้อจำกัดด้านหน่วยความจำด้วยการไม่ฝึกทั้งโมเดลภาษาใหญ่ทั้งหมด แต่เพิ่ม adapter matrix ขนาดเล็กเข้าไปแล้วฝึกเฉพาะส่วนนั้น
  • QLoRA ทำให้สามารถฝึกโมเดล 65b บนการ์ด 48GB ได้ แต่ก็ยังไม่พอสำหรับการฝึกโมเดล 70b บน GPU เกมมิง 24GB

FSDP: ขยายขนาดการฝึกด้วย GPU หลายใบ

  • FSDP(Fully Sharded Data Parallel) กระจายพารามิเตอร์ของโมเดลไปยัง GPU หลายใบเพื่อให้ใช้งานพร้อมกันได้
  • FSDP ทำให้สามารถนำประสิทธิภาพของ DDP(Distributed Data Parallel) ไปใช้กับโมเดลขนาดใหญ่ที่ GPU ใบเดียวรับไม่ไหว
  • ตัวอย่างเช่น โมเดล 70b(พารามิเตอร์ 7 หมื่นล้านตัว) แบบไม่ทำ quantization ใช้ RAM 140GB (เพราะพารามิเตอร์แต่ละตัวเก็บเป็น 16 บิต หรือ 2 ไบต์) ซึ่งแม้แต่การ์ด H100 ของ NVIDIA (ราคาใบละประมาณ $40,000!) ก็ยังไม่พอ ต้องใช้ RAM 80GB
    • แต่ถ้าใช้ FSDP ก็สามารถรวม H100 จำนวน 4 ใบให้มี RAM รวม 320GB ได้ และประหยัดเงินไป $150000

การผสาน FSDP กับ QLoRA

  • Answer.AI ลดขนาดโมเดลด้วย QLoRA แล้วกระจายไปยังการ์ดเกมมิง 24GB หลายใบด้วย FSDP เพื่อให้ฝึกได้อย่างมีประสิทธิภาพ
  • วิธีนี้ทำให้สามารถฝึกโมเดล 70b ด้วย GPU เกมมิงทั่วไปเพียง 2 ใบได้
  • หลังจากหารือแนวคิดการผสาน FSDP กับ QLoRA ในช่วงปลายปี 2023 ก็ได้แก้ปัญหาที่จำเป็นต่าง ๆ จนสำเร็จ
  • ในกระบวนการนี้มีการนำเทคนิคและไลบรารีหลากหลายอย่างมาผสมกันใช้
    • เก็บพารามิเตอร์ที่ถูก quantize ด้วยชนิดข้อมูลเดียวกับ "Computation Type" ของโมเดล
    • gradient checkpointing ที่แทนจะเก็บกราเดียนต์ทั้งหมด ก็เก็บ activation ไว้ตาม 'checkpoint' หลายจุดของทั้งโมเดล แล้วค่อยรันขั้นตอน forward ใหม่ตามต้องการเพื่อคำนวณกราเดียนต์กลับมา
    • CPU offloading ที่เก็บ weight ไว้ใน RAM ของ CPU แทนที่จะเก็บบน GPU เมื่อไม่ได้ใช้งาน เพื่อลดหน่วยความจำ GPU ที่ต้องใช้ลงอย่างมาก
    • Flash Attention 2 : คำนวณ Attention อย่างมีประสิทธิภาพด้วย Cuda kernel ที่ปรับให้เหมาะกับหน่วยความจำ
    • ค้นพบ HQQ(Half-Quadratic Quantization) และเชื่อมให้ทำงานร่วมกับ FSDP (เร็วกว่าและแม่นยำกว่า GPTQ 50 เท่า)

วิธีใช้ FSDP/QLoRA

  • การใช้ FSDP ต้องมี GPU อย่างน้อย 2 ใบ (สามารถใช้เครื่อง dual 3090 บน Runpod ได้ในราคา $0.6 ต่อชั่วโมง)
  • ติดตั้ง Transformers, PEFT, Bitsandbytes เวอร์ชันล่าสุด (รวมถึง HQQ หากใช้งาน) จากนั้น clone รีโพซิทอรีของ Answer.AI แล้วรันตาม README
  • หากต้องการฝึก Alpaca บนการ์ด 24GB จำนวน 2 ใบ
    python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
  • ยังอยู่ในช่วงเริ่มต้นมาก (alpha/preview)
  • มีแผนจะเปิดเผยผล benchmarking ภายในไม่กี่สัปดาห์

ความเห็นของ GN⁺

  • บทความนี้น่าจะน่าสนใจมากสำหรับคนที่ทำงานในสาย AI และแมชชีนเลิร์นนิง โดยเฉพาะเพราะนำเสนอวิธีใหม่ในการฝึกโมเดลภาษาขนาดใหญ่ให้มีประสิทธิภาพ
  • หากเทคโนโลยีนี้ประสบความสำเร็จและถูกใช้อย่างแพร่หลาย ก็อาจลดกำแพงด้านต้นทุนของการวิจัยและพัฒนา AI ลงได้อย่างมาก ซึ่งอาจเป็นโอกาสสำคัญสำหรับแล็บขนาดเล็กหรือนักพัฒนาเดี่ยว
  • อย่างไรก็ตาม หากต้องการให้แนวทางนี้ถูกนำไปใช้ในวงกว้างจริง ๆ ความเสถียรและความง่ายในการใช้งานจะเป็นปัจจัยสำคัญ เนื่องจากตอนนี้ยังอยู่ในช่วงเริ่มต้น จึงต้องอาศัยการทดสอบและฟีดแบ็กจากชุมชนเพื่อปรับปรุงระบบ
  • เมื่อนำเทคโนโลยีใหม่มาใช้ ควรพิจารณาเรื่องความเข้ากันได้กับระบบเดิม ประสิทธิภาพ และต้นทุนอยู่เสมอ ข้อดีของเทคโนโลยีนี้คือช่วยให้การฝึกโมเดลขนาดใหญ่เข้าถึงได้ง่ายขึ้น แต่เพราะยังอยู่ในช่วงเริ่มต้น จึงอาจมีข้อเสียด้านความเสถียรและการสนับสนุน

1 ความคิดเห็น

 
GN⁺ 2024-03-08
ความเห็นจาก Hacker News
  • บทความนี้ยอดเยี่ยมมาก แต่ก็น่าเสียดายที่มีโอกาสใช้คำว่า 'nibble' หลายครั้งแล้วกลับพลาดไปทั้งหมด

    • มองว่าบทความน่าสนใจ แต่เสียดายที่ไม่ได้หยิบคำว่า 'nibble' มาใช้
  • ในฐานะผู้บริโภค ผมคิดว่าน่าจะสนใจมากขึ้นถ้ามีตารางแสดงว่าการปรับจูนโมเดล 70b ด้วยระบบที่ใช้ค่าน้ำหนัก 4 บิตจะใช้เวลานานแค่ไหน เช่น ขนาดโมเดล ขนาดการฝึก ต้นทุนการฝึก และคุณภาพที่คาดว่าจะลดลงจากเทคนิคนี้

    • แสดงความสนใจต่อต้นทุนสุดท้ายของการปรับจูน พร้อมขอข้อมูลละเอียด เช่น ขนาดโมเดลและต้นทุนการฝึก
  • สงสัยว่าสามารถใช้การเข้ารหัสแบบ (-1,0,1) ได้หรือไม่ ถ้ามีโมเดลนั้นออกมา ก็อยากรู้ว่า answer.ai จะใช้เทคนิคเดียวกันนี้เพื่อปรับจูนโมเดลขนาดใหญ่ด้วย GPU ขนาดเล็กสองตัวได้หรือไม่ และอยากเห็นการวิเคราะห์ต้นทุน/ประโยชน์ด้วย

    • ตั้งคำถามถึงความเป็นไปได้ในการใช้เทคนิคการเข้ารหัสใหม่ และการวิเคราะห์ความคุ้มค่าด้านต้นทุน
  • งานวิจัยแบบนี้มีประโยชน์มากในการเปิดทางให้ผู้ใช้รายบุคคลแข่งขันในตลาด LLM ได้ เป็นงานที่ยอดเยี่ยมและสอดคล้องกับแนวคิดในหนังสือ 'Zero to One'

    • ประเมินในเชิงบวกว่า งานวิจัยนี้มีประโยชน์ต่อผู้ใช้รายบุคคลและช่วยแก้ปัญหาเฉพาะด้านได้
  • บทความไม่ได้พูดถึงว่าใน NeurIPS Efficiency Challenge ผลงานที่ได้อันดับต้น ๆ ทั้งหมดใช้ QLoRA ซึ่งเป็นตัวอย่างที่ดีที่แสดงให้เห็นถึงความสำคัญและประโยชน์ของ QLoRA

    • เน้นย้ำความสำคัญและประโยชน์ของเทคโนโลยี QLoRA พร้อมกล่าวถึงการได้รับการยอมรับในเวทีการแข่งขัน
  • นี่คือแนวทางที่น่าสนใจและสร้างสรรค์ที่สุดเท่าที่ผมเคยเห็นในวงการ LLM แบบ 'โอเพนซอร์ส' และหวังว่าวงวิชาการจะยึดสิ่งนี้เป็นมาตรฐาน

    • ชื่นชมแนวทางต่อ LLM โอเพนซอร์สอย่างมาก และหวังว่าวงวิชาการจะนำไปใช้เป็นมาตรฐาน
  • อยากให้การเทรนบน Metal ที่รวดเร็วเกิดขึ้นเร็วกว่านี้ ตอนนี้ Mac Studio นั้นถูกกว่ามากและเร็วพอสำหรับการทำ inference กับโมเดลขนาดใหญ่ แต่แทบไม่มีโซลูชันสำหรับการเทรนเลย

    • แสดงความคาดหวังต่อการเทรนอย่างรวดเร็วบนแพลตฟอร์ม Metal และความเห็นต่อประสิทธิภาพของ Mac Studio ในปัจจุบัน
  • คุณภาพและความชัดเจนของการเขียนเชิงเทคนิคนั้นยอดเยี่ยมมาก

    • ชื่นชมคุณภาพและความชัดเจนของเอกสารทางเทคนิค
  • สงสัยว่าสามารถนำค่าน้ำหนักของ LLM (70B) มาเทรนใหม่ด้วยข้อมูลของตัวเองได้หรือไม่

    • ถามถึงความเป็นไปได้ในการเทรน LLM ใหม่ด้วยข้อมูลส่วนตัว
  • สำหรับคนที่ปรับจูน LLM ภายใต้งบฮาร์ดแวร์ที่จำกัด นี่คือความก้าวหน้าครั้งใหญ่ระดับพลิกเกม

    • มองว่าเทคโนโลยีนี้เป็นความก้าวหน้าครั้งสำคัญสำหรับผู้ใช้ที่มีงบฮาร์ดแวร์จำกัด
  • สงสัยว่าทำไมถึงเลือก DeepSpeed แทน FSDP

    • แสดงความสงสัยเกี่ยวกับเหตุผลในการเลือก DeepSpeed แทน FSDP
  • สงสัยว่าตอนที่สามารถปรับจูนโมเดลได้แล้ว มีการใช้เครื่องมืออะไรในการจูนประสิทธิภาพบ้าง

    • ถามถึงเครื่องมือที่ใช้สำหรับการปรับแต่งประสิทธิภาพ
  • เคยลองใช้การทำให้โมเดล sparse หรือไม่ ดูเหมือนว่าวิธีนี้อาจช่วยให้ปรับจูนได้ด้วย RAM ที่น้อยลง

    • เสนอความเห็นเกี่ยวกับการใช้เทคนิค sparsification และความเป็นไปได้ในการลดการใช้ RAM