فاز 17 · درس 8

معیارهای ارزیابی استنتاج LLM — آشنایی با TTFT، TPOT، ITL و Goodput

نوع
مفهومی
زمان
حدود 60 دقیقه
زبان‌ها
Python (stdlib, toy percentile calculator, goodput reporter)
پیش‌نیاز
فاز 17 · 04 (سازوکار داخلی موتور سرویس‌دهی)
نمودار عقربه‌ای چندگانه و سنجه‌های مانیتورینگ عملکرد تاخیر شبکه و زمان پاسخگویی بدون هیچ‌گونه نوشته
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم پایه
  4. زمان تا اولین توکن (TTFT)
  5. تاخیر بین توکن‌ها (TPOT / ITL)
  6. تاخیر سرتاسری (E2E)
  7. نرخ پردازش (Throughput)
  8. گودپوت (Goodput) — معیاری که واقعاً اهمیت دارد
  9. چرا میانگین آماره‌ی غلطی است؟
  10. ارقام مرجع — Llama-3.1-8B-Instruct روی TRT-LLM، سال 2026
  11. تله‌ی اندازه‌گیری
  12. طراحی یک SLO
  13. روش اندازه‌گیری
  14. اجرای عملی
  15. پیاده‌سازی نهایی
  16. تمرین‌ها
  17. اصطلاحات کلیدی
  18. منابع تکمیلی

در راه‌اندازی و سرویس‌دهی مدل‌های زبانی بزرگ، اتکا به اعدادی مثل «نرخ پردازش توکن در ثانیه» اغلب فریبنده است. اگر سیستمی بتواند هزاران توکن پردازش کند اما پاسخ‌ها با تاخیر به دست کاربر برسند یا نشست‌ها قطع شوند، زیرساخت در عمل شکست خورده است. برای سنجش کیفیت واقعی تجربه کاربری، به تفکیک دقیق گلوگاه‌های تاخیر در مراحل مختلف نیاز دارید.

این درس به کالبدشکافی شاخص‌های کلیدی استنتاج یعنی زمان تا اولین توکن (TTFT)، زمان تولید هر توکن (TPOT / ITL)، تاخیر سرتاسری (E2E) و معیار ترکیبی گودپوت (Goodput) می‌پردازد. همچنین تله‌های آماری استفاده از میانگین و دلایل اختلاف ارقام در ابزارهای بنچمارک مطرح را مرور می‌کنیم تا بتوانید توافق‌نامه‌های سطح سرویس (SLO) دقیق و قابل اتکا تدوین کنید.

پنج معیار نشان می‌دهند استقرار استنتاج (Inference) شما درست کار می‌کند یا نه. زمان تا اولین توکن (Time to First Token یا TTFT) حاصل‌جمع زمان پیش‌پرکنی (Prefill)، صف و شبکه است. زمان به ازای هر توکن خروجی (Time Per Output Token یا TPOT که معمولاً با عنوان تاخیر بین‌توکنی یا ITL گزارش می‌شود، هرچند ابزارها سر این‌که ITL توکن اول را هم می‌شمارد یا نه هم‌نظر نیستند) هزینه‌ی رمزگشایی (Decode) محدود به حافظه به ازای هر توکن است. تاخیر سرتاسری (End-to-end latency) برابر است با TTFT به‌علاوه‌ی TPOT ضربدر طول خروجی. نرخ پردازش (Throughput) مجموع تعداد توکن‌های پردازش‌شده در ثانیه در کل کلاستر است. اما معیاری که برای موفقیت محصول تعیین‌کننده است، گودپوت (Goodput) نام دارد؛ یعنی نسبت درخواست‌هایی که توانسته‌اند هم‌زمان به تک‌تک اهداف سطح سرویس (SLO) برسند. نرخ پردازش بالا با گودپوت پایین یعنی توکن‌هایی تولید می‌کنید که هیچ‌وقت به‌موقع دست کاربر نمی‌رسند. اعداد مرجع مدل Llama-3.1-8B-Instruct روی TRT-LLM در سال 2026: میانگین TTFT برابر با 162 میلی‌ثانیه، میانگین TPOT معادل 7.33 میلی‌ثانیه و میانگین تاخیر سرتاسری 1,093 میلی‌ثانیه. همیشه صدک‌های P50، P90 و P99 را گزارش کنید، نه صرفاً میانگین را. مراقب تله‌ی اندازه‌گیری هم باشید: GenAI-Perf در محاسبه‌ی ITL مقدار TTFT را کنار می‌گذارد، ولی LLMPerf آن را حساب می‌کند؛ به همین خاطر دو ابزار برای یک اجرای کاملاً یکسان، ارقام متفاوتی برای TPOT می‌دهند.

