Hogyan csökkenti a Roblox a Spark csatlakozási lekérdezés költségeit a gépi tanulásra optimalizált virágszűrőkkel – Roblox blog

Hogyan csökkenti a Roblox a Spark csatlakozási lekérdezés költségeit a gépi tanulásra optimalizált virágszűrőkkel – Roblox blog

Forrás csomópont: 2983061

Absztrakt

Minden nap a Robloxon, 65.5 millió felhasználó több millió élményben vesz részt, összesen 14.0 milliárd óra negyedévente. Ez az interakció egy petabájtos adatforrást hoz létre, amelyet elemzési és gépi tanulási (ML) célokra dúsítanak. Erőforrásigényes tény- és dimenziótáblázatok összekapcsolása az adattóban, ezért ennek optimalizálása és az adatkeverés csökkentése érdekében a Learned Bloom Filters [1] – intelligens, ML-t használó adatszerkezeteket alkalmaztunk. A jelenlét előrejelzésével ezek a szűrők jelentősen csökkentik a csatlakozási adatokat, növelve a hatékonyságot és csökkentve a költségeket. Útközben továbbfejlesztettük modellarchitektúránkat is, és bemutattuk, milyen jelentős előnyökkel járnak a feldolgozáshoz szükséges memória- és CPU-órák csökkentése, valamint a működési stabilitás növelése terén.

Bevezetés

Data Lake-ünkben a ténytáblák és adatkockák ideiglenesen particionálva vannak a hatékony hozzáférés érdekében, míg a dimenziótáblákból hiányoznak ezek a partíciók, és a frissítések során a ténytáblákkal való összekapcsolásuk erőforrás-igényes. Az összekapcsolás kulcsterét az összekapcsolandó ténytábla időbeli partíciója határozza meg. Az ebben az időbeli partícióban jelen lévő dimenzió entitások a teljes dimenzióadatkészletben jelenlévők kis részhalmazát képezik. Ennek eredményeként ezekben az illesztésekben a megkevert méretadatok többsége végül eldobásra kerül. A folyamat optimalizálása és a szükségtelen keverés csökkentése érdekében fontolóra vettük a használatát Bloom szűrők különböző csatlakozási kulcsokon, de szűrőmérettel és memóriaterület-problémákkal szembesültek.

Hogy megválaszoljuk őket, feltártuk Tanult Bloom szűrők, egy ML-alapú megoldás, amely csökkenti a Bloom-szűrő méretét, miközben fenntartja az alacsony hamis pozitív arányt. Ez az innováció a számítási költségek csökkentésével és a rendszer stabilitásának javításával növeli az összekapcsolási műveletek hatékonyságát. Az alábbi vázlat a hagyományos és optimalizált összekapcsolási folyamatokat szemlélteti elosztott számítási környezetünkben.

Növelje a csatlakozási hatékonyságot tanult virágzási szűrőkkel

A tény- és dimenziótáblázatok összekapcsolásának optimalizálása érdekében a Tanult Bloom-szűrő implementációt alkalmaztuk. Összeállítottunk egy indexet a ténytáblázatban lévő kulcsokból, majd az indexet üzembe helyeztük a dimenzióadatok előszűrésére az összekapcsolási művelet előtt. 

Evolúció a hagyományos virágzási szűrőktől a tanult virágzási szűrőkig

Míg a hagyományos Bloom-szűrő hatékony, 15-25%-kal bővíti a memóriát dolgozó csomópontonként, ha be kell töltenie, hogy elérje a kívánt téves pozitív arányt. De a Learned Bloom Filters kihasználásával jelentősen csökkentett indexméretet értünk el, miközben megtartottuk ugyanazt a hamis pozitív arányt. Ennek oka a Bloom-szűrő bináris osztályozási problémává való átalakulása. A pozitív címkék az értékek jelenlétét jelzik az indexben, míg a negatív címkék azt, hogy hiányoznak.

Az ML-modell bevezetése megkönnyíti az értékek kezdeti ellenőrzését, majd egy tartalék Bloom-szűrőt a hamis negatívok kiküszöbölésére. A csökkentett méret a modell tömörített ábrázolásából és a tartalék Bloom-szűrő által igényelt kulcsok számának csökkenéséből adódik. Ez különbözteti meg a hagyományos Bloom Filter megközelítéstől. 

Ennek a munkának a részeként két mérőszámot állítottunk fel a Tanult Bloom Filter megközelítésünk értékelésére: az index végső soros objektumméretét és a CPU-fogyasztást az összekapcsolási lekérdezések végrehajtása során. 

Navigálás a megvalósítási kihívások között

A kezdeti kihívásunk egy erősen elfogult képzési adatkészlet kezelése volt, amelyhez kevés dimenziótábla kulcs volt a ténytáblázatban. Ennek során a táblázatok között körülbelül egy a három kulcsból álló átfedést figyeltünk meg. Ennek megoldására a Sandwich Learned Bloom Filter megközelítést alkalmaztuk [2]. Ez egy kezdeti hagyományos Bloom-szűrőt integrál az adatkészlet-eloszlás újraegyensúlyozására azáltal, hogy eltávolítja a ténytáblából hiányzó kulcsok többségét, hatékonyan eltávolítva a negatív mintákat az adatkészletből. Ezt követően csak a kezdeti Bloom Filterben szereplő kulcsok, valamint a hamis pozitív értékek kerültek továbbításra az ML modellbe, amelyet gyakran „tanult orákulumnak” is neveznek. Ez a megközelítés egy jól kiegyensúlyozott képzési adatkészletet eredményezett a tanult orákulum számára, hatékonyan leküzdve az elfogultság problémáját.

