เมื่อโมเดลถูกลดขนาดยังตอบคำถามได้เหมือนเดิมไหม: กรณีศึกษา 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 เป็นแค่การยืนยัน
ผลด้านความเร็วและ VRAM
หัวข้อที่มีชื่อว่า “ผลด้านความเร็วและ VRAM”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 รันบนการ์ดคงที่ (รุ่นเดียวกันทั้งสองใบ) ไม่ได้สุ่มสลับ