اگر امروز از مدلهای ۷۰ میلیارد پارامتری روی سختافزارهای سازمانی استفاده میکنید، احتمالاً متوجه شدهاید که سرعت تولید متن بهشدت ناامیدکننده است. معمولاً سرعت تولید تنها به ۲۰ تا ۳۰ توکن در ثانیه میرسد. حقیقت این است که در حالی که شما منتظر جواب هستید، پروفایل سختافزاری نشان میدهد که هستههای محاسباتی GPU شما ۹۵ درصد از زمان خود را در حالت بیکاری میگذرانند. به نظر میرسد که هستههای پردازشی در حال تقلا هستند، اما واقعیت متفاوت است.
این ناکارآمدی از یک واقعیت سختافزاری نشأت میگیرد: مشکل ما قدرت محاسباتی خام نیست، بلکه پهنایباند حافظه است. این موضوع در تحلیل مفصل ما دربارهی علت ناکارآمدی سختافزاری در مدلهای زبانی بزرگ بررسی شده است که نشان میدهد چگونه بخش اعظم توان GPU صرف جابهجایی دادهها میشود. همانطور که در تحلیل قبلی ما دربارهی مدیریت هزینههای درگاههای API اشاره کردیم، مرز بعدی بهینهسازی در هوش مصنوعی برای محیطهای عملیاتی، بیرون کشیدن حداکثر توان از سختافزار موجود است. برای توسعهدهندگان، هدف این است که GPU را از حالت انتظار برای داده خارج کرده و مجبور به کار کنند.
دیوار پهنایباند حافظه
برای درک راهکار، باید به گذرگاه حافظه GPU نگاه کنید. در تولید متن استاندارد خودبازگشتی (Autoregressive Generation) — که در فاز رمزگشایی یا Decoding رخ میدهد — GPU باید برای تولید هر تکتوکن، تکتک پارامترهای وزن مدل را از حافظه پهنایباند بالا (HBM یا همان VRAM) به حافظه سریع روی تراشه (SRAM یا رجیسترها) منتقل کند.
این فرآیند شامل یک توالی مشخص است: ابتدا GPU وزنها را بارگذاری میکند، سپس یک ضرب ماتریس-بردار بین جاسازی (Embedding) تکتوکن ورودی و آن وزنها انجام میدهد و در نهایت، ورودی بهروزرسانی شدهی حافظه کلید-مقدار (KV Cache) را به VRAM بازمیگرداند.
برای یک مدل ۷۰ میلیارد پارامتری با دقت FP16، این یعنی استریم کردن ۱۴۰ گیگابایت داده برای هر توکن (۷۰ میلیارد پارامتر ضربدر ۲ بایت). در یک کارت Nvidia H100 که پهنایباند حافظهای در حدود ۳,۳۵۰ گیگابایت بر ثانیه و قدرت محاسباتی Tensor Core حدود ۱,۹۷۹ ترافلاپس (TFLOPs) در حالت FP16 دارد، محاسبات تکاندهنده است:
- زمان صرف شده برای استریم وزنها: $140\text{ GB} / 3,350\text{ GB/s} \approx 41.8\text{ ms}$
- زمان صرف شده برای محاسبات ریاضی: تولید یک توکن تقریباً به $1.4 \times 10^{11}$ عملیات FLOP نیاز دارد ($2 \times 70 \times 10^9$). این کار زمان میبرد: $1.4 \times 10^{11} / 1,979 \times 10^{12} \approx 0.07\text{ ms}$
GPU حدود ۹۹ درصد زمان خود را صرف جابهجایی داده میکند و تقریباً هیچ زمانی را صرف محاسبات واقعی نمیکند. شدت محاسباتی (Arithmetic Intensity) — یعنی نسبت FLOPs به هر بایت منتقل شده — تقریباً ۱ است. این مقدار بسیار پایینتر از آستانه اشباع GPU است که حدود ۱۵۰ FLOP بر بایت است.
در یک ساختار سنتی با اندازه دسته (Batch Size) برابر با ۱، این چرخه برای هر توکن دقیقاً تکرار میشود. برای تولید ۳ توکن، GPU باید ۱۴۰ گیگابایت وزنها را سه بار مجزا بارگذاری کند. این منجر به زمان کل حدود ۱۲۵ میلیثانیه برای تنها ۳ توکن میشود، که بخش اعظم آن صرف انتقال حافظه شده است نه محاسبات.