A második kihívás a modellarchitektúrára és a képzési funkciókra összpontosított. Az adathalász URL-ek klasszikus problémájával [1] ellentétben a csatlakozási kulcsaink (amelyek a legtöbb esetben egyedi azonosítók a felhasználóknak/élményeknek) nem voltak eleve informatívak. Ez arra vezetett, hogy megvizsgáljuk a dimenzióattribútumokat mint lehetséges modelljellemzőket, amelyek segíthetnek előre jelezni, hogy egy dimenzió entitás jelen van-e a ténytáblázatban. Képzeljünk el például egy ténytáblázatot, amely felhasználói munkamenet-információkat tartalmaz egy adott nyelvű tapasztalatokhoz. A felhasználói dimenzió földrajzi elhelyezkedése vagy nyelvi preferencia attribútuma jó mutató lenne annak meghatározására, hogy egy adott felhasználó jelen van-e a ténytáblázatban vagy sem.

A harmadik kihívás – a következtetési késleltetés – olyan modelleket igényelt, amelyek minimalizálták a hamis negatívokat és gyors válaszokat adtak. A színátmenettel növelt famodell volt az optimális választás ezekhez a kulcsfontosságú mérőszámokhoz, és a funkciókészletét a pontosság és a sebesség egyensúlyának megteremtése érdekében csökkentettük.

A tanult Bloom szűrőket használó frissített csatlakozási lekérdezésünk a következő:

Eredmények

Íme az adattavunkban a Learned Bloom szűrőkkel végzett kísérleteink eredményei. Öt termelési munkaterhelésbe integráltuk őket, amelyek mindegyike eltérő adatjellemzőkkel rendelkezett. E munkaterhelések számítási szempontból legdrágább része a ténytábla és a dimenziótábla összekapcsolása. A ténytáblázat kulcstere a dimenziótábla körülbelül 30%-a. Először is megvitatjuk, hogy a Tanult Bloom-szűrő hogyan teljesített felül a hagyományos Bloom-szűrőknél a végső soros objektumméret tekintetében. Ezután bemutatjuk azokat a teljesítményjavulásokat, amelyeket a Learned Bloom Filters munkaterhelés-feldolgozási folyamatainkba való integrálásával figyeltünk meg.

Tanult Bloom-szűrő méret-összehasonlítása

Ahogy az alábbiakban látható, ha egy adott téves pozitív arányt nézünk, a tanult Bloom-szűrő két változata 17-42%-kal javítja a teljes objektumméretet a hagyományos Bloom-szűrőkkel összehasonlítva.

Ezen túlmenően, mivel a gradiens-növelt fa alapú modellünkben a funkciók egy kisebb részhalmazát használtuk, az optimalizálásnak csak egy kis százalékát veszítettük el, miközben gyorsabb következtetéseket hajtottunk végre.

Tanult Bloom-szűrő használati eredmények 

Ebben a szakaszban összehasonlítjuk a Bloom-szűrő alapú illesztések teljesítményét a normál összekapcsolások teljesítményével több metrika szerint. 

Az alábbi táblázat összehasonlítja a munkaterhelések teljesítményét tanult virágzási szűrőkkel és anélkül. Az 1%-os teljes hamis pozitív valószínűségű tanult virágzási szűrő az alábbi összehasonlítást szemlélteti, miközben ugyanazt a fürtkonfigurációt tartja mindkét csatlakozástípusnál. 

Először is azt találtuk, hogy a Bloom Filter implementációja a CPU órákban akár 60%-kal is jobban teljesített a szokásos csatlakozásnál. Megnövekedett a CPU-használat a letapogatási lépésben a Learned Bloom Filter megközelítéshez a Bloom-szűrő kiértékelésére fordított további számítások miatt. Az ebben a lépésben végrehajtott előszűrés azonban csökkentette a kevert adatok méretét, ami segített csökkenteni a lefelé irányuló lépések által használt CPU-t, így csökkentve a teljes CPU-órát.

Másodszor, a Learned Bloom Filterek körülbelül 80%-kal kisebb teljes adatmérettel és körülbelül 80%-kal kevesebb megírt keverési bájttal rendelkeznek, mint egy normál csatlakozásnál. Ez stabilabb csatlakozási teljesítményt eredményez, amint azt alább tárgyaljuk. 

Csökkentett erőforrás-felhasználást tapasztaltunk a kísérletezés alatt álló egyéb termelési munkaterheléseinkben is. Kéthetes időszak alatt mind az öt munkaterhelésnél a Learned Bloom Filter megközelítés átlagot generált napi költségmegtakarítás of 25% amely modellképzéssel és indexkészítéssel is számol.

Az összekapcsolás során megkeveredett adatmennyiség csökkenése miatt jelentősen csökkenteni tudtuk analitikai folyamatunk működési költségeit, miközben stabilabbá is tettük azt. A következő diagram a futási időtartamok (falon) változóit mutatja (variációs együttható használatával). óra) rendszeres csatlakozási munkaterheléshez és tanult Bloom-szűrő alapú munkaterheléshez egy kéthetes időszak alatt, az általunk kísérletezett öt munkaterheléshez. A Learned Bloom Filters használatával végzett futtatások stabilabbak voltak – konzisztensebbek voltak az időtartamban –, ami lehetőséget teremt arra, hogy olcsóbb átmeneti, megbízhatatlan számítási erőforrásokba helyezzék át őket. 

Referenciák

[1] T. Kraska, A. Beutel, EH Chi, J. Dean és N. Polyzotis. A tanult indexstruktúrák esete. https://arxiv.org/abs/1712.01208, 2017.

[2] M. Mitzenmacher. A tanult virágzási szűrők optimalizálása Sandwiching segítségével. 

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


¹ A 3. június 30-án végződött 2023 hónap

² 3. június 30-án végződött 2023 hónap

Időbélyeg:

Még több roblox