بدون افت کیفیت، اما نه رایگان: چه زمانی Speculative Decoding کارآمد است؟

Speculative Decoding یکی از موضوعات داغ در استنتاج (inference) مدل‌های زبانی بزرگ (LLM) است.

شرکت‌هایی مانند DSpark ادعا می‌کنند که سرعت را ۶۰٪ تا ۸۵٪ افزایش می‌دهند. گوگل نیز تحقیقاتی را در مورد این روش منتشر کرده است.

مفهوم آن ساده است: یک مدل پیش‌نویس (draft model) کوچک، توکن‌ها را می‌نویسد. یک مدل هدف (target model) بزرگ، آن‌ها را در یک مرحله تأیید می‌کند. این کار فرآیند تولید را سریع‌تر می‌کند.

اما به عنوان یک مهندس، باید دو سوال بپرسید:

  • آیا باعث افزایش توهم (hallucination) می‌شود؟
  • آیا مدل اضافی باعث هدر رفتن منابع محاسباتی می‌شود؟

بیایید به واقعیت‌ها نگاه کنیم.

اول اینکه، کیفیت بدون افت است (lossless). مدل هدف هر توکن را تأیید می‌کند. اگر مدل پیش‌نویس در توکن سوم دچار اشتباه شود، مدل هدف آن را رد کرده و از همان نقطه دوباره تولید می‌کند. خروجی از نظر ریاضی دقیقاً مشابه خروجی مدل هدف به تنهایی است. این روش توهمات را تشدید نمی‌کند.

دوم اینکه، هزینه واقعی است. اجرای یک مدل کوچک بسیار ارزان‌تر از یک مدل بزرگ است. هزینه اجرای یک مدل 7B ممکن است یک‌دهم هزینه یک مدل 70B باشد.

Speculative Decoding یک شرط‌بندی است.

  • در صورت موفقیت کامل (hit)، در محاسبات بسیار صرفه‌جویی می‌کنید.
  • در صورت شکست کامل (miss)، شما بازنده هستید. شما هم مدل پیش‌نویس را اجرا می‌کنید و هم مراحل اضافی مدل هدف را طی می‌کنید. این حالت از استنتاج استاندارد کندتر است.

برای برنده شدن، باید این قانون را رعایت کنید: میانگین تعداد توکن‌های پذیرفته‌شده باید بیشتر از ۱ به‌علاوه سربار (overhead) مدل پیش‌نویس باشد.

اگر مدل پیش‌نویس شما در یک وظیفه خاص ضعیف باشد، نرخ پذیرش (acceptance rate) شما کاهش می‌یابد. اگر این نرخ خیلی پایین بیاید، Speculative Decoding سیستم شما را کندتر می‌کند.

چگونه تصمیم بگیرید که آیا باید از آن استفاده کنید یا خیر:

  1. نرخ پذیرش خود را اندازه‌گیری کنید. به بنچمارک‌های عمومی اعتماد نکنید. از داده‌ها و وظایف خودتان استفاده کنید.
  2. نوع وظیفه خود را بررسی کنید. از آن برای وظایف قابل پیش‌بینی مانند تکمیل کد (code completion) استفاده کنید. از آن برای وظایف غیرقابل پیش‌بینی مانند نویسندگی خلاق اجتناب کنید.
  3. تأخیر (latency) p99 خود را مانیتور کنید. یک شکست کامل باعث جهش در تأخیر می‌شود.

بهترین بهینه‌سازی آن چیزی نیست که همیشه برنده می‌شود؛ بلکه آن چیزی است که بدانید چه زمانی باید آن را خاموش کنید.

زمانی که نرخ موفقیت (hit rate) بالا است از آن استفاده کنید. زمانی که نرخ موفقیت سقوط می‌کند، استفاده از آن را متوقف کنید.

Source: https://dev.to/zxpmail/lossless-but-not-free-the-lossless-but-not-free-when-speculative-decoding-actually-pays-off-1c2g

Optional learning community: https://t.me/GyaanSetuAi