اهداف یادگیری

  • تعریف دقیق TTFT، TPOT، ITL، E2E، نرخ پردازش و گودپوت، و شناخت بخشی که هر کدام اندازه می‌گیرند.
  • توضیح این‌که چرا میانگین آماره‌ی غلطی برای ارزیابی سرویس‌دهی مدل‌های زبانی است و چطور باید صدک‌های P50/P90/P99 را تحلیل کرد.
  • تعریف یک SLO چندشرطی (مثلاً TTFT کمتر از 500 میلی‌ثانیه AND تاخیر TPOT کمتر از 15 میلی‌ثانیه AND تاخیر سرتاسری کمتر از 2 ثانیه) و محاسبه‌ی گودپوت بر اساس آن.
  • نام بردن دو ابزار بنچمارک که برای یک اجرای یکسان مقادیر متفاوتی از TPOT گزارش می‌کنند و توضیح دلیل این تفاوت.

صورت مسئله

«نرخ پردازش ما 15,000 توکن در ثانیه است.» خب که چه؟ اگر 40% درخواست‌ها تاخیر سرتاسری بالای 2 ثانیه داشته باشند، کاربر نشست (Session) را می‌بندد و می‌رود. نرخ پردازش به‌تنهایی نشان نمی‌دهد محصول واقعاً کار می‌کند یا نه.

استنتاج، ابعاد مختلفی از تاخیر دارد و هر بعد هم به شکل متفاوتی افت می‌کند. پیش‌پرکنی، محدود به توان پردازشی (Compute-bound) است و با طول پرامپت (Prompt) بالا می‌رود. رمزگشایی، محدود به پهنای باند حافظه (Memory-bound) است و متناسب با اندازه‌ی بچ (Batch size) افزایش می‌یابد. تاخیر صف یک مشکل عملیاتی است. تاخیر شبکه هم به فاصله‌ی فیزیکی ربط دارد. برای هرکدام از این‌ها به معیاری جداگانه نیاز دارید؛ به صدک‌ها نیاز دارید؛ و نهایتاً به یک معیار ترکیبی واحد نیاز دارید که نشان دهد «آیا کاربر همان کیفیتی را که انتظار داشت دریافت کرد یا نه»؛ این معیار، گودپوت است.

مفاهیم پایه

زمان تا اولین توکن (TTFT)

TTFT = queue_time + network_request + prefill_time

وقتی پرامپت‌ها طولانی باشند، فاز پیش‌پرکنی زمان اصلی را می‌بلعد. روی مدل Llama-3.3-70B FP8 روی شتاب‌دهنده‌ی H100، یک پرامپت 32k حدود 800 میلی‌ثانیه پیش‌پرکنی خالص می‌برد. زمان صف ناشی از رفتار اسکژولر (Scheduler) زیر بار است. زمان درخواست شبکه هم مدت‌زمان انتقال داده روی کابل همراه با سربار TLS است. TTFT تاخیری است که کاربر قبل از بازگشت اولین تکه از خروجی جریانی (Stream) تجربه می‌کند.

تاخیر بین توکن‌ها (TPOT / ITL)

