مالیات پنهان استنتاج LLM و راهحل کشینگ پیشوند
خلاصهٔ کاملتر
به گفتهٔ نویسندهها (مهندسی از دیجیتالاوشن و مدیرعامل Inferact)، استنتاج حالا حدود ۷۰٪ کل هزینهٔ محاسبات هوش مصنوعی رو تشکیل میده و سهم بزرگی از این هزینه قابلاجتنابه. علتش محدودیت سختافزار نیست، بلکه اینه که سیستم کاری رو که قبلاً انجام داده دوباره حساب میکنه — همون چیزی که بهش «prefill تکراری» میگن.
هر درخواست استنتاج دو فاز داره: prefill که کل ورودی پردازش میشه و کش کلید-مقدار (KV) ساخته میشه، و decode که توکنهای خروجی یکییکی تولید میشن. مشکل توی prefill پنهانه چون هزینهاش با طول ورودی بهصورت درجهدومه. مثال واقعی: یک پرامپت سیستمیِ ۲۰۰۰ توکنی که توی همهٔ درخواستها یکیه، با پیام کاربر ۲۰۰ توکنی یعنی حدود ۹۱٪ ورودی مشترکه؛ توی ۱۰ هزار درخواست در ساعت، بیش از یک تریلیون FLOP در ساعت دور ریخته میشه.
راهحل ساختاری توی لایهٔ موتور، کشینگ پیشونده. vLLM توکنها رو توی بلوکهای با اندازهٔ ثابت گروهبندی و ذخیره میکنه، پیشوندها رو بلوکبهبلوک هَش میکنه و موقع رسیدن درخواست جدید، طولانیترین پیشوند کششده رو پیدا میکنه. روی یک اصابت کامل، موتور تقریباً کل کار prefill رو رد میکنه چون وضعیت KV از قبل توی حافظهٔ GPU آمادهست، و این صرفهجویی مستقیماً بهصورت بهبود زمان تا اولین توکن (TTFT) دیده میشه.
اما نویسنده میگه یک نمونهٔ موتور فقط چیزی رو که خودش دیده کش میکنه، و همینجا مسئلهٔ مسیریابی پیش میاد. توی یک ناوگان GPU پشت یک لودبالانسر، مسیریابی round-robin نرخ اصابت کش رو نابود میکنه. گیتوی استنتاج دیجیتالاوشن (که فورکی از llm-d هست) یک Endpoint Picker داره که رویدادهای کش KV هر نمونه رو میخونه، یک درخت پیشوند برای هر pod میسازه، و هر درخواست رو بر اساس امتیاز همخوانی پیشوند به مناسبترین pod میفرسته. نتیجه: نرخ اصابت کش از حدود ۲۵٪ زیر round-robin به بالای ۷۵٪ میرسه، روی همون سختافزار و بدون تغییر مدل.
اثرش در مقیاس ملموسه: با یک میلیون درخواست در روز و ۷۰٪ اشتراک پرامپت سیستمی، مسیریابی آگاه از پیشوند روزانه حدود ۳۵۰ هزار اصابت اضافه و ۳۴ ساعت-GPU صرفهجویی میسازه؛ توی ۱۰ میلیون درخواست در روز این عدد به ۳۴۰ ساعت-GPU میرسه. برای بارهای مناسب (گفتگوهای چندنوبتی، پرامپت سیستمی مشترک، پایپلاینهای RAG) هزینهٔ مؤثر محاسبه تا ۴ برابر کم میشه. این بهینهسازیها که قبلاً برای مشتریهای بزرگ ساخته شده بودن، بهزودی روی Serverless Inference هم میان.
نکات کلیدی:
- prefill تکراری بخش بزرگی از هزینهٔ استنتاج رو هدر میده
- کشینگ پیشوند توی vLLM با ذخیرهٔ بلوکی KV و هَش پیشوند، prefill رو رد میکنه
- مسیریابی round-robin نرخ اصابت کش رو در ناوگان نابود میکنه
- گیتوی آگاه از پیشوند نرخ اصابت رو از ~۲۵٪ به بالای ۷۵٪ میرسونه
- در مقیاس بالا تا ۴ برابر کاهش هزینهٔ مؤثر محاسبه، بدون تغییر مدل




