Kuinka Roblox vähentää Spark Join -kyselykustannuksia koneoppimiseen optimoiduilla Bloom-suodattimilla - Roblox-blogi

Kuinka Roblox vähentää Spark Join -kyselykustannuksia koneoppimiseen optimoiduilla kukintasuodattimilla – Roblox-blogi

Lähdesolmu: 2983061

Abstrakti

Joka päivä Robloxilla, 65.5 miljoona käyttäjää hyödyntää miljoonia kokemuksia, yhteensä 14.0 miljardia tuntia neljännesvuosittain. Tämä vuorovaikutus luo petatavun mittakaavan datajärven, jota on rikastettu analytiikkaa ja koneoppimista (ML) varten. Tietojärvemme fakta- ja ulottuvuustaulukoiden yhdistäminen vaatii resursseja, joten optimoidaksemme tämän ja vähentääksemme tietojen sekoittamista otettiin käyttöön Learned Bloom Filters [1] – älykkäät tietorakenteet, joissa käytetään ML:ää. Ennakoimalla läsnäolon nämä suodattimet leikkaavat liitostietoja huomattavasti, mikä parantaa tehokkuutta ja alentaa kustannuksia. Matkan varrella paransimme myös malliarkkitehtuuriamme ja osoitimme niiden tarjoamat merkittävät edut muistin ja prosessoritunnin vähentämisessä sekä toiminnan vakauden lisäämisessä.

esittely

Datajärvessämme faktataulukot ja datakuutiot on osioitu väliaikaisesti tehokkaan käytön takaamiseksi, kun taas ulottuvuustaulukoista tällaiset osiot puuttuvat, ja niiden yhdistäminen faktataulukoihin päivitysten aikana on resurssivaltaista. Liitoksen avainavaruutta ohjaa yhdistettävän faktataulukon ajallinen osio. Tuossa ajallisessa osiossa olevat ulottuvuusentiteetit ovat pieni osajoukko niistä, jotka ovat koko ulottuvuustietojoukossa. Tämän seurauksena suurin osa näiden liitosten sekoitetuista mittatiedoista lopulta hylätään. Tämän prosessin optimoimiseksi ja tarpeettoman sekoituksen vähentämiseksi harkitsimme sen käyttöä Bloom suodattimet erillisillä liitosnäppäimillä, mutta kohtasivat suodattimen kokoon ja muistitilanteeseen liittyviä ongelmia.

Niiden käsittelemiseksi tutkimme Oppineet Bloom-suodattimetML-pohjainen ratkaisu, joka pienentää Bloom-suodattimen kokoa säilyttäen samalla alhaiset vääriä positiivisia osia. Tämä innovaatio tehostaa join-toimintoja alentamalla laskentakustannuksia ja parantamalla järjestelmän vakautta. Seuraava kaavio havainnollistaa tavanomaisia ​​ja optimoituja liitosprosesseja hajautetussa laskentaympäristössämme.

Paranna liitostehokkuutta opetetuilla kukintasuodattimilla

Otimme käyttöön Learned Bloom Filter -toteutuksen fakta- ja ulottuvuustaulukoiden välisen liitoksen optimoimiseksi. Rakensimme indeksin tietotaulukossa olevista avaimista ja otimme indeksin käyttöön dimensiotietojen esisuodattamiseen ennen yhdistämistoimintoa. 

Evoluutio perinteisistä kukintasuodattimista opittuihin kukintasuodattimiin

Vaikka perinteinen Bloom-suodatin on tehokas, se lisää 15–25 % lisämuistia työntekijäsolmua kohden, joka joutuu lataamaan sen, jotta se saavuttaa halutun väärän positiivisuuden. Mutta käyttämällä Learned Bloom Filters -suodattimia saavutimme huomattavasti pienemmän indeksin koon säilyttäen samalla väärän positiivisen määrän. Tämä johtuu Bloom-suodattimen muuttumisesta binääriluokitteluongelmaksi. Positiiviset tunnisteet osoittavat arvojen läsnäolon indeksissä, kun taas negatiiviset tarrat tarkoittavat, että ne puuttuvat.

