ข้ามไปยังเนื้อหา

โหมด

ชุดสี

เมื่อโมเดลถูกลดขนาดยังตอบคำถามได้เหมือนเดิมไหม: กรณีศึกษา Qwen3.8 27B ตั้งแต่ Q8 ถึง Q2

สรุปย่อ: โมเดลรุ่นที่ลดขนาดน้อยเก่งกว่าจริงตามมาตรวัดที่ละเอียด แต่ในการทำโจทย์จริง 764 ข้อ ทุก quant ตั้งแต่ Q8_0 ถึง Q3_K_XL (ไฟล์ 29 GB ลงมา 13 GB) ได้คะแนนเท่ากันที่ราว 83% มีเพียง Q2_K_XL ที่ต่ำลง (80.2%) Q4_K_M ใกล้ Q8 ทุกด้านและเร็วกว่าราว 54% ใช้ VRAM น้อยกว่า 11 GiB จึงเป็นค่าเริ่มต้นที่คุ้มที่สุดในการ์ด 32 GB

โมเดลภาษาขนาดใหญ่ในรูปแบบ GGUF มักถูกทำ quantization ออกมาหลายระดับ หรือเป็นการลดความละเอียดของตัวเลขน้ำหนัก ตั้งแต่ Q8 ที่ใกล้ต้นฉบับ ไปจนถึง Q2 ที่เล็กมาก ยิ่งลดมาก ไฟล์ยิ่งเล็กและรันบนการ์ดที่ VRAM น้อยได้ แต่มีคำกล่าวว่ารุ่นที่ถูกลดขนาดน้อยจะเก่งกว่ารุ่นที่ถูกลดขนาดลงมาก ๆ เราก็เลยลองจับโมเดล Qwen 3.8 27B รุ่นยอดนิยมมาลองทดสอบดูครับ

โดยนำโมเดล Qwen3.8 27B ที่ถูกลดขนาดลงมา 7 ระดับ เทียบกับ Q8_0 เป็นฐาน ดูทั้งคุณภาพ (ตอบเหมือนเดิมแค่ไหน และทำโจทย์จริงได้คะแนนเท่าไร) พร้อมทั้งรายงานความเร็ว และ VRAM ที่ใช้

เครื่องและซอฟต์แวร์: Radeon AI PRO R9700 (32 GB) ใบเดียวสำหรับ PPL, KLD และความเร็ว และสองใบคู่กันสำหรับทำโจทย์จริง รันด้วย llama.cpp b11429 แบ็กเอนด์ ROCm ทุกไฟล์ของ Qwen3.8 27B ที่ใช้ทดสอบมาจากแหล่งเดียวคือของ unsloth เพราะสูตรลดขนาดของแต่ละค่ายไม่เหมือนกัน ผสมแหล่งจะทำให้เทียบไม่ยุติธรรม ทุกไฟล์ตรวจ sha256 กับ Hugging Face แล้ว

quant 7 ระดับที่เราใช้ได้แก่ Q8_0 (ฐานเทียบ), UD-Q6_K, UD-Q5_K_M, UD-Q4_K_M, UD-IQ4_XS, UD-Q3_K_XL และ UD-Q2_K_XL คำว่า UD (Dynamic) หมายถึงไฟล์แบบผสม แต่ละชั้นของโมเดลถูกลดไม่เท่ากัน เช่น UD-Q6_K มี tensor ชนิด Q6_K 241 ก้อน Q8_0 154 ก้อน และ Q5_K 104 ก้อน ชื่อ quant จึงบอกความละเอียดโดยประมาณ ไม่ใช่ค่าเท่ากันทั้งไฟล์

วัดคุณภาพ 3 แบบ:

  • Perplexity (PPL): ให้โมเดลทายคำถัดไปในข้อความ wikitext-2 (200 ช่วง ช่วงละ 512 token) ค่าต่ำ = ทายได้แม่นกว่า แต่บอกความเสื่อมได้หยาบ
  • KL divergence (KLD): เทียบการกระจายความน่าจะเป็นของทุก token ของรุ่นที่ลดขนาดกับ Q8_0 ค่ายิ่งใกล้ 0 ยิ่งคิดเหมือนฐาน ในที่นี้ใช้ค่าเฉลี่ย คู่กับสัดส่วนที่ token อันดับหนึ่งตรงกับฐาน ซึ่งอ่านง่ายที่สุด
  • HellaSwag: แบบทดสอบเลือกตอบจากความเข้าใจสามัญสำนึก 400 ข้อสุ่มซ้ำชุดเดียวกันทุกระดับ ความคลาดเคลื่อนราว ±3.7 จุด