برای یک مفهوم واحد، اسم‌های مختلفی هست: TPOT (زمان به ازای هر توکن خروجی)، ITL (تاخیر بین‌توکنی)، decode latency per token (تاخیر رمزگشایی به ازای هر توکن)؛ همگی یکی هستند. این معیار، فاصله‌ی زمانی بین توکن‌های متوالی و پشت‌سرهم بعد از تولید توکن اول است.

TPOT = (decode_forward_time + scheduler_overhead) / tokens_produced

روی همان استک Llama-3.3-70B روی H100 همراه با پیش‌پرکنی تکه‌ای (Chunked prefill)، میانگین TPOT حدود 7 میلی‌ثانیه است. بدون پیش‌پرکنی تکه‌ای، اگر در یک توالیِ هم‌جوار پیش‌پرکنیِ سنگینی اجرا شود، ممکن است TPOT ناگهان تا 50 میلی‌ثانیه جهش کند. همیشه P99 را رصد کنید، نه میانگین را.

تاخیر سرتاسری (E2E)

E2E = TTFT + TPOT * output_tokens + network_response

در خروجی‌های طولانی (بیش از 500 توکن)، بخش عمده‌ی E2E تحت تاثیر TPOT است. در خروجی‌های کوتاه با پرامپت‌های طولانی، TTFT سهم اصلی را دارد. به همین دلیل تاخیر سرتاسری را همیشه مشروط به طول خروجی گزارش کنید.

نرخ پردازش (Throughput)

throughput = total_output_tokens / elapsed_time

یک معیار تجمیعی است. کارایی کل کلاستر را نشان می‌دهد، اما از سلامت تک‌تک درخواست‌ها اطلاعی نمی‌دهد.

گودپوت (Goodput) — معیاری که واقعاً اهمیت دارد

goodput = fraction of requests meeting (TTFT <= a) AND (TPOT <= b) AND (E2E <= c)

اهداف سطح سرویس چندشرطی هستند. یک درخواست تنها وقتی «خوب» تلقی می‌شود که همه‌ی شرط‌ها را برآورده کند. گودپوت سهم این درخواست‌هاست. بعضی مقالات و داشبوردها گودپوت را به شکل یک نرخ گزارش می‌کنند: تعداد درخواست‌هایی در ثانیه که تمام SLOها را پاس کرده‌اند. برای تبدیل این دو حالت به هم، کافی است این نسبت را در نرخ درخواست‌ها ضرب کنید. نرخ پردازش بالا با گودپوت 60% یک شکست است؛ هدف اصلی، نرخ پردازش پایین‌تر با گودپوت 99% است.

در سال 2026، گودپوت معیار اصلی نتایج ارائه‌شده به MLPerf Inference v6.0 و پایش داخلی توافق‌نامه‌های سطح خدمات (SLA) در پلتفرم‌های ابری هوش مصنوعی است.

چرا میانگین آماره‌ی غلطی است؟

توزیع تاخیر در مدل‌های زبانی چولگی به راست (Right-skewed) دارد. یک بچ در فاز رمزگشایی با همسایه‌ای که درگیر پیش‌پرکنی طولانی است، می‌تواند 500 توکن را با TPOT حدود 7 میلی‌ثانیه و 20 توکن را با TPOT حدود 60 میلی‌ثانیه تحویل دهد. میانگین TPOT حدود 9 میلی‌ثانیه می‌شود، اما P99 آن 65 میلی‌ثانیه است. کاربران مرتباً با همین تاخیر P99 برخورد می‌کنند و دقیقاً به خاطر همین تاخیر است که سرویس را ترک می‌کنند.

همیشه سه‌گانه (Triple) صدک‌های (P50، P90، P99) را بیاورید. برای بهبود تجربه‌ی کاربری، شاخصی که باید برایش بهینه‌سازی (Optimization) کنید، P99 است.

