Roblox چگونه هزینه های عضویت Spark را با فیلترهای Bloom بهینه شده یادگیری ماشینی کاهش می دهد - وبلاگ Roblox

Roblox چگونه هزینه های عضویت Spark را با فیلترهای Bloom بهینه شده یادگیری ماشینی کاهش می دهد – وبلاگ Roblox

چکیده

هر روز در Roblox، 65.5 میلیون کاربر با میلیون ها تجربه درگیر می شوند که مجموعاً 14.0 است میلیارد ساعت در سه ماهه این تعامل یک دریاچه داده در مقیاس پتابایت ایجاد می کند که برای اهداف تجزیه و تحلیل و یادگیری ماشین (ML) غنی شده است. پیوستن به جداول واقعیت و ابعاد در دریاچه داده ما نیاز به منابع زیادی دارد، بنابراین برای بهینه سازی این و کاهش درهم ریختگی داده ها، از فیلترهای Bloom Learned [1] - ساختارهای داده هوشمند با استفاده از ML استفاده کردیم. با پیش بینی حضور، این فیلترها به طور قابل توجهی داده های اتصال را کاهش می دهند و کارایی را افزایش می دهند و هزینه ها را کاهش می دهند. در طول مسیر، ما همچنین معماری‌های مدل خود را بهبود بخشیده‌ایم و مزایای قابل‌توجهی را که برای کاهش حافظه و ساعات پردازش CPU و همچنین افزایش پایداری عملیاتی ارائه می‌دهند، نشان دادیم.

معرفی

در دریاچه داده ما، جداول واقعیت و مکعب های داده به طور موقت برای دسترسی کارآمد تقسیم بندی می شوند، در حالی که جداول ابعاد فاقد چنین پارتیشن هایی هستند، و پیوستن آنها به جداول واقعیت در طول به روز رسانی منابع فشرده ای است. فضای کلیدی اتصال توسط پارتیشن زمانی جدول واقعیت که به هم متصل می شود هدایت می شود. موجودیت های بعد موجود در آن پارتیشن زمانی، زیرمجموعه کوچکی از موارد موجود در کل مجموعه داده ابعاد هستند. در نتیجه، اکثریت داده‌های ابعاد به هم ریخته در این اتصالات در نهایت کنار گذاشته می‌شوند. برای بهینه‌سازی این فرآیند و کاهش درهم‌رفتن غیر ضروری، استفاده از آن را در نظر گرفتیم فیلترهای بلوم در کلیدهای اتصال متمایز اما با مشکلاتی در اندازه فیلتر و ردپای حافظه مواجه شد.

برای پرداختن به آنها، بررسی کردیم فیلترهای بلوم را یاد گرفتیک راه حل مبتنی بر ML که اندازه فیلتر بلوم را کاهش می دهد در حالی که نرخ های مثبت کاذب پایین را حفظ می کند. این نوآوری با کاهش هزینه های محاسباتی و بهبود پایداری سیستم، کارایی عملیات اتصال را افزایش می دهد. طرح شماتیک زیر فرآیندهای اتصال مرسوم و بهینه شده را در محیط محاسباتی توزیع شده ما نشان می دهد.

افزایش کارایی اتصال با فیلترهای بلوم آموخته شده

برای بهینه سازی اتصال بین جداول واقعیت و ابعاد، پیاده سازی Learned Bloom Filter را اتخاذ کردیم. ما یک شاخص از کلیدهای موجود در جدول حقایق ساختیم و متعاقباً این شاخص را برای پیش فیلتر کردن داده‌های ابعاد قبل از عملیات اتصال به کار بردیم. 

تکامل از فیلترهای سنتی بلوم به فیلترهای بلوم آموخته شده

در حالی که فیلتر بلوم سنتی کارآمد است، 15 تا 25 درصد حافظه اضافی را به هر گره کارگر اضافه می کند که نیاز به بارگذاری آن برای رسیدن به نرخ مثبت کاذب مورد نظر ما دارد. اما با استفاده از فیلترهای Bloom Learned، به اندازه شاخص کاهش قابل توجهی دست یافتیم و در عین حال همان نرخ مثبت کاذب را حفظ کردیم. این به دلیل تبدیل فیلتر بلوم به یک مشکل طبقه بندی باینری است. برچسب‌های مثبت وجود مقادیری را در شاخص نشان می‌دهند، در حالی که برچسب‌های منفی به معنای عدم وجود آن‌ها هستند.