วัดความเร็วและ VRAM: ใช้ PromptMark รัน 5 ครั้งหลังอุ่น 1 ครั้ง context 12,288 token เว้น 15 วินาทีระหว่างคำขอ รันเฉพาะ Q8, Q6, Q5 และ Q4_K_M

ทำโจทย์จริง: ให้แต่ละ quant ทำโจทย์ชุดเดียวกัน 764 ข้อ ผ่าน llama-server (temperature 0, ปิด thinking, รัน 4 ช่องพร้อมกัน, สองการ์ดคู่กัน): GSM8K 250 ข้อ (โจทย์เลข) HumanEval+ 164 ข้อ และ MBPP+ 100 ข้อ (เขียนโค้ด รันทดสอบในกล่องทรายไม่ต่อเน็ต) IFEval 150 ข้อ (ทำตามคำสั่งที่มีเงื่อนไข) และข้อสอบ ONET วิชาภาษาไทยแบบเลือกตอบ 100 ข้อ ทุกชุดตรวจอัตโนมัติ และเทียบรายข้อกับ Q8_0 ด้วย McNemar

ความเสื่อมไม่ได้เพิ่มเท่ากันทุกขั้น จาก Q8 ไป Q5 แทบไม่เสียอะไร ส่วน Q2_K_XL เสียมากกว่า Q3_K_XL ราว 3 เท่า

llama-perplexity –kl-divergence เทียบ logits ของ Q8_0 · wikitext-2 200 ช่วง × 512 token

Quant ไฟล์ (GB) PPL PPL เพิ่มจาก Q8_0 Token อันดับหนึ่งตรง Q8_0 HellaSwag (%)
Q8_0 (ฐาน) 29.05 6.791 - - 82.5
UD-Q6_K 21.98 6.793 +0.07% 97.9% 82.8
UD-Q5_K_M 19.77 6.795 +0.10% 97.1% 82.8
UD-Q4_K_M 16.46 6.800 +0.18% 95.7% 83.0
UD-IQ4_XS 14.25 6.836 +0.70% 94.2% 82.5
UD-Q3_K_XL 13.15 6.907 +1.75% 92.9% 82.3
UD-Q2_K_XL 9.83 7.222 +6.40% 87.1% 81.3

อ่านผล: ในช่วง Q6 ถึง Q4_K_M ไฟล์เล็กลงราวหนึ่งในสี่ (22 เหลือ 16.5 GB) แต่ PPL เพิ่มไม่ถึง 0.2% และ Q4_K_M ยังทาย token อันดับหนึ่งตรงกับ Q8_0 ถึง 95.7% อย่างไรก็ตาม สัดส่วนที่ตรงกันลดลงทุกขั้น แม้แต่ Q6 ก็ไม่ได้ทายเหมือน Q8_0 100% ส่วน UD-IQ4_XS และ Q3_K_XL เสื่อมชัดขึ้นแต่ยังใช้งานได้ ส่วน Q2_K_XL ทาย token ตรงฐานเพียง 87.1%

HellaSwag แยกไม่ออก: คะแนนทุกระดับอยู่ระหว่าง 81.3 ถึง 83.0 ซึ่งน้อยกว่าความคลาดเคลื่อนของ 400 ข้อ (±3.7 จุด) แม้แต่ Q2 ที่เสียชัดใน PPL ก็ไม่ต่างจากรุ่นอื่นอย่างมีนัย ซึ่งชี้ว่าความรู้ระดับทั่วไปน่าจะทนการลดขนาดได้ดีกว่าความแม่นยำระดับ token ที่ PPL และ KLD จับได้ (ข้อนี้เป็นข้อสังเกต ไม่ได้ทดสอบแยก) ในการทดสอบนี้จึงใช้ PPL และ KLD เป็นหลัก และใช้ HellaSwag เป็นแค่การยืนยัน

Q4_K_M ถอดรหัสได้ 29.9 token/วินาที เร็วกว่า Q8_0 ราว 54% ใช้ VRAM น้อยกว่า 11 GiB และ Q8_0 ยังลงการ์ด 32 GB ใบเดียวได้ที่ context 12,288 token (ใช้ 27.3 GiB)

Quant ไฟล์ (GB) Decode (tok/s) Prefill 8K (tok/s) TTFT 4K (วินาที) VRAM สูงสุด (GiB) กำลังไฟเฉลี่ย (W)
Q8_0 29.05 19.4 1262.6 3.66 27.29 284
UD-Q6_K 21.98 24.0 783.3 5.63 21.08 287
UD-Q5_K_M 19.77 25.9 897.6 4.97 19.32 286
UD-Q4_K_M 16.46 29.9 1158.2 3.94 16.24 282