ارقام مرجع — Llama-3.1-8B-Instruct روی TRT-LLM، سال 2026

  • میانگین TTFT: معادل 162 میلی‌ثانیه
  • میانگین TPOT: معادل 7.33 میلی‌ثانیه
  • میانگین تاخیر سرتاسری: معادل 1,093 میلی‌ثانیه
  • صدک P99 تاخیر TPOT: بسته به تنظیمات پیش‌پرکنی تکه‌ای، بین 10 تا 25 میلی‌ثانیه متغیر است.

این اعداد، ارقام مرجع منتشرشده توسط NVIDIA هستند و با تغییر اندازه‌ی مدل (مدل 70B ارقامی بین 3 تا 5 برابر نشان می‌دهد)، سخت‌افزار (H100 در مقایسه با B200 حدود 3 برابر تفاوت دارد) و بار کاری تغییر می‌کنند.

تله‌ی اندازه‌گیری

دو تا از پرکاربردترین ابزارهای بنچمارک در سال 2026، برای یک اجرای کاملاً یکسان ارقام متفاوتی از TPOT می‌دهند:

  • NVIDIA GenAI-Perf: تاخیر TTFT را در محاسبه‌ی ITL حساب نمی‌کند و ITL را از توکن دوم به بعد در نظر می‌گیرد.
  • LLMPerf: زمان TTFT را در فرمول وارد می‌کند و ITL را از توکن اول می‌شمارد.

برای درخواستی با TTFT برابر 500 میلی‌ثانیه و خروجی 100 توکن طی 700 میلی‌ثانیه زمان رمزگشایی در کل، ابزار GenAI-Perf مقدار ITL = 700/99 = 7.07 ms را نشان می‌دهد، اما LLMPerf به عدد ITL = 1200/100 = 12.00 ms می‌رسد. انتخاب ابزار (Tool Choice) خروجی محاسبات را عوض می‌کند.

همیشه صراحتاً مشخص کنید از کدام ابزار استفاده کرده‌اید و شیوه‌ی محاسبه‌تان را هم بنویسید.

طراحی یک SLO

یک نمونه SLO منطقی برای محصول نهایی با مدل گفت‌وگوی 70B در سال 2026:

  • صدک P99 تاخیر TTFT کمتر یا مساوی 800 میلی‌ثانیه.
  • صدک P99 تاخیر TPOT کمتر یا مساوی 25 میلی‌ثانیه.
  • صدک P99 تاخیر سرتاسری کمتر یا مساوی 3 ثانیه برای خروجی‌های زیر 300 توکن.
  • هدف گودپوت بزرگ‌تر یا مساوی 99%.

در SLOهای سازمانی معمولاً TTFT سخت‌گیرانه‌تر (200 تا 400 میلی‌ثانیه) و E2E بازتر در نظر گرفته می‌شود. اصل ماجرا این است که این موارد را مکتوب کنید، هر سه را بسنجید و گودپوت را به عنوان یک معیار جامع پایش کنید.

روش اندازه‌گیری

  • تست را روی ترافیک واقعی یا ترافیک مصنوعی شبیه‌سازی‌شده به ترافیک واقعی اجرا کنید (مثلاً با LLMPerf و پارامترهای --mean-input-tokens 800 --stddev-input-tokens 300 --mean-output-tokens 150).
  • بنچمارک را روی ترافیکی معادل 2 برابر اوج هم‌زمانی اجرا کنید.
  • تست را در 30 تا 50 تکرار اجرا کنید و صدک‌ها را از کل نمونه‌های تجمیع‌شده به دست آورید.
  • نتایج را با ذکر نام ابزار، نسخه‌ی ابزار، مدل، سخت‌افزار، سطح هم‌زمانی و توزیع پرامپت منتشر کنید.
