۱. اهمیت prefill و decode در LLM
مدلهای زبان بزرگ، دو فاز اصلی در تولید متن دارند: prefill و decode. فاز prefill بر اساس کل پرامپت صدا پردازش میشود و میتواند به صورت موازی روی GPU اجرا شود. در حالی که فاز decode تنها برای تولید توکن بعدی مورد پردازش قرار میگیرد و به صورت ترتیبی انجام میشود.
۲. مشکل پرامپتهای طولانی در صف
در سیستمهایی که هزاران درخواست همزمان دریافت میکنند، پرامپتهای مطول میتوانند بلافاصله منابع GPU را اشغال کنند. چون prefill برای اولین توکن خروجی همه توکنهای ورودی را میخواند، این بخش زمانبر است و باعث پرتاب شدن صف سایر درخواستها میشود. این موضوع به ویژه در مجموعهای چند GPU، مانند کاربری که ۲۴ هسته H100 دارد، باعث تاخیر ناخواسته در پردازش دیگر سامانهها میشود.
۳. راهحل Disaggregated Prefill
مایکروسرویس Disaggregated Prefill به سمت بهینهسازی کارایی، prefill را به بخشهای کوچکتری تقسیم میکند. این کار اجازه میدهد که بخشهای مختلف prefill در زمانهای مختلف اجرا شود و از مخفیسازی هدر زمان استفاده شود. بهعنوان مثال، مدل میتواند به جزئیات تقلید کند و در زمان پایان یکی از بخشهای prefill، پیادهسازی مرحلهی بعدی را آغاز کند.
- تقسیم prefill به دفعات کوچکتر برای کاهش مصرف GPU و تسهیل پردازش موازی.
- بهینهسازی زمانبندی توکنهای خروجی برای جلوگیری از احتباس صف.
- استفاده از ستونگذاری ستونایی برای بیشینهسازی نرخ پردازش توکنها.
- پیکربندی پروکسیهای درخواست برای انجام پیشبینی با اولویت مناسب.
این راهکارها، به ویژه در کارهایی که روزانه بیش از ۱۰ میلیون توکن تولید میکند، نشان دادهاند که میتوان تاخیر را تا چندین درصد کاهش داد، در حالی که توان مصرفی GPU به حداقل بر میگردد.
در نهایت، بهینهسازی prefill و decode به عنوان یک کل، میتواند تاثیری چشمگیر بر کیفیت سرویسها و رضایت کاربران در سامانههای تولید متن جیپیتی داشته باشد.
پرسشهای پرتکرار
آیا استفاده از Disaggregated Prefill برای تمام مدلها مفید است؟
رابطهی بهینهسازی به اندازهٔ حجم پروفایل مدل و حجم پرامپتها بستگی دارد. برای مدلهای بزرگ با حجم توکن بالای ۵۰۰ که در حالت پر درخواست هستند، اغلب مصرف مؤثر GPU ممکن است بهطور چشمگیری بهبود یابد؛ در حالی که برای مدلهای کوچکتر ممکن است تأثیرلحنگر نباشد.
این تغییرات دوچند وقت بعد از بهروزرسانی مدل نیاز دارد؟
بهروزرسانی مدل، همانطور که در پیکربندی ورژن انجام میشود، اعمال میشود. به همین دلیل میتوانید در همان زمان، پردازش prefill را بهصورت موازی تغییر دهید و از Acc aشد.