ผมได้ทำการทดสอบประสิทธิภาพ (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