DEV Community

Nokka
Nokka

Posted on AI-assisted

speculative decoding กับ EAGLE-3 ทำงานอย่างไร และใครได้ใช้จริง

speculative decoding กับ EAGLE-3 ทำงานอย่างไร และใครได้ใช้จริง

โดย Nokka (นก-กา) | 19 กันยายน 2026

บทความนี้เขียนโดย AI (โมเดล deepseek-v4.1-flash ของผู้ให้บริการ ollama-cloud) ผ่าน Hermes Agent จาก Nous Research ตรวจสอบและเรียบเรียงโดย Nokka ข้อความในเครื่องหมายคำพูดที่เป็นคำแปลเป็นคำแปลของผม ไม่ใช่สำเนาต้นฉบับ

มีเทคนิคหนึ่งที่ทำให้โมเดลเดิมตอบเร็วขึ้นได้ โดยไม่ต้องเปลี่ยนโมเดล และไม่ทำให้คุณภาพลดลง เทคนิคนั้นชื่อ speculative decoding [1]

⇒ ก่อนหน้านี้ผมเขียนวิธีเปิดมันใน LM Studio ไปแล้ว บทความนี้จะพาไปดู แนวคิดข้างใน ว่ามันทำงานอย่างไร ทำไมจึงเร็วขึ้นได้โดยไม่เสียคุณภาพ และทำไม EAGLE-3 ถึงเป็นรุ่นที่ถูกใช้ในงานจริงมากที่สุด [1][2]

ปัญหาที่ต้องเข้าใจก่อน

โมเดลภาษาให้ผลลัพธ์ทีละโทเคน โทเคนที่สองต้องรอโทเคนแรก โทเคนที่สามต้องรอโทเคนที่สอง เป็นเช่นนี้ไปเรื่อย ๆ [1]

ปัญหาคือการสร้างแบบนี้ ติดที่แบนด์วิดช์หน่วยความจำ ไม่ได้ติดที่พลังประมวลผล คือการ์ดจอยังว่าง แต่ต้องรอข้อมูลไหลผ่านหน่วยความจำ [3]

ในทางกลับกัน การประมวลผล prompt ทำได้พร้อมกันทั้งก้อน เพราะเมื่อมีข้อความครบแล้ว โมเดลคำนวณความน่าจะเป็นของทุกตำแหน่งพร้อมกันได้ [1][3]

ความต่างนี้คือจุดตั้งต้นของเทคนิคทั้งหมด ถ้าประมวลผลหลายโทเคนพร้อมกันถูกกว่าการทำทีละตัว ก็ควรหาทางยัดหลายโทเคนเข้าไปในรอบเดียว [1]

ภาพเปรียบเทียบสองการทำงาน โดยการประมวลผล prompt ส่งโทเคนทั้งหมดผ่านหน่วยความจำพร้อมกันในก้อนเดียว ส่วนการสร้างคำตอบต้องรอทีละโทเคนเป็นคิว

ภาพที่ 1: ความต่างที่ทำให้เกิดเทคนิคนี้

แนวคิดหลักของ speculative decoding

วิธีคือหาตัวช่วยที่ถูกและเร็ว มาเดาโทเคนข้างหน้าหลายตัวก่อน แล้วให้โมเดลใหญ่ตรวจทั้งหมดในรอบเดียว [1]

ขั้นที่หนึ่ง โมเดลร่างตัวเล็กสร้างโทเคนตัวเลือกมา k ตัว [1][3]

ขั้นที่สอง โมเดลใหญ่ประมวลผลทั้ง k ตัวพร้อมกันใน forward pass เดียว ซึ่งทำได้เพราะมีลำดับโทเคนอยู่ในมือแล้ว จึงคำนวณความน่าจะเป็นที่ทุกตำแหน่งได้พร้อมกัน [3]

ขั้นที่สาม ตรวจจากซ้ายไปขวา เก็บส่วนที่ถูกต้องไว้เท่าที่ติดกัน แล้วโมเดลใหญ่สร้างตัวถัดไปเอง [1][3]

เอกสารทางการของ llama.cpp อธิบายเหตุผลสั้น ๆ ว่าวิธีนี้ให้ผลดีเมื่อ คำทำนายของโมเดลร่างถูกบ่อย [1]

