چیتشیت
دیکودینگ حدسی: پیشنویس، EAGLE و MTP
Speculative Decoding: Draft, EAGLE, MTP
پیشنویس و اعتبارسنجی بدون افت کیفیت. پیشنویس Vanilla، Medusa، EAGLE-3 و MTP، محاسبات شتاب، پیکربندی vLLM، گیتهای کنترلی.
فهرست مطالب
مقایسهی انواع مدل پیشنویس
مقایسه| عامل | پیشنویس Vanilla | Medusa | EAGLE-3 | MTP (DeepSeek-V3) |
|---|---|---|---|---|
| پیشنویس | LLM کوچک مجزا | هدهای LM اضافه روی مدل اعتبارسنج | ترکیب ویژگیهای چندلایه + TTT | 1 بلوک ترنسفورمر + تصویر |
| زمان آموزش | استفاده مجدد از یک مدل موجود | مرحلهی SFT روی مدل اعتبارسنج | پس از پیشآموزش | حین پیشآموزش |
| هزینهی آموزش | صفر | حدود 1 میلیارد توکن SFT | حدود 60 تا 200 میلیارد توکن | حدود 10٪ پیشآموزش کندتر |
α | 0.55-0.70 | 0.65-0.75 | 0.88-0.92 | بیش از 0.80 در عمق 1 |
| شتاب | 1.8-2.3× | 2-3× | 3.5-6.5× | 1.8× |
| مدل دوم | بله | خیر | هد پیشنویس بسیار کوچک | خیر، بخشی از مدل است |
| وزنهای موجود | بله | نیاز به فاینتیون دارد | بله | خیر، آموزش مجدد |
یک گام حدسی
گامبهگام- پیشنویسمدل ارزان $M_p$ تعداد $N$ توکن را با احتمالات $p_1 \ldots p_N$ پیشنهاد میدهد.
- اعتبارسنجیمدل اعتبارسنج $M_q$ یک بار روی پیشوند به همراه پیشنویسها اجرا میشود و $q_1 \ldots q_{N+1}$ را بازمیگرداند.
- پذیرشپیمایش از چپ به راست. پذیرش با احتمال $\min(1, q_i(d_i) / p_i(d_i))$.
- رددر اولین رد، نمونهگیری از حالت نرمالشدهی $(q_j - p_j)_+$. پیشنویسهای بعدی دور ریخته میشوند.
- پاداشوقتی همهی $N$ توکن پذیرفته شدند، یک توکن دیگر از $q_{N+1}$ نمونهگیری کنید.
- بازگشت به عقبکش کلید-مقدار را به اندازهی طول پیشوند پذیرفتهشده تنظیم کنید.
- نتیجهتوزیع خروجی دقیقاً منطبق بر اجرای تکی مدل اعتبارسنج است.
حلقهی الگوریتم در کد
کدpython
for i, d in enumerate(drafts):
u = rng.random()
ratio = q_prob / p_prob if p_prob > 0 else float("inf") # q مدل اعتبارسنج، p مدل پیشنویس
if u < min(1.0, ratio):
emitted.append(d)
kv.extend(1) # پذیرفته شد: کش یک واحد رشد میکند
else:
correction = sample(residual(q, p), rng) # حالت نرمالشدهی مجدد (q - p)+
emitted.append(correction)
kv.truncate_to(prefix_len + len(emitted)) # بازگشت وضعیت کش کلید-مقدار
return emitted, 1 # یک گذر رو به جلوی مدل اعتبارسنج
bonus = sample(q, rng) # همهی N پذیرفته شدند: توکن رایگان
emitted.append(bonus)
پشتهی سرویسدهی
معماریدستورات
دستورها| دستور | عملکرد |
|---|---|
vllm serve <model> --speculative-config '{"method": "eagle", "model": "<draft>", "num_speculative_tokens": 5}' | هد پیشنویس EAGLE |
--speculative-config '{"method": "draft_model", "model": "meta-llama/Llama-3.2-1B-Instruct", "num_speculative_tokens": 5}' | مدل پیشنویس Vanilla |
--speculative-config '{"model": "<draft>", "num_speculative_tokens": 5, "method": "eagle3"}' | پیشنویس EAGLE-3 |
python main.py --vocab 64 --alpha 0.75 --k 4 --samples 50000 | قاعدهی رد، بررسی بازهی آلفا، دموی ماسک درختی |
توابع موجود در درسها
کار و کد| وظیفه | کد |
|---|---|
| باقیمانده در زمان رد | residual(q, p) |
| یک گام با بازگشت وضعیت کش کلید-مقدار | spec_step(q, p, N, kv, rng) |
| توکنها به ازای هر اعتبارسنجی | expected_tokens_per_verify(alpha, N) |
| زمان واقعی به ازای هر توکن | wall_time_per_token(alpha, N, c) |
| شتاب برای یک پیکربندی | expected_speedup(p) |
| ماسک اعتبارسنجی درختی | tree_attention_mask(tree) |
| بررسی توزیع | chi_square(observed, expected) |
| نرخ پذیرش اندازهگیریشده | m.acceptance_rate(k) |
محاسبات شتاب
مفهومها- توکنها به ازای هر اعتبارسنجی
- $\mathbb{E}[\text{accepted}] = \frac{1 - \alpha^{N+1}}{1 - \alpha}$
- مثال
α = 0.8, K = 4مقدار 3.36 توکن در هر گذر رو به جلو میدهد.- زمان واقعی به ازای هر توکن
(N * c + 1) / E[accepted]، با فرضc = cost(draft) / cost(verifier).- بزرگترین اهرم
- نرخ پذیرش
αبیشتر از طول پیشنویسNشتاب را افزایش میدهد. - فرم محیط عملیاتی
S(alpha, K) = (1 + K*alpha) / (1 + verify_overhead)- نقطهی سرربهسر
alpha_breakeven = verify_overhead / K. با افزایش همزمانی بالاتر میرود.- تابع زیان (loss) مدل MTP
- $L_{\text{MTP}} = \frac{\lambda}{D} \sum_{k=1}^{D} L_k$، ابتدا
lambdaبا 0.3 و سپس 0.1.
پیشفرضهای اسکریپت
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
--vocab | 32 | اندازهی دایره واژگان، حداقل 2 |
--alpha | 0.75 | نرخ پذیرش هدف در بازهی (0, 1] |
--k | 4 | طول پیشنویس، حداقل 1 |
--samples | 20000 | تعداد نمونه |
--seed | 0 | سید تصادفی |
n_tokens | 1000 | simulate_tail توکن در هر اجرا |
عیبیابی
عیبیابیعدم شتاب پس از استقرار
- علت
- دیکودینگ حدسی نیاز به فعالسازی دستی دارد
- راهحل
speculative_configرا صراحتاً تنظیم کنید
میانگین ITL کاهش و P99 ITL افزایش مییابد
- علت
- پیشنویسهای ردشده به دو گذر نیاز دارند
- راهحل
- P99 ITL را رصد کنید، قبل از عرضه آن را تنظیم کنید
αزیر 0.55 روی ترافیک واقعی- علت
- مدل پیشنویس روی دادههای عمومی آموزش دیده
- راهحل
- یک پیشنویس تخصصی دامنه آموزش دهید یا آن را غیرفعال کنید
افت شدید
α- علت
- نمونهگیری خلاقانه با دمای بالا
- راهحل
- برگشت به رمزگشایی ساده
عدم بهبودی در همزمانی بالا
- علت
- دستهبندی (batching) در حال حاضر تمام FLOPs را پر کرده است
- راهحل
- نقطهی سرربهسر را در همان همزمانی بسنجید
خرابی کش پس از رد شدن
- علت
- دادههای فراتر از
j-1نوشتهشده باقی میمانند - راهحل
- برش به اندازهی پیشوند پذیرفتهشده
بهبود ناچیز روی مدل کوچک
- علت
- پیشنویس تفاوت هزینهی چندانی ندارد
- راهحل
- دیکودینگ حدسی را برای مدلهای زیر 3B نادیده بگیرید
چه زمانی از هر پیشنویس استفاده کنیم
نکتهها- استفاده از پیشنویس vanilla برای یک پیشنمونهی سریع بدون نیاز به آموزش.
- استفاده از هدهای Medusa در صورتی که میتوانید مدل اعتبارسنج را فاینتیون کنید.
- استفاده از EAGLE-2 یا EAGLE-3 در محیط عملیاتی برای حداکثر سرعت.
- استفاده از lookahead وقتی هیچ پیشنویس، آموزش و پارامتر اضافی نمیخواهید. انتظار 1.3 تا 1.6× داشته باشید.
- استفاده از MTP در صورتی که کنترل پیشآموزش دست شماست و hidden size حداقل 4096 است.
- استفاده از دیکودینگ حدسی برای کاهش تاخیر چت، خروجی کد و JSON، و تولید متنهای طولانی.
- رد شدن از آن برای خروجیهای زیر 50 توکن و کارهای آفلاین با batch-1.
اختصارات
اصطلاحها- α
- نرخ پذیرش. شانس پذیرفته شدن هر توکن پیشنویس توسط مدل اعتبارسنج.
- K یا N
- طول پیشنویس. معمولاً 4 تا 8 توکن به ازای هر فوروارد هدف.
- EAGLE
- پیشنویس بسیار کوچک مشروط به وضعیتهای پنهان مدل اعتبارسنج.
- TTT
- تست زمان آموزش. مدل پیشنویس حین آموزش خروجیهای خود را میبیند.
- MTP
- پیشبینی چندتوکنی. ماژولی که توکن
kگام جلوتر را پیشبینی میکند. - P99 ITL
- سنجهی دنبالهای که پس از فعالسازی دیکودینگ حدسی باید بررسی شود، نه P50.
- HPA
- مقیاسپذیری خودکار سرور بر اساس انتظار در صف، نه CPU.
پرسشها
پرسش و پاسخ- آیا دیکودینگ حدسی کیفیت خروجی را تغییر میدهد؟
- خیر. خروجی دقیقاً با توزیع مدل اعتبارسنج مطابقت دارد.
- چرا مرحلهی رمزگشایی فضا برای این کار باقی میگذارد؟
- رمزگشایی متکی به پهنای باند حافظه است و پردازنده بیکار میماند.
- چگونه مقدار alpha را در vLLM V1 بخوانیم؟
- مقدار
spec_decode_metrics.accepted_tokens_per_requestرا بر طول پیشنویس تقسیم کنید. - EAGLE-3 چه تغییری ایجاد کرد؟
- تابع زیان ویژگیها را حذف کرده و با تست زمان آموزش یاد میگیرد.
- چرا MTP یک پیشنویس خوب است؟
- ماژولهای متوالی، زنجیرهی علی را مشابه یک دیکودر حفظ میکنند.