جیستینگ: ترفند شاپیفای برای فشردهسازی حافظهی ایجنتهای LLM
خلاصهٔ کاملتر
پرامپتهای سیستمی ایجنتهای LLM میتونن به هزاران توکن برسن و همین باعث میشه inference کندتر و گرونتر بشه؛ تیم مهندسی شاپیفای برای حل این مشکل سراغ روشی به اسم gisting (یعنی فشرده کردن یه متن بلند به چند توکن یادگرفتهشده که همون معنا و تأثیر رو دارن) رفته. این روش رو از یه مقالهی قدیمیتر (۲۰۲۲) الهام گرفتن و روی ایجنت GraphQL شاپیفای به اسم Sidekick پیادهش کردن.
تو این روش چند توکن خاص به دیکشنری مدل اضافه میشه و embeddingشون طوری آموزش داده میشه که جایگزین کردنشون تو پرامپت، دقیقاً همون رفتاری رو تو مدل ایجاد کنه که پرامپت کامل ایجاد میکرد. وزنهای خود مدل ثابت میمونه و فقط embedding توکنهای گیست آموزش میبینه، اونم با روش knowledge distillation: یه بار مدل پرامپت کامل رو میبینه (نقش معلم) و یه بار توکنهای گیست رو (نقش شاگرد)، و اختلاف خروجیهاشون کم میشه تا شاگرد به معلم برسه.
این تیم میگه caching پیشوندی (prefix caching) که تو موتورهای serving رایجه کافی نیست، چون حتی وقتی کلید و مقدارهای یه دنباله تو کش باشن، باز موقع تولید هر توکن جدید باید کل کش از حافظه خونده بشه؛ این هزینه با طول پرامپت رشد میکنه. gisting دقیقاً همین هزینهی خوندن کش و محاسبات attention رو کم میکنه، و با prefix caching هم قابل ترکیبه.
برای تنظیم بهترین تنظیمات، از یه حلقهی خودکار به اسم autoresearch استفاده کردن که خودش رسپی پیشنهاد میده، آموزش میده و نتیجه رو ارزیابی میکنه. بهترین یافتهها: مقداردهی اولیهی embeddingها بر اساس میانگین بخش متناظرشون از پرامپت (نه نویز تصادفی) که loss اولیه رو ۷ برابر کم کرده؛ نسبت فشردهسازی ۴ به ۱ که برای دامنهشون بهینه بوده؛ و افزایش تنوع و حجم دادهی آموزشی.
نتیجهی نهایی قابل توجه بود: تو نرخ ۳۵۰ درخواست در دقیقه، زمان تا اولین توکن ۱۹ درصد و تأخیر کلی درخواست حدود ۳۸ درصد کم شد، و توان عملیاتی ۱۶ درصد بالا رفت؛ همین باعث شد شاپیفای بتونه ۱۴ درصد GPU کمتر برای این ترافیک اختصاص بده. مدل گیستشده رو میشه نقطهی شروع یادگیری مداوم (continual learning) هم قرار داد و هم وزن مدل و هم embeddingهای گیست رو با دادهی جدید بهروز کرد.
نکات کلیدی:
- روش gisting پرامپت سیستمی ایجنت GraphQL شاپیفای رو از حدود ۶۰۰۰ توکن به حدود ۱۵۰۰ توکن (نسبت ۴ به ۱) رسونده
- تو نرخ ۳۵۰ RPM: زمان تا اولین توکن ۱۹٪ و تأخیر کل درخواست حدود ۳۸٪ کمتر شده و throughput ۱۶٪ بالا رفته
- مصرف GPU برای این ترافیک ۱۴٪ کاهش پیدا کرده
- مقداردهی اولیهی embeddingها بر پایهی میانگین بخش پرامپت (بهجای نویز تصادفی) loss اولیه رو ۷ برابر کم کرده
- پیشمحاسبهی logit معلم و pre-tokenization زمان یه دورهی آموزش رو از ۳۰ ساعت به ۶ ساعت رسونده




