Roblox, Makine Öğrenimi Optimize Edilmiş Bloom Filtreleriyle Spark Katılın Sorgu Maliyetlerini Nasıl Azaltır - Roblox Blog

Roblox, Makine Öğrenimi Optimize Edilmiş Bloom Filtreleriyle Spark Katılın Sorgu Maliyetlerini Nasıl Azaltır? - Roblox Blog

Kaynak Düğüm: 2983061

Özet

Roblox'ta her gün, 65.5 milyon kullanıcı milyonlarca deneyimle etkileşime giriyor ve toplamda 14.0 üç ayda bir milyar saat. Bu etkileşim, analitik ve makine öğrenimi (ML) amaçları için zenginleştirilmiş petabayt ölçeğinde bir veri gölü oluşturur. Veri gölümüzde olgu ve boyut tablolarını birleştirmek kaynak yoğun olduğundan, bunu optimize etmek ve veri karıştırmayı azaltmak için ML kullanan akıllı veri yapıları olan Learned Bloom Filtrelerini [1] benimsedik. Bu filtreler, varlığı tahmin ederek birleştirme verilerini önemli ölçüde kısaltır, verimliliği artırır ve maliyetleri azaltır. Bu arada, model mimarilerimizi de geliştirdik ve bunların işleme için bellek ve CPU saatlerini azaltmanın yanı sıra operasyonel kararlılığı artırma konusunda sundukları önemli faydaları da gösterdik.

Giriş

Veri gölümüzde, olgu tabloları ve veri küpleri verimli erişim için geçici olarak bölümlendirilmiştir; boyut tablolarında ise bu tür bölümler yoktur ve güncellemeler sırasında bunların olgu tablolarıyla birleştirilmesi yoğun kaynak gerektirir. Birleştirmenin anahtar alanı, birleştirilen olgu tablosunun zamansal bölümü tarafından yönlendirilir. Bu zamansal bölümde mevcut olan boyut varlıkları, tüm boyut veri kümesinde mevcut olanların küçük bir alt kümesidir. Sonuç olarak, bu birleştirmelerdeki karıştırılmış boyut verilerinin çoğunluğu sonunda atılır. Bu süreci optimize etmek ve gereksiz karıştırmayı azaltmak için şunu kullanmayı düşündük: Çiçek Filtreleri farklı birleştirme anahtarlarında ancak filtre boyutu ve bellek alanı sorunlarıyla karşılaşıldı.

Bunları ele almak için araştırdık Bloom Filtrelerini ÖğrendimDüşük hatalı pozitif oranları korurken Bloom Filtresi boyutunu küçülten ML tabanlı bir çözüm. Bu yenilik, hesaplama maliyetlerini azaltarak ve sistem kararlılığını iyileştirerek birleştirme operasyonlarının verimliliğini artırır. Aşağıdaki şema, dağıtılmış bilgi işlem ortamımızdaki geleneksel ve optimize edilmiş birleştirme süreçlerini göstermektedir.

Öğrenilmiş Bloom Filtreleriyle Katılım Verimliliğini Artırma

Gerçek ve boyut tabloları arasındaki birleşimi optimize etmek için Learned Bloom Filter uygulamasını benimsedik. Olgu tablosunda bulunan anahtarlardan bir dizin oluşturduk ve ardından birleştirme işleminden önce boyut verilerini ön filtrelemek için dizini konuşlandırdık. 

Geleneksel Çiçeklenme Filtrelerinden Öğrenilmiş Çiçeklenme Filtrelerine Evrim

Geleneksel Bloom Filtresi verimli olsa da, istenen yanlış pozitif oranına ulaşmak için yüklenmesi gereken çalışan düğüm başına %15-25 oranında ek bellek ekler. Ancak Learned Bloom Filters'ı kullanarak aynı hatalı pozitif oranı korurken önemli ölçüde küçültülmüş bir endeks boyutu elde ettik. Bunun nedeni Bloom Filtresinin ikili sınıflandırma problemine dönüşmesidir. Pozitif etiketler endekste değerlerin varlığını belirtirken, negatif etiketler bunların bulunmadığı anlamına gelir.