แผนภาพสองขั้นของการยอมรับโทเคน ขั้นที่หนึ่งยอมรับด้วยสูตร min(1, p/q) และขั้นที่สองถ้าปฏิเสธจะสุ่มใหม่จาก (p-q)+ ทำให้ผลลัพธ์กระจายตัวเหมือนโมเดลใหญ่

ภาพที่ 2: กลไกที่ทำให้คุณภาพไม่เสีย

ส่วนที่ผมคิดว่าสำคัญที่สุด: มันไม่เสียคุณภาพจริง

หลายคนเข้าใจว่า speculative decoding เป็นการแลกคุณภาพกับความเร็ว แต่ความจริงไม่ใช่อย่างนั้น [3]

⇒ การยอมรับโทเคนใช้วิธีที่เรียกว่า modified rejection sampling สำหรับโทเคน x ที่โมเดลร่างให้ความน่าจะเป็น q(x) และโมเดลใหญ่ให้ p(x) จะยอมรับด้วยความน่าจะเป็น min(1, p(x)/q(x)) [3]

และถ้าปฏิเสธ จะสุ่มใหม่จากการกระจายส่วนที่เหลือที่ปรับให้เป็นบรรทัดฐานแล้ว คือ (p(x) - q(x))₊ [3]

ผลลัพธ์ที่ได้จึง พิสูจน์ได้ว่ากระจายตัวเหมือนการสุ่มจากโมเดลใหญ่โดยตรง ไม่มี trade-off ไม่มีคะแนน eval ตก [3]

ผมคิดว่านี่คือจุดที่ทำให้เทคนิคนี้ต่างจากวิธีเร่งความเร็วอื่น ๆ มันไม่ใช่การประมาณ แต่เป็นการคำนวณที่ให้คำตอบชุดเดียวกัน

ตัวเลขที่กำหนดเพดานความเร็ว

ตัวเลขสำคัญที่สุดของเทคนิคนี้ไม่ใช่ความเร็วของโมเดลร่าง แต่คือ อัตราการยอมรับ หรือ α [3]

สูตรที่ใช้ดูเพดานคือ จำนวนโทเคนที่ยอมรับต่อรอบของโมเดลใหญ่ = (1 - α^(k+1)) / (1 - α) [3]

⇒ ซึ่งเป็นเส้นโค้งที่อิ่มตัว ไม่ใช่เส้นตรง ตัวอย่างที่เขาให้คือ ถ้า α = 0.7 และ k = 4 จะได้ประมาณ 2.6 โทเคนต่อรอบของโมเดลใหญ่ [3]

นั่นคือเพดาน ก่อนหักค่าใช้จ่ายของขั้นตอนร่างและการตรวจ [3]

และมีข้อจำกัดที่ต้องเข้าใจ เทคนิคนี้เป็น การลดความหน่วง ไม่ใช่การเพิ่มปริมาณงาน บนเซิร์ฟเวอร์ที่โหลดเต็มอยู่แล้ว มันอาจทำให้ช้าลงได้ [3]

เพราะประโยชน์ที่ได้มาจากช่วงที่การทำงานติดหน่วยความจำ พอ batch ใหญ่ขึ้นจนกลายเป็นงานที่ติดพลังประมวลผล ข้อได้เปรียบนั้นก็หายไป [3]

EAGLE-3 ต่างจากวิธีพื้นฐานตรงไหน

EAGLE ย่อมาจาก Extrapolation Algorithm for Greater Language-model Efficiency และเป็นวิธีที่ทำงานที่ ระดับ feature ไม่ใช่ระดับโทเคน [2][4]

วิธีดั้งเดิมใช้โมเดลร่างที่เดาโทเคน แต่ EAGLE เดา hidden state แล้วใช้ LM head ของโมเดลใหญ่ที่แช่แข็งอยู่ แปลง state นั้นเป็นโทเคน [2][4]

⇒ ทำไมถึงได้ผลกว่า เพราะ EAGLE ทำ autoregression ที่ระดับ feature โดยใช้ feature จากชั้นบนสุดของโมเดลเป้าหมายซ้ำ ซึ่งให้ผลดีกว่าการเดาโทเคนแบบพื้นฐาน [4]

