ผมได้ทำการทดสอบประสิทธิภาพ (Benchmark) ของ Speculative Decoding — ค่า a = 3.5 ยังไม่เพียงพอ
Speculative Decoding (SD) อาศัยกฎทางคณิตศาสตร์ง่ายๆ คือ: a > 1 + α + β
ความยาวในการยอมรับ (acceptance length หรือ a) จะต้องมากกว่า 1 บวกด้วยอัตราส่วนการคำนวณ (compute ratio หรือ α) และค่าใช้จ่ายส่วนเกินในการตรวจสอบ (verification overhead หรือ β) หากเป็นไปตามนี้ SD จะได้เปรียบ แต่ถ้าไม่ SD จะขาดทุน
ผมได้ทดสอบทฤษฎีนี้บนเครื่องจริง โดยใช้ CPU Intel Gen 12 พร้อม RAM 64GB และจับคู่ draft model ขนาดเล็กอย่าง Qwen2.5-0.5B เข้ากับ target model ที่ใหญ่กว่าอย่าง Qwen2.5-1.5B
ผลลัพธ์ที่ได้นั้นน่าประหลาดใจมาก เพราะ SD ช้ากว่าการสร้างข้อความแบบปกติ (raw generation) ถึง 49% ถึง 62%
นี่คือความแตกต่างของค่า acceptance length (a) ตามประเภทของงาน:
• JSON (Structured): a = 3.50. draft model ทำนายรูปแบบได้ดี • Code (Semi-structured): a = 3.00. อยู่ในเกณฑ์ดี แต่รูปแบบการตั้งชื่อมีความหลากหลาย • Story (Creative): a = 2.11. draft model ประสบปัญหาในการเลือกใช้คำ
แม้ว่าค่า "a" จะสูง แต่ SD ก็ยังล้มเหลวเมื่อรันบน CPU เพราะอะไร?
ปัญหาที่ใหญ่ที่สุดคืออัตราการยอมรับเป็นศูนย์ (zero-accept rate) โดยพบว่าระหว่าง 15% ถึง 30% ของรอบการทำงานนั้นไม่มีการยอมรับ token เลยแม้แต่ตัวเดียว
ในรอบเหล่านี้ draft model จะทำงาน และ target model จะทำการตรวจสอบ แต่คุณกลับไม่ได้อะไรใหม่เลย คุณต้องจ่ายต้นทุนการประมวลผลถึงสองรอบเพื่อให้ได้มาเพียงหนึ่ง token ซึ่งทำให้ SD มีต้นทุนสูงขึ้นถึง 2 เท่าสำหรับผลลัพธ์ที่เท่ากัน
สิ่งนี้ชี้ให้เห็นว่าทำไม SD ถึงเป็นการเพิ่มประสิทธิภาพสำหรับ GPU เท่านั้น
บน GPU การทำงานของ draft model แทบจะไม่มีต้นทุนเพิ่มเลย ทำให้อัตราส่วนการคำนวณ (α) นั้นต่ำมาก แต่บน CPU นั้น draft model ต้องแย่งชิงแบนด์วิดท์หน่วยความจำ (memory bandwidth) มันจึงไม่ใช่ของฟรี และทำให้ความสัมพันธ์ทางคณิตศาสตร์ข้างต้นใช้ไม่ได้บน CPU
หากคุณคิดจะใช้ SD บน CPU อย่าทำเลย เพราะตัวเลขมันไม่คุ้มค่า
ข้อสรุปสำคัญสำหรับการนำไปใช้งานจริง:
- วัดค่า "a" ของคุณเอง อย่าเชื่อแค่คำกล่าวอ้างของผู้ให้บริการ
- แยกข้อมูลตามประเภทของงาน เพราะ Code และ Chat มีอัตราการยอมรับที่ต่างกัน
- เฝ้าระวังอัตราการยอมรับเป็นศูนย์ (zero-accept rate) เพราะความผันผวนที่สูงจะทำลายค่า p99 latency ของคุณ
- ใช้ SD บน GPU ซึ่งต้นทุนของ draft model นั้นต่ำมาก
การเพิ่มประสิทธิภาพที่ดีที่สุด คือการรู้ว่าเมื่อไหร่ควรปิดมันทิ้งไป
Source: https://dev.to/zxpmail/i-benchmarked-speculative-decoding-a-35-wasnt-enough-1geb
Optional learning community: https://t.me/GyaanSetuAi