ข้อสังเกต: prefill ของ Q6_K ช้ากว่า Q8_0 แม้ไฟล์เล็กกว่า Decode เร็วขึ้นตามขนาดไฟล์ปกติ แต่ prefill (การอ่าน prompt) ของ Q6_K ได้แค่ 783 token/วินาที เทียบกับ 1,263 ของ Q8_0 จึงรัน llama-bench ตรง ๆ (ไม่ผ่าน PromptMark) เพิ่มอีกบนการ์ดใบเดิม ได้แนวเดียวกัน

ไฟล์ ชนิด tensor หลัก Prefill 8K (tok/s) Decode (tok/s)
Q8_0 Q8_0 ล้วน 1319 19.6
UD-Q4_K_M ผสม Q5_K / IQ4_XS / Q4_K / Q8_0 1200 30.1
UD-Q5_K_M ผสม (ไม่ได้ตรวจรายละเอียด) 930 26.0
UD-Q6_K ผสม Q6_K 241 + Q8_0 154 + Q5_K 104 807 24.1
Q6_K ล้วน (lmstudio) Q6_K 361 + Q8_0 49 693 23.5

prefill ช้าลงตามชนิด tensor ไม่ใช่ตามขนาดไฟล์ ไฟล์ Q6_K ล้วนช้าสุด ส่วน Q8_0 เร็วสุด สาเหตุระดับ kernel (เส้นทางคูณเมทริกซ์ของ Q6_K บนการ์ด gfx1201) ยังไม่ได้ยืนยัน ต้องใช้ profiler และผลนี้ใช้กับการ์ด R9700 + ROCm เท่านั้น

ทำโจทย์จริง 764 ข้อ ทุก quant ตั้งแต่ Q8_0 ถึง UD-Q3_K_XL ได้คะแนนรวม 82.5-83.1% ต่างกันไม่เกิน 0.6 จุด มีเพียง UD-Q2_K_XL ที่ต่ำลงเป็น 80.2%

PromptMark taskeval: GSM8K 250 + HumanEval+ 164 + MBPP+ 100 + IFEval 150 + ONET ไทย 100 · thinking ปิด greedy · R9700 × 2

Quant ไฟล์ (GB) GSM8K (250) HumanEval+ (164) MBPP+ (100) IFEval (150) ไทย ONET (100)
Q8_0 29.05 92.4 89.0 76.0 80.0 60.0
UD-Q6_K 21.98 93.6 89.0 75.0 78.0 59.0
UD-Q5_K_M 19.77 93.2 88.4 74.0 81.3 61.0
UD-Q4_K_M 16.46 93.2 89.6 73.0 77.3 61.0
UD-IQ4_XS 14.25 93.6 89.0 75.0 76.7 62.0
UD-Q3_K_XL 13.15 94.0 88.4 72.0 79.3 61.0
UD-Q2_K_XL 9.83 92.0 89.6 70.0 77.3 50.0

อ่านผล: เทียบรายข้อกับ Q8_0 ด้วย McNemar แบบ exact ค่า p ของ Q6, Q5, Q4_K_M, IQ4_XS และ Q3_K_XL อยู่ระหว่าง 0.73 ถึง 1.00 แปลว่าแยกจากความคลาดเคลื่อนไม่ได้ แม้ Q3_K_XL จะเปลี่ยนคำตอบไป 51 ข้อจาก 764 (ผิดในข้อที่ Q8 ถูก 26 ข้อ และถูกในข้อที่ Q8 ผิด 25 ข้อ) ผลสุทธิก็ไม่ต่าง ส่วน Q2_K_XL ต่ำกว่า 2.7 จุด (p = 0.038 ซึ่งเกือบอยู่บนเส้น) ส่วนใหญ่มาจากโจทย์ไทย (60 เหลือ 50) และ MBPP+ (76 เหลือ 70) ซึ่งแยกดูแต่ละชุดยังไม่ผ่านเกณฑ์ (p = 0.076 และ 0.109) ควรอ่านเป็นแนวโน้มมากกว่าข้อสรุป

ข้อควรรู้: Q8_0 ถูกตัดที่ 1,024 token ใน GSM8K 11 ข้อ (quant อื่น 6-10 ข้อ) อาจกดคะแนน GSM8K ของ Q8 เล็กน้อย (ยังไม่ได้ตรวจ) และข้อสอบ ONET ภาษาไทยยากทุกรุ่น (ราว 60% จาก 5 ตัวเลือก)