EAGLE-3 เป็นรุ่นที่สาม และมีการเปลี่ยนที่สำคัญสองอย่าง [4]

หนึ่ง ทิ้งการทำนาย feature แล้วหันมาทำนายโทเคนโดยตรง [4]

สอง เลิกพึ่ง feature จากชั้นบนสุดชั้นเดียว แล้วใช้ การหลอม feature จากหลายชั้น ด้วยเทคนิคที่ทีมงานเรียกว่า training-time test [4]

ทีมงานอธิบายเหตุผลว่าการขยายข้อมูลเทรนให้ EAGLE รุ่นก่อนได้ผลจำกัด เพราะข้อจำกัดของการทำนาย feature พอเปลี่ยนวิธีแล้ว โมเดลร่างจึงได้ประโยชน์จากการขยายข้อมูลเทรนเต็มที่ [4]

ตัวเลขที่เอกสารระบุคือ เร็วขึ้นได้ถึง 6.5 เท่า และดีกว่า EAGLE-2 ประมาณ 1.4 เท่า และในเฟรมเวิร์ก SGLang ได้ปริมาณงานเพิ่ม 1.38 เท่า ที่ batch size 64 [4]

⇒ มีอีกตัวเลขที่ผมเจอในบทวิเคราะห์ด้านวิศวกรรม EAGLE-3 ดันอัตราการยอมรับ α ขึ้นไปอยู่ในช่วง 0.6 ถึง 0.8 สำหรับงานสนทนาทั่วไป ซึ่งเป็นช่วงที่ให้ผลดีจริง [5]

การ์ดสี่ใบแสดงทางเลือกที่ใช้ได้ คือ draft model, EAGLE-3, ngram และ dflash กับ dspark

ภาพที่ 3: สี่แบบที่เลือกใช้ได้ตามข้อจำกัดของแต่ละคน

ทางเลือกอื่นที่ไม่ต้องมีโมเดลร่าง

เอกสารทางการของ llama.cpp ยังมีอีกหลายแบบที่ ไม่ต้องโหลดโมเดลเพิ่ม ซึ่งผมคิดว่าสำคัญสำหรับคนที่หน่วยความจำจำกัด [1]

แบบใช้สถิติ n-gram ระบบเก็บสถิติของลำดับโทเคนสั้น ๆ แล้วสร้างคำทำนายจากความน่าจะเป็นที่ได้จากสถิติเหล่านั้น โดยอ้างอิงจากโทเคนที่เคยปรากฏในบริบทก่อนหน้า ข้อดีคือไม่มีค่าใช้จ่ายเพิ่มเลย [1]

และมีแบบที่ใช้แฮช เอกสารระบุว่าเบามาก ใช้หน่วยความจำคงที่ประมาณ 16 MB และใช้พูลแฮชร่วมกันได้ทุก slot ของเซิร์ฟเวอร์ คำขอที่ต่างกันจึงได้ประโยชน์จากกันได้ [1]

⇒ แบบ n-gram เหมาะกับงานที่มีรูปแบบซ้ำ เช่น การเขียนโค้ดทับข้อความเดิม · โมเดลที่ต้องทวนความคิดซ้ำในคำตอบสุดท้าย และ งานสรุป [1]

ใครได้ใช้บ้าง

หนึ่ง · คนที่รันโมเดลในเครื่อง ถ้าเคยรู้สึกว่า local model ช้า แต่ยังมีแรมเหลือ การเพิ่มโมเดลร่างคือทางที่ตรงที่สุด ต้นทุนคือหน่วยความจำเพิ่มขึ้นเท่านั้น [1][3]

สอง · ทีมที่เสิร์ฟโมเดลให้ผู้ใช้หลายคน ต้องพิจารณาให้ดี เพราะเทคนิคนี้ช่วยลดความหน่วง แต่ไม่ได้เพิ่มปริมาณงาน และจะเสียประโยชน์เมื่อ batch ใหญ่จนติดพลังประมวลผล [3]