معرفی یک مدل ML بررسی اولیه مقادیر و به دنبال آن یک فیلتر بلوم پشتیبان برای حذف منفی های کاذب را تسهیل می کند. اندازه کاهش یافته ناشی از نمایش فشرده مدل و کاهش تعداد کلیدهای مورد نیاز فیلتر بلوم پشتیبان است. این آن را از روش معمولی فیلتر بلوم متمایز می کند. 

به عنوان بخشی از این کار، ما دو معیار را برای ارزیابی رویکرد فیلتر بلوم آموخته خود ایجاد کردیم: اندازه شیء سریالی نهایی شاخص و مصرف CPU در طول اجرای جستارهای جوین. 

پیمایش چالش های پیاده سازی

چالش اولیه ما پرداختن به یک مجموعه داده آموزشی بسیار مغرضانه با کلیدهای جدول ابعاد کمی در جدول واقعیت بود. در انجام این کار، ما همپوشانی تقریباً یک در سه کلید را بین جداول مشاهده کردیم. برای مقابله با این موضوع، ما از روش فیلتر شکوفه یادگیری ساندویچ [2] استفاده کردیم. این یک فیلتر سنتی اولیه بلوم را ادغام می‌کند تا با حذف اکثر کلیدهایی که از جدول حقایق مفقود شده‌اند، توزیع داده‌ها را مجدداً متعادل کند و نمونه‌های منفی را از مجموعه داده حذف کند. متعاقباً، تنها کلیدهای موجود در فیلتر اولیه بلوم، همراه با موارد مثبت کاذب، به مدل ML که اغلب به عنوان «اوراکل آموخته‌شده» نامیده می‌شود، ارسال شد. این رویکرد منجر به ایجاد یک مجموعه داده آموزشی متعادل برای اوراکل آموخته شد، که به طور موثری بر مسئله سوگیری غلبه کرد.

چالش دوم بر معماری مدل و ویژگی های آموزشی متمرکز بود. برخلاف مشکل کلاسیک URLهای فیشینگ [1]، کلیدهای پیوستن ما (که در بیشتر موارد شناسه‌های منحصربه‌فرد برای کاربران/تجربه‌ها هستند) ذاتاً آموزنده نبودند. این ما را بر آن داشت تا ویژگی‌های ابعاد را به عنوان ویژگی‌های مدل بالقوه که می‌تواند به پیش‌بینی وجود یک موجودیت در جدول واقعیت کمک کند، بررسی کنیم. به عنوان مثال، یک جدول واقعیت را تصور کنید که حاوی اطلاعات جلسه کاربر برای تجربیات در یک زبان خاص است. موقعیت جغرافیایی یا ویژگی ترجیحی زبان بعد کاربر، شاخص خوبی برای این است که آیا یک کاربر فردی در جدول حقایق حضور دارد یا نه.

چالش سوم - تأخیر استنتاج - به مدل‌هایی نیاز داشت که هم منفی‌های کاذب را به حداقل می‌رساند و هم پاسخ‌های سریع ارائه می‌کرد. یک مدل درختی تقویت‌شده با گرادیان، انتخاب بهینه برای این معیارهای کلیدی بود، و مجموعه ویژگی‌های آن را برای متعادل کردن دقت و سرعت هرس کردیم.

درخواست پیوستن به روز شده ما با استفاده از فیلترهای بلوم آموخته شده به شرح زیر است:

نتایج

در اینجا نتایج آزمایشات ما با فیلترهای Learned Bloom در دریاچه داده ما آمده است. ما آنها را در پنج بار تولید ادغام کردیم که هر کدام دارای ویژگی های داده متفاوتی بودند. گران‌ترین بخش محاسباتی این حجم‌های کاری، اتصال بین جدول واقعیت و جدول ابعاد است. فضای کلیدی جداول واقعیت تقریباً 30 درصد از جدول ابعاد است. برای شروع، در مورد اینکه چگونه Learned Bloom Filter از فیلترهای بلوم سنتی از نظر اندازه شیء سریالی نهایی بهتر عمل کرد صحبت می کنیم. در مرحله بعد، بهبودهای عملکردی را نشان می‌دهیم که با ادغام فیلترهای Bloom Learned در خطوط لوله پردازش حجم کاری خود مشاهده کردیم.