คำตอบของคำถามเดิม: รุ่นที่ลดน้อยเก่งกว่าจริงตามมาตรวัดที่ละเอียด (PPL, KLD) แต่ในการทำโจทย์จริง ความเก่งที่เสียไปไม่ปรากฏจนถึง Q3_K_XL และปรากฏเป็นแนวโน้มที่ Q2_K_XL เท่านั้น

  • สองมาตรวัดไม่ได้ขยับพร้อมกัน: KLD ของ IQ4_XS สูงกว่า Q4_K_M ราวสองเท่า (0.018 เทียบ 0.0096) และ Q3_K_XL สูงกว่านั้นอีก แต่คะแนนโจทย์เท่าเดิม KLD วัดว่าการกระจายความน่าจะเป็นของทุก token เปลี่ยนไปเท่าไร ส่วนโจทย์วัดแค่คำตอบสุดท้ายที่ถูกหรือผิด ซึ่งทนการเปลี่ยนเล็ก ๆ ได้ (นี่เป็นข้อสันนิษฐานจากผลที่เห็น ไม่ได้ทดสอบแยก)
  • Q2_K_XL เห็นความเสื่อมในทุกมาตรวัดพร้อมกัน: PPL +6.4%, ทาย token อันดับหนึ่งตรง Q8_0 แค่ 87%, KLD 0.089 และคะแนนโจทย์ลด 2.7 จุด สามอย่างชี้ทิศเดียวกัน
  • ความเร็วและ VRAM ได้ตามขนาดไฟล์ โดยคะแนนโจทย์ไม่เสีย: Q4_K_M เร็วกว่า Q8_0 ราว 54% ใช้ VRAM 16.2 เทียบ 27.3 GiB ข้อยกเว้นคือ prefill ของ Q6_K ที่ช้ากว่า Q8_0 ซึ่งตามชนิด tensor ไม่ใช่ขนาดไฟล์
  • ภาษาไทยเป็นจุดที่น่าติดตามที่ Q2: 60 เหลือ 50 แต่ p = 0.076 จาก 100 ข้อ ต้องใช้ข้อมากกว่านี้จึงจะยืนยันได้
  • ความละเอียดของการทดสอบ: 764 ข้อให้ความคลาดเคลื่อนราว ±1.4 จุด ความต่างที่เล็กกว่าราว 3 จุดจึงแยกจากความบังเอิญไม่ได้ คำว่า ไม่พบความต่าง ไม่ได้แปลว่า ไม่มีความต่าง

สำหรับการ์ด 32 GB ใช้ UD-Q4_K_M (16.5 GB) เป็นค่าเริ่มต้น คุณภาพที่วัดได้เท่า Q8_0 ทั้ง PPL (+0.18%) และทำโจทย์จริง (82.5% เทียบ 82.9%) เร็วกว่าราว 54% และเหลือ VRAM ให้ context ยาว

  • Q8_0, Q6_K, Q5_K_M: ไม่ได้ผลดีขึ้นที่วัดได้เมื่อเทียบ Q4_K_M ใช้เมื่อ VRAM เหลือและอยากได้ความมั่นใจสูงสุด แต่ Q6_K มีจุดอ่อนเรื่อง prefill บนการ์ดนี้
  • UD-IQ4_XS (14.3 GB) และ UD-Q3_K_XL (13.2 GB): เหมาะเมื่อ VRAM จำกัด ทำโจทย์ได้เท่า Q8_0 ในชุดนี้ แม้ PPL เสีย 0.7% และ 1.75%
  • UD-Q2_K_XL (9.8 GB): ใช้เมื่อจำเป็นเท่านั้น คะแนนโจทย์ต่ำกว่า 2.7 จุด (เกือบมีนัย) และ PPL +6.4% ภาษาไทยน่าจะเสียก่อน (แนวโน้ม)

ข้อจำกัดของการทดสอบ:

  • ทดสอบโมเดลเดียว Qwen3.8 27B ชุด unsloth Dynamic ชุดเดียว ผลอาจไม่เหมือน quant จากค่ายอื่นหรือโมเดลอื่น
  • ใช้ Q8_0 เป็นฐานแทนรุ่นเต็ม (BF16) จึงวัดได้แค่ความเสื่อมจาก Q8_0 ไม่ใช่จากต้นฉบับจริง
  • PPL/KLD ใช้ 200 ช่วง × 512 token ของข้อความภาษาอังกฤษ และ HellaSwag 400 ข้อ แยกความต่างไม่ได้
  • ทำโจทย์จริงใช้ชุดย่อ 764 ข้อ ปิด thinking คำตอบแบบ greedy ไม่ได้ทดสอบบริบทยาว บทสนทนายาว หรือโหมด thinking และภาษาไทยมีแค่ 100 ข้อ
  • ความเร็วและ VRAM วัดเฉพาะ Q8, Q6, Q5, Q4_K_M บน R9700 ด้วย llama.cpp b11429 + ROCm สาเหตุ prefill ช้าของ Q6_K ระดับ kernel ยังไม่ได้ยืนยัน
  • แต่ละ quant รันบนการ์ดคงที่ (รุ่นเดียวกันทั้งสองใบ) ไม่ได้สุ่มสลับ