สาม · คนที่ทำงานกับงานที่มีรูปแบบซ้ำชัด เช่นการแก้โค้ด การสรุป แบบ n-gram ให้ประโยชน์โดยไม่ต้องโหลดโมเดลเพิ่มเลย [1]

สี่ · ทีมที่ใช้เฟรมเวิร์กสำเร็จรูป EAGLE-3 ถูกนำไปใช้ในเฟรมเวิร์กการเสิร์ฟโมเดลแล้ว ผู้ใช้จึงไม่ต้องเทรน draft model เอง [4]

และมีอีกกลุ่มที่ได้ประโยชน์คือ ผู้ให้บริการ API ที่คิดราคาตามความหน่วง แต่นี่เป็นการคาดเดาของผม ไม่ได้มาจากแหล่ง

ข้อจำกัดที่ควรรู้

ต้องใช้หน่วยความจำเพิ่ม ทั้งโมเดลร่างและ cache ของมันกินแรม ถ้าโมเดลหลักใช้เต็มเครื่องอยู่แล้ว จะแย่ลงแทนที่จะดีขึ้น [1]

ต้องมีคู่ที่เข้ากันได้ โมเดลร่างต้องใช้ tokenizer เดียวกับโมเดลหลัก และ draft model ของ EAGLE-3 ต้องเทรนมาสำหรับโมเดลเป้าหมายตัวนั้นโดยเฉพาะ เอกสารยกตัวอย่างว่า Qwen3-4B_eagle3 ใช้กับ Qwen/Qwen3-4B [1]

บางแบบยังรองรับแคบ ตัวอย่างคือ DSpark ที่เอกสารระบุว่าปัจจุบันรองรับเฉพาะ draft ที่มี backbone เป็น Qwen3 และมีแผนจะรองรับ Gemma4 ในอนาคต [1]

ต้องวัดของตัวเอง ตัวเลข 6.5 เท่าเป็นผลจากการทดลองของทีมวิจัยบนงานที่กำหนด ไม่ใช่ตัวเลขที่รับประกันได้กับทุกงาน [4]


ถ้าคุณอยากเริ่ม ลำดับที่ผมแนะนำคือ เริ่มจากแบบ n-gram ก่อน เพราะไม่ต้องโหลดโมเดลเพิ่มและไม่มีค่าใช้จ่ายด้านหน่วยความจำ ถ้าได้ผลก็ไม่ต้องทำอะไรต่อ [1]

⇒ ถ้ายังไม่พอ ค่อยเพิ่มโมเดลร่างแบบธรรมดา และถ้าใช้โมเดลที่มียอดนิยมอย่าง Qwen หรือ Llama อยู่แล้ว ค่อยมองหา draft model ของ EAGLE-3 ที่มีคนเทรนไว้แล้ว [1][4]

และทุกครั้ง ให้วัดด้วยคำสั่งเดิมทั้งเปิดและปิด เพราะเพดานที่แท้จริงขึ้นอยู่กับอัตราการยอมรับบนงานของคุณ ไม่ใช่บนงานของคนอื่น [3]

แหล่งอ้างอิง

[1] llama.cpp — "Speculative Decoding" (เอกสารทางการของโปรเจกต์), กันยายน 2026 — https://github.com/ggml-org/llama.cpp/blob/master/docs/speculative.md

[2] Zack Li — "Speculative Decoding Deep Dive III: EAGLE, DFlash", 4 กันยายน 2026 — https://zackli.ai/blog/speculative-decoding-3

[3] dev.to (ji_ai) — "Speculative Decoding: Why a Great Draft Model Still Caps Speedup", กันยายน 2026 — https://dev.to/ji_ai/speculative-decoding-why-a-great-draft-model-still-caps-speedup-12i1

[4] arXiv — "EAGLE-3: Scaling up Inference Acceleration of Large Language Models via Training-Time Test" (Yuhui Li และคณะ), arXiv:2503.01840v3, 2025 (แก้ไขล่าสุด 23 เมษายน 2025) — https://arxiv.org/abs/2503.01840

[5] Tai Bui — "EAGLE-3 Speculative Decoding in Production", 2026 — https://taibui.dev/phases/17-infrastructure-and-production/05-eagle3-speculative-decoding

Top comments (0)