نرخ پردازش / تاخیراندازه دسته را بکشید
THROUGHPUT / LATENCYBlue is throughput, the dashed grey line is per-request latency. Bigger batches keep the GPU busier so total tokens per second climbs, but each individual request waits longer behind the others, so latency rises too. The knee (orange) is where throughput stops growing much while latency keeps climbing, which is the batch size most serving systems aim for.
رنگ آبی نرخ پردازش و خط‌چین خاکستری تاخیر هر درخواست است. دسته‌های بزرگ‌تر GPU را مشغول‌تر نگه می‌دارند، بنابراین مجموع توکن‌ها بر ثانیه افزایش می‌یابد، اما هر درخواست جداگانه زمان بیشتری در صف منتظر می‌ماند، در نتیجه تاخیر نیز بالا می‌رود. نقطه زانو (نارنجی) جایی است که رشد نرخ پردازش متوقف می‌شود در حالی که تاخیر همچنان صعودی است؛ این همان اندازه دسته‌ای است که اکثر سیستم‌های سرویس‌دهی هدف قرار می‌دهند.

اجرای عملی

اسکریپت code/main.py یک محاسبه‌گر ساده‌ی گودپوت است. می‌توانید یک توزیع تاخیر مصنوعی بسازید، یک SLO روی آن اعمال کنید و گودپوت را تحویل بگیرید. این کد همچنین تفاوت TPOT بین GenAI-Perf و LLMPerf را روی همان ردگیری محاسبات (Trace) به شما نشان می‌دهد.

آزمایشگاه بصری Inside an LLM Serving GPU نشان می‌دهد زمان به ازای هر توکن خروجی روی پردازنده‌ی NVIDIA L4 صرف چه بخش‌هایی می‌شود. در یک گام رمزگشایی باید 16.41 گیگابایت وزن خوانده شود که با پهنای باند 300 گیگابایت بر ثانیه حداقل 54.7 میلی‌ثانیه زمان می‌برد؛ مرحله‌ی اندازه‌گیری‌شده در عمل 60.16 میلی‌ثانیه طول کشیده است.

پیاده‌سازی نهایی

خروجی این درس، فایل outputs/skill-slo-goodput-gate.md است. این الگو بر اساس بار کاری و SLO مشخص، یک چک‌لیست بنچمارک آماده برای پایپ‌لاین CI/CD تولید می‌کند تا انتشار نهایی، به جای نرخ پردازش، مشروط به دستیابی به گودپوت مطلوب شود.

تمرین‌ها

  1. اسکریپت code/main.py را اجرا کنید. توزیعی با جهش 1 درصدی در دم بسازید. وقتی حد P99 معیار TPOT را از 30 میلی‌ثانیه به 15 میلی‌ثانیه کاهش می‌دهید، گودپوت چقدر تغییر می‌کند؟
  2. یک ارائه‌دهنده‌ی زیرساخت ادعا می‌کند به «15,000 توکن در ثانیه روی مدل Llama 3.3 70B با پردازنده‌ی H100» رسیده است. قبل از اعتماد به این ادعا، چه سه سوالی باید از او بپرسید؟
  3. چرا پیش‌پرکنی تکه‌ای از P99 تاخیر TPOT محافظت می‌کند اما روی میانگین TPOT اثری ندارد؟
  4. برای یک دستیار صوتی (جایی که توکن اول شنیده می‌شود، نه خوانده) یک SLO مصرف‌کننده بنویسید. کدام معیار برای کاربر ملموس‌تر است؟
  5. فایل راهنمای LLMPerf و مستندات GenAI-Perf را بخوانید. سه معیار دیگر را پیدا کنید که این دو ابزار در محاسبه‌ی آن‌ها با هم اختلاف نظر دارند.

اصطلاحات کلیدی

