چطوری الگوریتم‌های پیشنهادی هوشمند رو با کمک موازی‌سازی‌ کانتکست گسترش بدیم؟ (نگاهی دوستانه به HSTU و داستان دنباله‌های کاربر!)

Fall Back

خب بچه‌ها، امروز میخوام یه موضوع خفن و کاربردی رو با هم مرور کنیم درباره سیستم‌های بزرگ پیشنهاددهنده (همون Recommendation Systemها که توی سرویس‌هایی مثل نتفلیکس و دیجی‌کالا و غیره میبینیم). اصل قضیه اینه که این سیستم‌های بزرگ باید بتونن هر روزه کلی تعامل و رفتار کاربران رو پردازش کنن تا بتونن پیش‌بینی‌ها و پیشنهادهایی دقیق داشته باشن. اینجا ما با حجم خیلی زیادی داده‌ی متنوع و دسته‌بندی‌های عجیب‌غریب (به اصطلاح high cardinality یعنی کلی گروه و مقدار مختلف ویژگی) طرفیم که پیش‌بینی رو سخت میکنه.

قبلاً یه معماری جدیدی معرفی شده به اسم Hierarchical Sequential Transducers یا خلاصه‌ش HSTU که بر پایه attention یا توجه هست. توجه همون مکانیزم معروفیه که باهاش مدل‌ها میفهمن کدوم قسمت‌های داده رو بیشتر جدی بگیرن. این HSTU اومده برای دیتای پیشنهادی که خیلی تغییرپذیره و دنباله‌داره (یعنی dataها مرتب میاد و میره و وضعیتش خیلی ثابت نیست) حسابی جواب داده و مقیاس‌پذیری رو هم به خوبی انجام میده.

نکته جالبی که تو مطالعه‌های جدید فهمیدن اینه که اگر مدل بیشتر و طولانی‌تر به تاریخچه کاربر نگاه کنه (یعنی اطلاعات بیشتری از رفتار گذشته‌ش داشته باشه)، نتیجه خیلی بهتر میشه. ولی همین طولانی‌تر شدن دنباله‌ها باعث میشه حافظه GPU (تو مرحله attention) حسابی اذیت بشه! منظور از activation-heavy اینه که موقع پردازش، مدل باید کلی داده رو همزمان در حافظه نگه داره.

تو دنیای مدل‌های زبانی بزرگ مثل همون ChatGPT خودمون (که بهشون LLM یا Large Language Models میگن)، راه‌حل این چالش یه تکنیکی به اسم context parallelism یا CP هست. این یعنی اطلاعات تو راستای طول دنباله (sequence length) بین چند تا کارت گرافیک پخش میشه تا حافظه هر کدوم فشار زیادی رو تحمل نکنه. خب این خیلی هم خوبه ولی تو مدل‌هایی که مخصوص پیشنهاددهنده هستن (مثل همون مدل‌هایی که تو عمل ران میشن)، این کار رو نمی‌شه همون‌جوری راحت پیاده کرد. چرا؟ چون یه مفهوم داریم به اسم jagged input tensor. بخوام ساده توضیح بدم، یعنی ورودی کاربران شکل و طول یکسان نداره، مثلا یکی امروز پنج تا خرید داشته، یکی ده تا، یکی اصلاً هیچی!

این تفاوت، پیاده‌سازی CP رو تو مدل‌های پیشنهادی خیلی سخت می‌کنه. کاری که این مقاله کرده اینه که اومده کانتکست پارالل رو برای HSTU با پشتیبانی از همین jagged tensorها ارائه داده؛ یعنی بالاخره تونسته مشکل اختلاف در طول دنباله کاربران رو همزمان با موازی‌سازی حل کنه!

حالا نتیجه‌ش چی شده؟ الان با این روش جدید، میشه طول دنباله تعامل کاربر رو ۵.۳ برابر بیشتر از قبل پشتیبانی کرد. یعنی مدل‌های پیشنهادی می‌تونن حتی اگه کسی صد بار تو سایت کاری انجام داده، همچنان همه تاریخچه‌شو حساب کنن! تازه اگه این رو با یه تکنیک دیگه به اسم Distributed Data Parallelism (DDP یعنی موازی‌سازی روی داده) ترکیب کنیم، باز هم ۱.۵۵ برابر سرعت و مقیاس‌پذیری بیشتر به دست میاد.

خلاصه اینکه، اگر دنبال گسترش یا بهبود سیستم‌های پیشنهاددهنده هستید، این روش موازی‌سازی با پشتیبانی از داده‌های ناهمگون واقعاً می‌تونه کارتونو راه بندازه و تجربه‌ی کاربر رو هم کلی بهتر کنه. اینطوری مدل‌ها واقعاً می‌تونن رفتارهای متنوع و دنباله‌دار کاربران رو درک و پیش‌بینی کنن، بدون اینکه به مشکل کمبود منابع یا افت کیفیت بخورن.

منبع: +