การทำ 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