مقایسه اندازه فیلتر بلوم آموخته شده

همانطور که در زیر نشان داده شده است، هنگامی که به یک نرخ مثبت کاذب معین نگاه می کنیم، دو نوع فیلتر Bloom آموخته شده در مقایسه با فیلترهای بلوم سنتی، اندازه کل شی را بین 17 تا 42 درصد بهبود می بخشند.

علاوه بر این، با استفاده از زیرمجموعه‌ای کوچکتر از ویژگی‌ها در مدل درختی مبتنی بر گرادیان، تنها درصد کمی از بهینه‌سازی را از دست دادیم در حالی که استنتاج سریع‌تر انجام می‌شد.

نتایج استفاده از فیلتر بلوم را یاد گرفتید 

در این بخش، عملکرد اتصال‌های مبتنی بر فیلتر بلوم را با اتصالات معمولی در چندین معیار مقایسه می‌کنیم. 

جدول زیر عملکرد بارهای کاری را با و بدون استفاده از Learned Bloom Filters مقایسه می کند. یک فیلتر بلوم آموخته با 1٪ احتمال مثبت کاذب کل، مقایسه زیر را نشان می دهد در حالی که پیکربندی خوشه یکسانی را برای هر دو نوع اتصال حفظ می کند. 

اول، ما متوجه شدیم که اجرای Bloom Filter تا 60% در ساعات CPU از اتصال معمولی بهتر عمل می کند. ما شاهد افزایش استفاده از CPU از مرحله اسکن برای رویکرد Learned Bloom Filter به دلیل محاسبات اضافی صرف شده در ارزیابی فیلتر Bloom بودیم. با این حال، فیلتر کردن اولیه انجام شده در این مرحله، اندازه داده‌های در حال جابجایی را کاهش داد، که به کاهش CPU مورد استفاده در مراحل پایین‌دستی کمک کرد، در نتیجه کل ساعت‌های CPU را کاهش داد.

ثانیاً، فیلترهای Bloom Learned حدود 80٪ حجم کل داده کمتر و حدود 80٪ بایت های بسته بندی کل کمتری نسبت به یک اتصال معمولی دارند. این منجر به عملکرد پیوستن پایدارتر همانطور که در زیر بحث شده است. 

ما همچنین شاهد کاهش استفاده از منابع در سایر بارهای کاری تولیدی تحت آزمایش بودیم. در طی یک دوره دو هفته ای در هر پنج بار کاری، رویکرد Learned Bloom Filter میانگین تولید کرد صرفه جویی در هزینه های روزانه of ٪ 25، که آموزش مدل و ایجاد شاخص را نیز به حساب می آورد.

با توجه به کاهش حجم داده‌های به هم ریخته در حین انجام اتصال، ما توانستیم هزینه‌های عملیاتی خط لوله تجزیه و تحلیل خود را به طور قابل توجهی کاهش دهیم و در عین حال آن را پایدارتر کنیم. نمودار زیر تنوع (با استفاده از ضریب تغییرات) را در مدت زمان اجرا (دیواری) نشان می‌دهد. ساعت) برای بار کاری پیوستن منظم و حجم کاری مبتنی بر فیلتر بلوم آموخته شده در طی یک دوره دو هفته ای برای پنج بار کاری که آزمایش کردیم. اجراهایی که با استفاده از Learned Bloom Filters پایدارتر بودند - از نظر مدت زمان سازگارتر - که امکان انتقال آنها به منابع محاسباتی غیرقابل اعتماد گذرا ارزان‌تر را باز می‌کند. 

منابع

[1] T. Kraska، A. Beutel، EH Chi، J. Dean، و N. Polyzotis. موردی برای ساختارهای شاخص آموخته شده. https://arxiv.org/abs/1712.01208، 2017.

[2] M. Mitzenmacher. بهینه سازی فیلترهای بلوم آموخته شده با ساندویچ کردن. 

https://arxiv.org/abs/1803.01474، 2018.


¹از 3 ماه منتهی به 30 ژوئن 2023

²از 3 ماه منتهی به 30 ژوئن 2023

تمبر زمان:

بیشتر از Roblox