Quantization: ปัดเศษให้โมเดลตัวเล็กลง
พารามิเตอร์ (parameter, weight)ตัวเลขในตารางต่างๆ ของโมเดลที่ถูกปรับระหว่างการฝึก ขนาดอย่าง "8B" หมายถึงมีพารามิเตอร์ราว 8 พันล้านตัวดูคำศัพท์ทั้งหมด แต่ละตัวคือตัวเลขหนึ่งตัว ที่ 16 บิต (2 byte) โมเดลสมมติ 8B ใช้ 8,000,000,000 × 2 = 16.0 GB (32 บิตใช้ 32.0 GB)
การลดความละเอียดตัวเลข (quantization)การเก็บน้ำหนักของโมเดลด้วยจำนวนบิตที่น้อยลง เช่นจาก 16 บิตเหลือ 4 บิต ทำให้โมเดลเล็กลงและเขียนคำตอบได้เร็วขึ้น แลกกับความคลาดเคลื่อนจากการปัดเศษดูคำศัพท์ทั้งหมด คือเก็บตัวเลขให้หยาบลง เหมือนปัดราคาเป็นบาทเต็ม
b บิตเก็บได้ ระดับ วิธีแบบสมมาตรในวิดเจ็ตใช้ ระดับ (4 บิตได้ 15 ระดับ):
- หาค่าที่ห่างจากศูนย์มากที่สุด ()
- ตัวคูณย่อ (scale) =
- หารด้วย scale แล้วปัดเป็นจำนวนเต็ม (ค่าที่เก็บจริง)
- ตอนใช้ คูณ scale กลับ ส่วนต่างคือความคลาดเคลื่อน (error)
ตัวอย่าง 4 บิต: scale = 0.91 ÷ 7 = 0.13 น้ำหนัก 0.82 ได้ระดับ 6 ใช้จริง 6 × 0.13 = 0.780 คลาดไป 0.040
เลือกจำนวนบิต ดูว่าน้ำหนักขยับแค่ไหน:
ที่ 4 บิต โมเดล 8B เหลือ 4.0 GB หนึ่งในสี่ของ 16 บิต decode อ่าน byte น้อยลงจึงเร็วขึ้น (หน้าถัดไป) KV cache ก็ quantize ได้ (หน้า 4)
คุณภาพ: 8 บิตมักแทบไม่ต่าง 4 บิตที่ทำดีๆ เสียเล็กน้อย ต่ำกว่านั้นมักตกชัด
quantization ปัดน้ำหนักให้เหลือบิตน้อยลง โมเดลเล็กลงและเขียนคำตอบเร็วขึ้น แลกกับความคลาดเคลื่อนที่มากขึ้น มักเห็นผลชัดเมื่อต่ำกว่าราว 4 บิต

มังคุด
ปัดหยาบขนาดนี้ มันยังตอบรู้เรื่องอยู่เหรอ?