چگونه «پیجاتنشن» حافظه جیپییو را برای حل گلوگاه زمینه (Context) در مدلهای زبان بزرگ تقسیمبندی میکند؟
مدلهای زبان بزرگ با ذخیره توکنهای قبلی در یک بانک حافظه موقت به نام حافظه نهان KV، متن تولید میکنند. با تقسیم این حافظه به بلوکهای غیرمتوالی، موتورهای استنتاج میتوانند قطعهقطعه شدن (Fragmentation) را از بین ببرند و تعداد کاربرانی را که یک سرور میتواند پشتیبانی کند، تا چهار برابر افزایش دهند.
به قلم اِلا فرجاد
این خبر را به اشتراک بگذارید
- توسعهدهندگان موتور استنتاج
- تمرکز بر به حداکثر رساندن بهرهوری سختافزار و توان عملیاتی.
- معماران سختافزار
- تمرکز بر پهنای باند حافظه و محدودیتهای سیلیکون فیزیکی.
دیدگاههایی که این گزارش پوشش نداده
- ارائهدهندگان زیرساخت ابری
- توسعهدهندگان مدلهای متنباز
زمانبندی استنتاج که بین مدل زبان بزرگ و سختافزار آن قرار دارد، دقیقاً تصمیم میگیرد که چه مقدار حافظه به درخواست کاربر اختصاص یابد. این زمانبند میتواند حافظه رم ویدیویی (VRAM) جیپییو را به قطعات سخت و متوالی تقسیم کند، یا آن را به صفحات پویا و غیرمتوالی تقسیمبندی نماید. این انتخاب در لحظه رسیدن یک درخواست جدید انجام میشود و تعیین میکند که آیا سرور میتواند ده کاربر همزمان را مدیریت کند یا صد کاربر را.
هنگامی که مدلی مانند لاما ۳ یا جیپیتی-۴ پاسخی تولید میکند، تاریخچه کامل مکالمه را برای هر کلمه جدید دوباره محاسبه نمیکند. در عوض، نمایشهای ریاضی کلمات گذشته را در یک ناحیه ذخیرهسازی موقت که به عنوان حافظه نهان Key-Value یا (KV) شناخته میشود، ذخیره میکند.
با تولید متن بیشتر توسط مدل، این حافظه نهان به صورت خطی رشد میکند. در سال ۲۰۲۳، محققان دانشگاه یوسی برکلی (UC Berkeley) تشخیص دادند که حافظه نهان KV تا ۳۰٪ از کل حافظه جیپییو را در طول استنتاج مصرف میکند و یک گلوگاه جدی ایجاد میکند که ظرفیت کاربران همزمان را محدود میسازد.[1]
روش سنتی مدیریت این حافظه بسیار ناکارآمد بود. زمانبندها یک بلوک بزرگ و متوالی از حافظه را برای حداکثر طول ممکن یک مکالمه اختصاص میدادند. اگر کاربر فقط یک سوال کوتاه میپرسید، بقیه حافظه تخصیصیافته خالی میماند و برای درخواستهای دیگر قابل استفاده نبود.
این پدیده، که به عنوان قطعهقطعه شدن داخلی حافظه (Internal Memory Fragmentation) شناخته میشود، مقادیر زیادی از ظرفیت سختافزاری گرانقیمت را هدر میداد. به گفته تیم یوسی برکلی، «سیستمهای موجود ۶۰٪ تا ۸۰٪ حافظه را به دلیل قطعهقطعه شدن و رزرو بیش از حد هدر میدهند.»[1]
برای حل این مشکل، توسعهدهندگان الگوریتم «پیجاتنشن» (PagedAttention) را معرفی کردند؛ الگوریتمی که از نحوه مدیریت رم توسط سیستمعاملهای سنتی کامپیوتر الهام گرفته شده است. پیجاتنشن به جای رزرو یک بلوک عظیم، حافظه نهان KV را به صفحات کوچک و با اندازه ثابت تقسیم میکند.
هر صفحه معمولاً کلیدها و مقادیر توجه (Attention Keys and Values) را برای تعداد مشخصی از توکنها در خود جای میدهد—اغلب ۱۶ یا ۳۲ توکن. نکته حیاتی این است که این صفحات نیازی ندارند که در سیلیکون فیزیکی کنار یکدیگر قرار گیرند.[1]
هر صفحه معمولاً کلیدها و مقادیر توجه (Attention Keys and Values) را برای تعداد مشخصی از توکنها در خود جای میدهد—اغلب ۱۶ یا ۳۲ توکن.
یک جدول بلوک مرکزی مکان هر صفحه را ردیابی میکند. هنگامی که مدل نیاز به ارجاع به یک توکن گذشته دارد، زمانبند آدرس مجازی را در جدول بلوک جستجو کرده و آن را به مکان فیزیکی روی جیپییو ترجمه میکند.
این سازوکار عملاً قطعهقطعه شدن داخلی را از بین میبرد. حافظه به صورت پویا، صفحه به صفحه، تنها زمانی تخصیص داده میشود که مدل واقعاً یک توکن جدید تولید کند که نیاز به ذخیرهسازی دارد.
دستاوردهای کارایی قابل اندازهگیری و فوری هستند. با پیادهسازی پیجاتنشن در موتور متنباز vLLM، توسعهدهندگان اتلاف حافظه را به زیر ۴٪ کاهش دادند.[1]
آزاد شدن آن حافظه هدر رفته به سرور اجازه میدهد تا درخواستهای کاربران همزمان بیشتری را در همان جیپییو بارگذاری کند. در تستهای معیار روی جیپییوهای NVIDIA A100، موتور vLLM توان عملیاتی (Throughput) ۲ تا ۴ برابر بالاتری نسبت به ترنسفورمرهای استاندارد Hugging Face به دست آورد.[1]
از آن زمان، انویدیا (NVIDIA) تکنیکهای صفحهبندی مشابهی را در پشته نرمافزاری TensorRT-LLM خود ادغام کرده است. در یک تحلیل فنی در آگوست ۲۰۲۳، مهندسان انویدیا اشاره کردند که بهینهسازی حافظه نهان KV حیاتی است، زیرا «پهنای باند حافظه، گلوگاه اصلی برای استنتاج مدلهای زبان بزرگ است.»[2]
با این حال، سازوکار صفحهبندی سربار محاسباتی خاص خود را به همراه دارد. زمانبند باید به طور مداوم جدول بلوک را بهروزرسانی کند و ترجمه آدرسها را در طول فاز تولید که به شدت به تأخیر حساس است، انجام دهد.
آنچه هنوز اثبات نشده، این است که پیجاتنشن تا چه حد با گسترش پنجرههای زمینه از ۱۲۸٬۰۰۰ توکن به بیش از یک میلیون توکن، مقیاسپذیر خواهد بود. در این شرایط شدید، خود جدول بلوک به یک ساختار داده عظیم تبدیل میشود که نیاز به بهینهسازی دارد.
نسل بعدی موتورهای استنتاج باید تصمیم بگیرند که چگونه خود حافظه نهان را فشردهسازی کنند. تا زمانی که پهنای باند سختافزار با اندازه مدلها هماهنگ شود، توانایی زمانبند نرمافزاری در فشردهسازی محکم بلوکهای حافظه، تعیینکننده دوام تجاری استقرار هوش مصنوعی پیشرو خواهد بود.
نکات کلیدی
- حافظه نهان KV توکنهای گذشته را در طول تولید ذخیره میکند، اما به طور سنتی به دلیل قطعهقطعه شدن، تا ۸۰٪ از حافظه را هدر میدهد.
- پیجاتنشن این حافظه را به بلوکهای کوچک و پویا تقسیم میکند و فضا را تنها در صورت نیاز تخصیص میدهد.
- این بهینهسازی به سرورهای استنتاج اجازه میدهد تا چهار برابر کاربران همزمان بیشتری را روی همان سختافزار مدیریت کنند.
اصطلاحات کلیدی
- KV Cache
- یک بانک حافظه موقت که در آن مدل زبان، نمایشهای ریاضی کلمات گذشته را ذخیره میکند تا از محاسبه مجدد آنها جلوگیری شود.
- Inference
- فازی که در آن یک مدل هوش مصنوعی آموزشدیده، پاسخهایی را به درخواستهای کاربر تولید میکند (استنتاج).
- Internal Fragmentation
- حافظه هدر رفتهای که زمانی رخ میدهد که یک سیستم یک بلوک بزرگ فضا را رزرو میکند اما تنها بخش کوچکی از آن را استفاده مینماید (قطعهقطعه شدن داخلی).
- Throughput
- تعداد کل درخواستها یا توکنهایی که یک سرور میتواند در یک بازه زمانی مشخص پردازش کند (توان عملیاتی).
منابع
[1]UC Berkeley vLLM Teamتوسعهدهندگان موتور استنتاجEfficient Memory Management for Large Language Model Serving with PagedAttention
مطالعه در UC Berkeley vLLM Team →
[2]NVIDIAمعماران سختافزارMastering LLM Techniques: Inference Optimization
مطالعه در NVIDIA →
[3]تیم سردبیری کوهستانتوسعهدهندگان موتور استنتاجتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
نظرات
هر زاویه. هر روز.
دریافت هوش مصنوعی اخبار همراه با پوشش کامل منابع و تحلیل دیدگاهها، مستقیم در صندوق ورودی شما.