اصطلاح در گفتار عامیانه معنای دقیق فنی
TTFT «زمان تا اولین توکن» صف + شبکه + پیش‌پرکنی؛ در پرامپت‌های طولانی بخش عمده‌اش به پیش‌پرکنی مربوط است
TPOT «زمان به ازای هر توکن خروجی» هزینه‌ی رمزگشایی محدود به حافظه برای هر توکن بعد از توکن اول
ITL «تاخیر بین‌توکنی» در اغلب ابزارها معادل TPOT است (نه در همه؛ GenAI-Perf را ببینید)
E2E «سرتاسری» حاصل‌جمع TTFT به‌علاوه‌ی TPOT ضربدر طول خروجی؛ به‌همراه تاخیر شبکه در مسیر بازگشت پاسخ
Throughput «توکن در ثانیه» شاخص بهره‌وری کلاستر؛ بدون صدک‌های تاخیر عملاً بی‌فایده است
Goodput «نرخ پاس شدن SLO» نسبت درخواست‌هایی که هم‌زمان تک‌تک شروط تعیین‌شده در SLO را پاس کرده‌اند
P99 «تاخیر دُم» بدترین حالت تاخیر در بین 1 مورد از هر 100 مورد؛ معیار اصلی سنجش تجربه‌ی کاربر
SLO multi-constraint «چندشرطی» اشتراکِ (AND) هر سه حد تاخیر؛ نقض هر کدام از آن‌ها یعنی کل درخواست رد شده است
GenAI-Perf vs LLMPerf «تله‌ی ابزارها» اختلاف ابزارها بر سر این‌که آیا TTFT باید در محاسبه‌ی ITL لحاظ شود یا نه

منابع تکمیلی

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسکدام مولفه‌ها بیشترین سهم را در TTFT (زمان تا اولین توکن) دارند؟
  2. حین درسدرس کدام معیار را معیاری می‌نامد که واقعاً برای محصول اهمیت دارد؟
  3. حین درسچرا میانگین، آماره نادرستی برای گزارش تاخیر LLM است؟
  4. حین درسچرا GenAI-Perf و LLMPerf برای یک اجرای یکسان، مقدار TPOT متفاوتی گزارش می‌کنند؟
  5. پس از درسبرای درخواست‌هایی با خروجی طولانی (بیشتر از 500 توکن)، کدام معیار بر تاخیر سرتاسری تسلط دارد؟
  6. پس از درسکدام مجموعه به بهترین نحو SLO معقول کاربرمحور درس را برای یک مدل چت 70B در سال 2026 نشان می‌دهد؟

سؤالات متداول

تفاوت TTFT با TPOT در استنتاج مدل‌های زبانی چیست؟

معیار TTFT تاخیر صف، شبکه و فاز محاسباتی پیش‌پرکنی (Prefill) تا بازگشت اولین توکن را می‌سنجد، در حالی که TPOT زمان رمزگشایی (Decode) محدود به پهنای باند حافظه برای تولید هر توکن خروجی بعدی است.

چرا در ارزیابی سرویس‌دهی LLM نباید به میانگین اکتفا کرد و باید P99 را سنجید؟

توزیع تاخیر در مدل‌های زبانی چولگی به راست دارد. ممکن است میانگین تاخیر کم به‌نظر برسد اما در صدک P99 جهش‌های شدیدی رخ دهد که باعث رها کردن سرویس توسط کاربران واقعی می‌شود.

Goodput چیست و چه فرقی با Throughput دارد؟

نرخ پردازش (Throughput) کل توکن‌های پردازش‌شده را بدون توجه به رضایت کاربر می‌شمارد، اما گودپوت (Goodput) سهم درخواست‌هایی است که هم‌زمان به تمامی شروط تعیین‌شده در SLO (مانند سقف تاخیر TTFT و TPOT) دست یافته‌اند.

دلیل اختلاف رقم TPOT در دو ابزار GenAI-Perf و LLMPerf چیست؟

ابزار GenAI-Perf زمان TTFT را در فرمول محاسبه تاخیر بین‌توکنی (ITL) لحاظ نمی‌کند و محاسبه را از توکن دوم آغاز می‌کند، در حالی که LLMPerf زمان TTFT را هم در محاسبه وارد کرده و از توکن اول شروع می‌کند.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.