การควอนไทซ์โมเดล Qwen3.5: ทำไมเวอร์ชันจากชุมชนจึงมีประสิทธิภาพลดลง
(x.com/Brooooook_lyn)เทคโนโลยีการบีบอัดโมเดล AI ให้เล็กลงและเร็วขึ้นอย่าง 'การควอนไทซ์ (quantization)' ได้มีการอธิบายสาเหตุทางเทคนิคแล้วว่าเหตุใดโมเดล Qwen3.5 ในฟอร์แมต MLX ที่ชุมชนเผยแพร่จึงแสดงอาการอย่างการเรียกใช้เครื่องมือผิดพลาด เอาต์พุตไร้ความหมาย และอาการหลอน (hallucination) โดยเป็นเนื้อหาที่ Unsloth ผู้ให้บริการเครื่องมือฟाइनจูน AI นำเสนอผ่านการทดลองเบนช์มาร์กกว่า 150 รายการ พร้อมทั้งเสนอแนวทางแก้ไข
สรุปประเด็นสำคัญ
- การควอนไทซ์คือเทคนิคที่บีบอัดข้อมูลตัวเลขของโมเดลให้มีความละเอียดต่ำลง (จำนวนบิตน้อยลง) เพื่อลดขนาดไฟล์และปริมาณการคำนวณ
- เครื่องมือควอนไทซ์จากชุมชนส่วนใหญ่ใช้ 'การควอนไทซ์แบบสม่ำเสมอ' ซึ่งกำหนดจำนวนบิตเท่ากันให้กับทุกเลเยอร์
- Qwen3.5 มีโครงสร้างแบบไฮบริดที่สลับกันระหว่างเลเยอร์ self-attention แบบทั่วไป กับเลเยอร์ linear attention ที่ชื่อ GatedDeltaNet
- แก่นของปัญหาอยู่ที่เลเยอร์
linear_attn.out_projโดยเลเยอร์นี้มีความไวต่อการสูญเสียข้อมูลจากการบีบอัดแบบ 4 บิต สูงกว่าเลเยอร์เอาต์พุต (lm_head) ราว 120 เท่า - การควอนไทซ์แบบสม่ำเสมอมีปัญหาเชิงโครงสร้าง เพราะเปลืองความละเอียดไปกับส่วนที่ไม่สำคัญ ขณะที่กลับทำลายเลเยอร์ที่อ่อนไหวจริง
แนวทางของ Unsloth
- ใช้วิธี 'การควอนไทซ์แบบผสมจำนวนบิต' ที่จัดสรรจำนวนบิตต่างกันตามความไวจริงของแต่ละเลเยอร์
- เลเยอร์ MLP ที่มีความไวต่ำใช้ 3 บิต, เลเยอร์ attention Q/K/V ใช้ 5 บิตพร้อมใช้ AWQ (เทคนิคปรับน้ำหนัก), และเลเยอร์เอาต์พุตที่ไวที่สุดยังคงความละเอียดเต็มแบบ bf16 ไว้
- ใช้ข้อมูลสำหรับ calibration (การปรับเทียบ) เป็นตัวอย่างบทสนทนา การเขียนโค้ด และการเรียกใช้เครื่องมือ แทนการใช้ Wikipedia ทำให้คำนวณความสำคัญได้สอดคล้องกับสภาพแวดล้อมการใช้งานจริง
ข้อดีและข้อเสีย
- ข้อดี: คุณภาพด้านการเรียกใช้เครื่องมือ เอาต์พุตแบบมีโครงสร้าง และการสร้างโค้ด ดีขึ้นอย่างมากเมื่อเทียบกับเวอร์ชันจากชุมชนเดิม และทำให้ MLX มีประสิทธิภาพเทียบเท่ากับเวอร์ชัน GGUF เดียวกัน
- ข้อเสีย: เนื่องจากต้องคงบางเลเยอร์ที่อ่อนไหวไว้เป็น bf16 ทำให้ใช้พื้นที่ดิสก์มากกว่าโมเดลแบบ low-bit ล้วน
จุดที่แตกต่าง
- ขณะที่เครื่องมือจากชุมชนเดิมบีบอัดแบบเหมารวมโดยไม่คำนึงถึงโครงสร้าง Unsloth ใช้การทดลอง KLD (ตัวชี้วัดการสูญเสียข้อมูล) กว่า 150 รายการ และการเปรียบเทียบการตั้งค่า 121 แบบ เพื่อหาจำนวนบิตที่เหมาะสมที่สุดสำหรับแต่ละเลเยอร์อย่างเป็นวิทยาศาสตร์
- อีกจุดที่น่าสนใจคือการแสดงให้เห็นเชิงประจักษ์ว่าคุณภาพของข้อมูลสำหรับการปรับเทียบเป็นตัวกำหนดคุณภาพของการบีบอัด
นัยสำคัญ
- สิ่งนี้ยืนยันอีกครั้งว่าการบีบอัดโมเดล AI ไม่ใช่แค่การลดจำนวนบิตอย่างง่าย แต่จำเป็นต้องเข้าใจโครงสร้างภายในของโมเดลด้วย
- อีกบทเรียนเชิงปฏิบัติคือ เมื่อนำโมเดลแบบลดขนาดที่เผยแพร่โดยชุมชนไปใช้ในงานจริง ควรตรวจสอบวิธีการควอนไทซ์และข้อมูลสำหรับการปรับเทียบของผู้เผยแพร่ให้แน่ชัด
4 ความคิดเห็น
อันที่จริงเลเยอร์ที่ไม่ค่อยสำคัญนัก ต่อให้บีบอัดอย่างหนักก็แทบไม่เกิดการสูญเสียมากนัก ในบางเลเยอร์ ต่อให้ทำควอนไทซ์แบบ 2 บิต ก็ไม่มีการสูญเสียที่สังเกตได้ชัดเจน
แต่ปัญหาเกิดขึ้นเพราะโมเดลของคอมมูนิตี้ทำควอนไทซ์ทุกเลเยอร์แบบเหมารวมทั้งหมด
นั่นเป็นเพราะมิติและเลเยอร์ของโมเดลไม่ได้ถูกปรับแต่งอย่างสม่ำเสมอ ก็เป็นแบบนี้มาโดยตลอด
ว้าว......!
Daniel Han ผู้ก่อตั้ง Unsloth ดูเหมือนจะเป็นอัจฉริยะตัวจริงเลยครับ ทุกครั้งที่มีโมเดล open-weight ออกมา เขาจะวิเคราะห์ตั้งแต่โครงสร้างโมเดลไปจนถึงบั๊กของ tokenization, ข้อผิดพลาดในการ quantization และข้อผิดพลาดของเทมเพลต แล้วเอามาแชร์ให้ตลอด น่าทึ่งจริง ๆ ครับ