Bir ML modelinin tanıtılması, değerlerin ilk kontrolünü kolaylaştırır ve ardından hatalı negatifleri ortadan kaldırmak için bir yedek Bloom Filtresi gelir. Küçültülmüş boyut, modelin sıkıştırılmış gösteriminden ve yedek Bloom Filtresi tarafından gereken azaltılmış anahtar sayısından kaynaklanmaktadır. Bu, onu geleneksel Bloom Filtresi yaklaşımından ayırır. 

Bu çalışmanın bir parçası olarak, Öğrenilmiş Bloom Filtresi yaklaşımımızı değerlendirmek için iki ölçüm oluşturduk: endeksin son serileştirilmiş nesne boyutu ve birleştirme sorgularının yürütülmesi sırasındaki CPU tüketimi. 

Uygulama Zorluklarını Giderme

İlk karşılaştığımız zorluk, olgu tablosunda az sayıda boyut tablosu anahtarı bulunan, oldukça önyargılı bir eğitim veri kümesini ele almaktı. Bunu yaparken tablolar arasında yaklaşık üçte bir oranında anahtar örtüşmesi gözlemledik. Bu sorunun üstesinden gelmek için Sandviç Öğrenilmiş Çiçeklenme Filtresi yaklaşımını kullandık [2]. Bu, olgu tablosunda eksik olan anahtarların çoğunu kaldırarak veri kümesi dağılımını yeniden dengelemek için başlangıçtaki geleneksel Bloom Filtresini entegre eder ve negatif örnekleri veri kümesinden etkili bir şekilde ortadan kaldırır. Daha sonra, yalnızca ilk Bloom Filtresinde bulunan anahtarlar, yanlış pozitiflerle birlikte, genellikle "öğrenilmiş kehanet" olarak adlandırılan ML modeline iletildi. Bu yaklaşım, öğrenilen kehanet için iyi dengelenmiş bir eğitim veri seti ile sonuçlandı ve önyargı sorununu etkili bir şekilde aştı.

İkinci zorluk, model mimarisi ve eğitim özelliklerine odaklanıyordu. Klasik kimlik avı URL'leri sorununun aksine [1], birleştirme anahtarlarımız (çoğu durumda kullanıcılar/deneyimler için benzersiz tanımlayıcılardır) doğası gereği bilgilendirici değildi. Bu bizi, olgu tablosunda bir boyut varlığının mevcut olup olmadığını tahmin etmeye yardımcı olabilecek potansiyel model özellikleri olarak boyut niteliklerini keşfetmeye yönlendirdi. Örneğin, belirli bir dildeki deneyimlere ilişkin kullanıcı oturumu bilgilerini içeren bir olgu tablosu hayal edin. Kullanıcı boyutunun coğrafi konumu veya dil tercihi özelliği, bireysel bir kullanıcının veri tablosunda bulunup bulunmadığının iyi göstergeleri olabilir.

Üçüncü zorluk, yani çıkarım gecikmesi, hem yanlış negatifleri en aza indiren hem de hızlı yanıtlar sağlayan modeller gerektiriyordu. Bu temel ölçümler için degradeyle güçlendirilmiş ağaç modeli en uygun seçimdi ve hassasiyet ile hızı dengelemek için özellik kümesini budadık.

Öğrenilen Bloom Filtrelerini kullanan güncellenmiş birleştirme sorgumuz aşağıda gösterildiği gibidir:

Sonuçlar

Veri gölümüzde Learned Bloom filtreleri ile yaptığımız deneylerin sonuçları aşağıdadır. Bunları, her biri farklı veri özelliklerine sahip olan beş üretim iş yüküne entegre ettik. Bu iş yüklerinin hesaplama açısından en pahalı kısmı, olgu tablosu ile boyut tablosu arasındaki birleştirmedir. Olgu tablolarının anahtar alanı, boyut tablosunun yaklaşık %30'udur. Başlangıç ​​olarak, nihai serileştirilmiş nesne boyutu açısından Öğrenilmiş Bloom Filtresinin geleneksel Bloom Filtrelerinden nasıl daha iyi performans gösterdiğini tartışıyoruz. Daha sonra, Learned Bloom Filtrelerini iş yükü işleme hatlarımıza entegre ederek gözlemlediğimiz performans iyileştirmelerini gösteriyoruz.