ML-mallin käyttöönotto helpottaa arvojen alustavaa tarkistusta, jota seuraa Bloom-varasuodatin väärien negatiivisten poistamiseksi. Pienennetty koko johtuu mallin pakatuista esityksistä ja Bloom-varasuodattimen vaatimien avainten määrästä. Tämä erottaa sen perinteisestä Bloom Filter -lähestymistavasta. 

Osana tätä työtä loimme kaksi mittaria Learned Bloom Filter -lähestymistavan arvioimiseksi: indeksin lopullinen sarjoitetun objektin koko ja suorittimen kulutus liitoskyselyiden suorittamisen aikana. 

Navigointi toteutuksen haasteissa

Alkuperäinen haasteemme oli käsitellä erittäin puolueellista harjoitustietojoukkoa, jossa oli muutamia ulottuvuustaulukon avaimia tietotaulukossa. Näin tehdessämme havaitsimme, että taulukoiden välillä oli noin yksi kolmesta avaimesta. Tämän ratkaisemiseksi hyödynsimme Sandwich Learned Bloom Filter -lähestymistapaa [2]. Tämä integroi alkuperäisen perinteisen Bloom-suodattimen tasapainottamaan tietojoukon jakautumista poistamalla suurimman osan faktataulukosta puuttuvista avaimista, mikä eliminoi tehokkaasti negatiiviset näytteet tietojoukosta. Myöhemmin vain alkuperäiseen Bloom Filteriin sisältyneet avaimet ja väärät positiiviset tulokset välitettiin ML-malliin, jota usein kutsutaan "oppituksi oraakkeliksi". Tämä lähestymistapa johti hyvin tasapainoiseen harjoitustietoaineistoon oppineelle oraakkelille, mikä ratkaisee harhaongelman tehokkaasti.

Toinen haaste keskittyi malliarkkitehtuuriin ja koulutusominaisuuksiin. Toisin kuin klassinen verkkourkinta-URL-osoitteiden ongelma [1], liittymisavaimemme (jotka useimmissa tapauksissa ovat käyttäjien/kokemusten yksilöllisiä tunnisteita) eivät olleet luonnostaan ​​informatiivisia. Tämä sai meidät tutkimaan ulottuvuusattribuutteja mahdollisina mallin ominaisuuksina, jotka voivat auttaa ennustamaan, onko ulottuvuuskokonaisuus läsnä tietotaulukossa. Kuvittele esimerkiksi faktataulukko, joka sisältää käyttäjän istuntotiedot tietyn kielen kokemuksista. Käyttäjäulottuvuuden maantieteellinen sijainti tai kieliasetus on hyvä indikaattori siitä, onko yksittäinen käyttäjä läsnä tietotaulukossa vai ei.

Kolmas haaste – päätelmälatenssi – vaati malleja, jotka sekä minimoivat väärät negatiivit että tarjosivat nopeita vastauksia. Gradientilla tehostettu puumalli oli optimaalinen valinta näille keskeisille mittareille, ja karsimme sen ominaisuusjoukkoa tarkkuuden ja nopeuden tasapainottamiseksi.

Päivitetty liittymiskyselymme oppituilla Bloom-suodattimilla on seuraavanlainen:

tulokset

Tässä ovat tulokset kokeistamme Learned Bloom -suodattimilla datajärvessämme. Integroimme ne viiteen tuotantomäärään, joista jokaisella oli erilaiset dataominaisuudet. Laskennallisesti kallein osa näistä työkuormista on faktataulukon ja dimensiotaulukon välinen liitos. Faktataulukoiden avainavaruus on noin 30 % mittataulukosta. Aluksi keskustelemme siitä, kuinka Learned Bloom Filter suoritti perinteiset Bloom Filters -suodattimet lopullisen sarjoitetun objektikoon suhteen. Seuraavaksi esittelemme suorituskyvyn parannuksia, joita havaitsimme integroimalla Learned Bloom Filters -suodattimet työkuormituksen käsittelyputkiin.

