การทำ Quantization โมเดลบน GPU ของแล็ปท็อปขนาด 6 GB

ผมได้ลองนำ Large Language Models มาลงใน GPU ของแล็ปท็อป RTX 3050 ซึ่งการ์ดรุ่นนี้มี VRAM เพียง 6 GB ผมต้องการดูว่าโมเดลไหนสามารถใช้งานได้ด้วยการทำ 4-bit quantization และโมเดลไหนที่ใช้งานไม่ได้

ผมใช้สคริปต์เพียงตัวเดียวในการทำ quantization ให้กับโมเดล 3 ตัว:

  • Phi-3.5-mini (3.8B)
  • Llama-3.2-3B
  • Qwen2.5-3B (VibeThinker)

ผลลัพธ์: Phi และ Llama ทำงานได้ดี โดย Phi ลดขนาดจาก 7.6 GB เหลือ 2.2 GB ภายใน 34 นาที ส่วน Llama และ VibeThinker ก็มีผลลัพธ์ในทิศทางเดียวกัน โมเดลเหล่านี้สามารถใช้งานได้โดยไม่มีปัญหา

จากนั้นผมได้ลอง Qwen2.5-7B แต่มันล้มเหลว กระบวนการหยุดทำงาน (crash) ที่เลเยอร์ที่สองเนื่องจากเกิดข้อผิดพลาด Out of Memory

ทำไมถึงล้มเหลว: การทำ GPTQ quantization จะมีการสร้าง Hessian matrix สำหรับแต่ละเลเยอร์ สำหรับโมเดลขนาด 7B การคำนวณนี้ต้องใช้หน่วยความจำมากกว่าที่การ์ดขนาด 6 GB จะรองรับได้ ผมได้ลองแก้ไขหลายวิธี:

  • ใช้ชุดข้อมูล calibration ที่เล็กลง: ไม่มีการเปลี่ยนแปลง
  • การทำ Offloading Hessians ไปยัง CPU: ทำงานได้นานขึ้นแต่ก็ยัง crash อยู่ดี
  • ใช้ AWQ แทน GPTQ: ก็ยัง crash ที่จุดเดิม
  • ใช้ CPU เพียงอย่างเดียว: ใช้งานได้แต่ช้าเกินไป โดยใช้เวลาประมาณ 16 นาทีต่อหนึ่งเลเยอร์

ข้อสรุปสำคัญสำหรับ GPU ขนาดเล็ก:

  • คาดหวังการลดขนาดโมเดลลงประมาณ 3 เท่า
  • ควรตั้งเป้าหมายที่ขีดจำกัดพารามิเตอร์ประมาณ 3 ถึง 4 พันล้าน (3 to 4 billion) สำหรับการทำ GPU quantization
  • ระวังเรื่อง KV budget แม้ว่าขนาดไฟล์จะใกล้เคียงกัน แต่หน่วยความจำที่ใช้ระหว่างการ inference จะแตกต่างกัน
  • การทำ quantization ใช้หน่วยความจำมากกว่าการใช้งาน (serving) ควรตรวจสอบ RAM ของระบบในระหว่างกระบวนการ

การเปรียบเทียบโมเดล (W4A16): • Phi-3.5-mini: 2.27 GB | 68.7 tok/s • Llama-3.2-3B: 2.26 GB | 66.0 tok/s • VibeThinker-3B: 2.07 GB | 43.9 tok/s

โมเดลทั้งสามตัวสามารถจัดการกับคณิตศาสตร์พื้นฐานและตรรกะเกี่ยวกับจำนวนเฉพาะได้อย่างถูกต้องหลังจากการทำ quantization

แหล่งที่มา: https://dev.to/syedazeez/quantizing-three-models-to-fit-a-6-gb-laptop-gpu-and-the-one-that-wouldnt-4pjl

ชุมชนการเรียนรู้เพิ่มเติม (ทางเลือก): https://t.me/GyaanSetuAi