بینش کلیدی: تأیید موازی
نکته شگفتانگیز اینجاست: تأیید پنج توکن بهصورت موازی، تقریباً همان زمانی را میبرد که تولید یک توکن زمان میبرد. اگر پنج توکن کاندید را همزمان به مدل هدف بدهیم، GPU باز هم همان ۱۴۰ گیگابایت وزن را دقیقاً یکبار بارگذاری میکند (۴۱.۸ میلیثانیه).
در این حالت، بهجای یک بردار $[1 \times d]$، هستههای Tensor اکنون یک ماتریس $[5 \times d]$ را در وزنها ضرب میکنند. زمان محاسبات کمی افزایش مییابد و از ۰.۰۷ میلیثانیه به ۰.۳۵ میلیثانیه میرسد، اما هزینه غالب همچنان همان انتقال حافظه ۴۱.۸ میلیثانیهای است.
- ارزیابی ۱ توکن: ۴۱.۸ میلیثانیه (حافظه) + ۰.۰۷ میلیثانیه (محاسبه) = ۴۱.۸۷ میلیثانیه
- ارزیابی ۵ توکن: ۴۱.۸ میلیثانیه (حافظه) + ۰.۳۵ میلیثانیه (محاسبه) = ۴۲.۱۵ میلیثانیه
تأیید در اینجا اساساً «رایگان» است. رمزگشایی گمانهزنانه از این عدم تقارن با تقسیم تولید متن به دو نقش متمایز بهره میبرد: یک مدل پیشنویس (Draft Model) سبک و یک مدل هدف (Target Model) سنگین.
چرخه اجرای گمانهزنانه
این فرآیند در هر تکرار از یک خط لوله (Pipeline) سختگیرانه و گامبهگام عبور میکند:
گام ۱: فاز پیشنویس
یک مدل کوچک (مثلاً ۱ میلیارد پارامتری) بهسرعت $K$ توکن را بهصورت متوالی حدس میزند. چون این مدل بسیار کوچک است (تنها حدود ۲ گیگابایت در FP16)، استریم کردن وزنهای آن کمتر از ۰.۶ میلیثانیه برای هر توکن زمان میبرد. تولید پنج توکن پیشنویس تقریباً $5 \times 0.6\text{ ms} = 3.0\text{ ms}$ زمان میبرد. برای هر توکن، مدل پیشنویس توزیع احتمالی پیشبینی شده خود را $q(x)$ ثبت میکند.
گام ۲: فاز تأیید
تمام $K$ توکن پیشنویس به دنبال توالی ورودی قرار گرفته و توسط مدل هدف ۷۰ میلیارد پارامتری در یک گذر پیشرو (Forward Pass) موازی ارزیابی میشوند. چون ماسک توجه (Attention Mask) اجازه میدهد هر توکن در موقعیت $i$ به تمام توکنهای قبلی دسترسی داشته باشد، مدل هدف توزیعهای احتمالی واقعی $p_1(x), p_2(x), \dots, p_K(x)$ را برای تمام $K$ موقعیت بهطور همزمان تولید میکند.
گام ۳: فاز نمونهگیری
یک نمونهگیر ردکننده (Rejection Sampler)، احتمالات پیشنویس را با احتمالات هدف مقایسه میکند. سیستم توکنها را از $i = 1$ تا $K$ بررسی کرده و یک عدد تصادفی یکنواخت $r \sim U[0, 1]$ استخراج میکند.
- پذیرش: اگر $r \le \min(1, p(\hat{x}_i) / q(\hat{x}_i))$ باشد، توکن پذیرفته شده و سیستم به $i+1$ میرود.
- رد: اگر این شرط در موقعیت $j$ برقرار نباشد، توکن $\hat{x}j$ رد میشود. یک توکن جایگزین از توزیع باقیمانده نمونهبرداری میشود: $p'(x) = \frac{\max(0, p(x) - q(x))}{\sum{y} \max(0, p(y) - q(y))}$.
- حذف: تمام توکنهای پیشنویس بعدی $(\hat{x}_{j+1}, \dots, \hat{x}_K)$ بلافاصله دور ریخته میشوند.
اگر تمام $K$ توکن پذیرفته شوند، سیستم یک توکن «بونوس» یا جایزه $(K+1)$-ام را مستقیماً از آخرین لوجیتهای مدل هدف $p_{K+1}(x)$ نمونهبرداری میکند که میتواند منجر به تولید $K+1$ توکن در یک گام شود.
دقت ریاضی مطلق
بسیاری از توسعهدهندگان این روش را با تقریبهای دارای فقدان مانند کوانتش (Quantization) یا هرس کردن (Pruning) اشتباه میگیرند. اما طبق الگوریتم توسعهیافته توسط Leviathan & Chen، رمزگشایی گمانهزنانه از نظر ریاضی بدون فقدان (Lossless) است.
احتمال تولید هر توالی دقیقاً مشابه تولید آن بهطور مستقیم توسط مدل بزرگ است. این موضوع با این حقیقت اثبات میشود که احتمال کل انتشار توکن $x$ برابر است با مجموع احتمال اینکه توکن پیشنویس شده و پذیرفته شود — $\min(p(x), q(x))$ — و احتمال اینکه پس از یک رد، از توزیع باقیمانده نمونهبرداری شود — $p(x) - \min(p(x), q(x))$.
بهطور مشخص، احتمال رد کل در تمام توکنهای ممکن برابر است با $1 - \alpha = 1 - \sum_{y} \min(p(y), q(y)) = \sum_{y} \max(0, p(y) - q(y))$. وقتی یک رد رخ میدهد، احتمال انتخاب $x$ از توزیع نرمالشده باقیمانده برابر است با $p'(x) = \frac{\max(0, p(x) - q(x))}{1 - \alpha}$. احتمال مشترک رد شدن و انتخاب $x$ برابر است با $(1 - \alpha) \times \frac{\max(0, p(x) - q(x))}{1 - \alpha} = \max(0, p(x) - q(x))$.
با جمع این دو، مقدار $p(x)$ به دست میآید. توزیع پیشنویس $q(x)$ بهطور جبری حذف میشود، به این معنی که دقت مدل پیشنویس (چه ۵۰٪ باشد چه ۹۰٪) فقط روی سرعت اثر میگذارد و هرگز بر صحت خروجی تأثیر نمیگذارد.
گونههای معماری مدرن
فراتر از مدلهای پیشنویس مستقل (مانند استفاده از Llama-3-8B برای پیشنویس Llama-3-70B)، جامعه توسعهدهندگان نسخههای یکپارچهتری را در موتورهایی مانند vLLM، SGLang و llama.cpp ایجاد کردهاند:
- Medusa (رمزگشایی خود-گمانهزنانه چند-سره): بهجای داشتن یک مدل دوم در VRAM، مدوسا چندین «سر» رمزگشایی پیشخور (Feed-forward) سبک را به حالت پنهان نهایی مدل هدف متصل میکند. سر اول $t+1$، سر دوم $t+2$ و به همین ترتیب را پیشبینی میکند و بدین ترتیب اثر حافظهای مدل پیشنویس حذف میشود.
- EAGLE (تولید خودبازگشتی توسعهپذیر): مدلهای پیشنویس استاندارد روی توکنهای متنی کار میکنند. EAGLE بردارهای ویژگی لایههای بالایی مدل هدف را به سر پیشنویس منتقل میکند و نرخ پذیرش توکنها را از حدود ۶۰٪ به بیش از ۸۰-۸۵٪ میرساند.
- SpecInfer (توجه مبتنی بر درخت): پیشنویس خطی شکننده است؛ اگر اولین توکن رد شود، بقیه هدر میروند. SpecInfer درختی از چندین شاخه گمانهزنانه (مثلاً ۲ کاندید برتر در هر عمق) میسازد. مدل هدف تمام شاخهها را بهطور موازی با استفاده از یک ماسک توجه دوبعدی سفارشی تأیید میکند.
محدودیتهای استقرار
رمزگشایی گمانهزنانه یک پیروزی همیشگی نیست. این روش در چهار سناریوی خاص شکست میخورد یا به عملکرد آسیب میزند:
- اندازه دستههای بالا (اشباع محاسباتی): این روش بر روی توان محاسباتی آزاد GPU تکیه دارد. هنگام سرویسدهی به صدها درخواست همزمان (اندازه دسته ۳۲، ۶۴ یا ۱۲۸)، GPU در حال حاضر ۱۰۰٪ در حالت اشباع محاسباتی است. افزودن گامهای پیشنویس باعث ایجاد تداخل محاسباتی و کاهش توان عملیاتی کلی میشود. این روش عمدتاً در اندازه دستههای ۱ تا ۸ میدرخشد.
- دمای بالا و آنتروپی خلاقانه: وظایف خلاقانه (Temperature > 1.0) آنتروپی خروجی را افزایش میدهند. در نتیجه همپوشانی $\alpha = \sum \min(p, q)$ کوچک شده و باعث رد شدنهای زودهنگام و مکرر میشود. این روش روی خروجیهای ساختاریافته، کد و استدلالهای قطعی ($T \le 0.7$) بهترین عملکرد را دارد.
- عدم تطابق واژگان: مدل پیشنویس و هدف باید دقیقاً از یک واژگان توکنساز (Tokenizer) و نگاشت توکنهای خاص یکسان استفاده کنند. اگر شناسههای توکن به رشتههای یکسانی متصل نباشند، لوجیتها قابل مقایسه نیستند.
- محدودیتهای VRAM: اجرای یک مدل پیشنویس مستلزم رزرو حافظه VRAM اضافی برای وزنها و یک KV-cache مجزا است. در کارتهای گرافیک مصرفکننده (۱۶ تا ۲۴ گیگابایت)، این حافظه اضافی ممکن است مدل هدف را مجبور به استفاده از فرمتهای کوانتایز شده کند یا باعث انتقال دادهها به بافرهای کندتر شود.
توازن مهندسی
این تغییر، فرض بنیادی استنتاج LLM را تغییر میدهد. ما از دنیایی که سعی میکردیم مدلها را کوچکتر کنیم، به دنیایی میرویم که از مدلهای کوچک استفاده میکنیم تا مدلهای بزرگ سریعتر به نظر برسند.
برای متخصصان، این بدان معناست که «نقطه بهینه» برای رمزگشایی گمانهزنانه، استریم با تأخیر کم، وظایف کدنویسی قطعی و حلقههای فراخوانی ابزار توسط ایجنتها است، جایی که اندازه دستهها کوچک (۱ تا ۸) است.
همانطور که در گزارشهای مهندسی تکمیلی ذکر شده، گلوگاه در حال تغییر از وزنهای استاتیک به منابع پویا مانند KV-cache است. برای مدیریت بهینه این منابع، میتوان به راهکارهای حافظه مجازی در برابر تخصیص ایستا در مدیریت KV-Cache اشاره کرد که چالشهای حافظه در مقیاس تولید را هدف قرار میدهد. مدیریت این حافظه اکنون چالش اصلی برای سیستمهای هوش مصنوعی در مقیاس تولید است.
برای بهینهسازی استقرار خود، شدت محاسباتی GPU را مانیتور کنید. اگر هستههای محاسباتی شما در حالی که گذرگاه حافظه اشباع شده است بیکار میمانند، رمزگشایی گمانهزنانه مؤثرترین اهرم شما برای افزایش عملکرد است.




گفتگو