Opittu Bloom-suodattimen koon vertailu

Kuten alla näytetään, kun tarkastellaan annettua väärää positiivista määrää, opitun Bloom-suodattimen kaksi muunnelmaa parantavat kohteen kokonaiskokoa 17-42 % verrattuna perinteisiin Bloom-suodattimiin.

Lisäksi, kun käytimme pienempää osajoukkoa ominaisuuksia gradienttitehostetussa puupohjaisessa mallissamme, menetimme vain pienen prosenttiosuuden optimoinnista ja nopeuttamme päättelyä.

Opitut Bloom-suodattimen käyttötulokset 

Tässä osiossa vertaamme Bloom Filter -pohjaisten liitosten tehokkuutta useiden mittareiden tavallisiin liitoksiin. 

Alla olevassa taulukossa verrataan työkuormien suorituskykyä Learned Bloom Filters -suodattimien kanssa ja ilman niitä. Learned Bloom Filter, jonka kokonaistodennäköisyys on 1 %, osoittaa alla olevan vertailun säilyttäen samalla saman klusterin kokoonpanon molemmille liitostyypeille. 

Ensinnäkin havaitsimme, että Bloom Filter -toteutus suoritti tavallisen liitoksen jopa 60 % prosessoritunteina. Havaitsimme Learned Bloom Filter -lähestymistavan skannausvaiheen suorittimen käytön lisääntyneen Bloom-suodattimen arvioimiseen käytetyn lisälaskennan vuoksi. Tässä vaiheessa tehty esisuodatus kuitenkin pienensi sekoitettavien tietojen kokoa, mikä auttoi vähentämään jatkovaiheiden käyttämää CPU:ta, mikä vähensi prosessorin kokonaistunteja.

Toiseksi Learned Bloom Filters -suodattimilla on noin 80 % pienempi datan kokonaiskoko ja noin 80 % vähemmän kirjoitettuja sekoitustavuja kuin tavallisessa liitoksessa. Tämä johtaa vakaampaan liitossuorituskykyyn, kuten alla käsitellään. 

Näimme myös vähentyneen resurssien käytön muissa kokeiluvaiheessa olevissa tuotantotyökuormissa. Kahden viikon aikana kaikilla viidellä työmäärällä Learned Bloom Filter -lähestymistapa tuotti keskiarvon päivittäisiä kustannussäästöjä of 25%, joka vastaa myös mallikoulutuksesta ja indeksien luomisesta.

Koska yhdistämisen aikana sekoitetun datan määrä väheni, pystyimme merkittävästi alentamaan analytiikkaputkistomme käyttökustannuksia samalla, kun samalla tekimme siitä vakaamman. Seuraava kaavio näyttää vaihtelua (käyttäen variaatiokerrointa) ajon kestojen (seinä) välillä. kelloaika) säännölliseen liittymistyökuormaan ja Learned Bloom Filter -pohjaiseen työmäärään kahden viikon aikana niille viidelle kokeilulle työmäärälle. Ajot, joissa käytettiin Learned Bloom Filters -suodattimia, olivat vakaampia – johdonmukaisempia kestoltaan – mikä avaa mahdollisuuden siirtää ne halvempiin ohimeneviin epäluotettaviin laskentaresursseihin. 

Viitteet

[1] T. Kraska, A. Beutel, EH Chi, J. Dean ja N. Polyzotis. Opittujen indeksirakenteiden tapaus. https://arxiv.org/abs/1712.01208, 2017.

[2] M. Mitzenmacher. Opittujen kukintasuodattimien optimointi Sandwichingillä. 

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


¹ 3 päättyneeltä 30 kuukaudelta

² Kolmen kuukauden ajalta, joka päättyi 3

Aikaleima:

Lisää aiheesta Roblox