Öğrenilen Bloom Filtre Boyutu Karşılaştırması

Aşağıda gösterildiği gibi, belirli bir yanlış pozitif oranına bakıldığında, öğrenilen Bloom Filtresinin iki çeşidi, geleneksel Bloom Filtrelerine kıyasla toplam nesne boyutunu %17-42 arasında artırır.

Ek olarak, degrade destekli ağaç tabanlı modelimizde özelliklerin daha küçük bir alt kümesini kullanarak, çıkarımı daha hızlı yaparken optimizasyonun yalnızca küçük bir yüzdesini kaybettik.

Öğrenilen Bloom Filtresi Kullanım Sonuçları 

Bu bölümde Bloom Filtresi tabanlı birleştirmelerin performansını çeşitli ölçümlerde normal birleştirmelerin performansıyla karşılaştırıyoruz. 

Aşağıdaki tablo, Öğrenilmiş Bloom Filtreleri kullanılarak ve kullanılmadan iş yüklerinin performansını karşılaştırmaktadır. %1 toplam yanlış pozitif olasılığına sahip bir Öğrenilmiş Bloom Filtresi, her iki birleştirme türü için aynı küme yapılandırmasını korurken aşağıdaki karşılaştırmayı göstermektedir. 

İlk olarak, Bloom Filter uygulamasının CPU saatlerinde normal birleştirmeden %60'a kadar daha iyi performans gösterdiğini gördük. Bloom Filtresini değerlendirirken harcanan ek işlem nedeniyle Öğrenilmiş Bloom Filtresi yaklaşımı için tarama adımının CPU kullanımında bir artış gördük. Ancak bu adımda yapılan ön filtreleme, karıştırılan verinin boyutunu azalttı; bu da aşağı yöndeki adımlarda kullanılan CPU'nun azaltılmasına yardımcı oldu ve böylece toplam CPU saati azaltıldı.

İkincisi, Öğrenilmiş Bloom Filtreleri, normal birleştirmeye göre yaklaşık %80 daha az toplam veri boyutuna ve yaklaşık %80 daha az toplam karıştırma baytına sahiptir. Bu, aşağıda tartışıldığı gibi daha istikrarlı birleştirme performansına yol açar. 

Ayrıca deneme aşamasındaki diğer üretim iş yüklerimizde de kaynak kullanımının azaldığını gördük. Öğrenilen Çiçeklenme Filtresi yaklaşımı, beş iş yükünün tamamında iki haftalık bir süre boyunca ortalama bir sonuç elde etti günlük maliyet tasarrufu of 25,% bu aynı zamanda model eğitimi ve dizin oluşturulmasını da hesaba katar.

Birleştirmeyi gerçekleştirirken karıştırılan veri miktarının azalması nedeniyle, analiz hattımızın operasyonel maliyetlerini önemli ölçüde azaltmayı ve aynı zamanda onu daha istikrarlı hale getirmeyi başardık.Aşağıdaki grafik, çalıştırma sürelerindeki (duvar) değişkenliği (bir varyasyon katsayısı kullanarak) göstermektedir. deneme yaptığımız beş iş yükü için iki haftalık bir süre boyunca düzenli bir birleştirme iş yükü ve Öğrenilmiş Bloom Filtresi tabanlı iş yükü için saat süresi). Learned Bloom Filters'ı kullanan çalıştırmalar daha istikrarlıydı (süre açısından daha tutarlıydı), bu da onları daha ucuz, geçici, güvenilmez bilgi işlem kaynaklarına taşıma olasılığını ortaya çıkardı. 

Referanslar

[1] T. Kraska, A. Beutel, EH Chi, J. Dean ve N. Polyzotis. Öğrenilmiş Endeks Yapıları Örneği. https://arxiv.org/abs/1712.01208, 2017.

[2] M. Mitzenmacher. Öğrenilmiş Bloom Filtrelerini Sandviçleme Yoluyla Optimize Etme. 

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


¹3 Haziran 30'te sona eren 2023 ay itibarıyla

²3 Haziran 30'te sona eren 2023 ay itibarıyla

Zaman Damgası:

Den fazla Roblox