Roblox が機械学習に最適化されたブルーム フィルターを使用して Spark 結合クエリのコストを削減する方法 - Roblox ブログ

Roblox が機械学習に最適化されたブルーム フィルターを使用して Spark 結合クエリのコストを削減する方法 – Roblox ブログ

ソースノード: 2983061

抽象

Roblox では毎日 65.5 14.0 万人のユーザーが数百万のエクスペリエンスに参加し、合計 XNUMX 四半期ごとに 1 億時間。 この相互作用により、分析と機械学習 (ML) の目的で強化されたペタバイト規模のデータ レイクが生成されます。 データ レイク内のファクト テーブルとディメンション テーブルを結合するにはリソースを大量に消費するため、これを最適化し、データ シャッフルを減らすために、ML を使用したスマートなデータ構造である学習済みブルーム フィルター [XNUMX] を採用しました。 これらのフィルターは存在を予測することで結合データを大幅にトリミングし、効率を高めてコストを削減します。 その過程で、モデル アーキテクチャも改善し、メモリと CPU の処理時間の削減、および動作の安定性の向上に大きなメリットがもたらされることを実証しました。

概要

データ レイクでは、ファクト テーブルとデータ キューブは効率的なアクセスのために一時的にパーティション化されていますが、ディメンション テーブルにはそのようなパーティションがなく、更新中にそれらをファクト テーブルと結合するとリソースが大量に消費されます。 結合のキー空間は、結合されるファクト テーブルの一時パーティションによって決まります。 その時間パーティションに存在するディメンション エンティティは、ディメンション データセット全体に存在するディメンション エンティティの小さなサブセットです。 その結果、これらの結合内のシャッフルされたディメンション データの大部分は最終的に破棄されます。. このプロセスを最適化し、不必要なシャッフルを減らすために、次の使用を検討しました。 ブルームフィルター 個別の結合キーを使用していましたが、フィルター サイズとメモリ フットプリントの問題に直面していました。

それらに対処するために、私たちは調査しました 学習済みブルームフィルターは、誤検知率を低く維持しながらブルーム フィルターのサイズを削減する ML ベースのソリューションです。 この革新により、計算コストが削減され、システムの安定性が向上するため、結合操作の効率が向上します。 次の図は、分散コンピューティング環境における従来の最適化された結合プロセスを示しています。

学習済みブルームフィルターによる結合効率の向上

ファクト テーブルとディメンション テーブル間の結合を最適化するために、学習済みブルーム フィルター実装を採用しました。 ファクト テーブルに存在するキーからインデックスを構築し、その後、結合操作の前にそのインデックスをデプロイしてディメンション データを事前にフィルタリングしました。 

従来のブルーム フィルターから学習されたブルーム フィルターへの進化

従来のブルーム フィルターは効率的ですが、望ましい誤検知率に達するためにロードする必要があるワーカー ノードごとに 15 ~ 25% の追加メモリが追加されます。 しかし、Learned Bloom Filters を利用することで、同じ誤検知率を維持しながらインデックス サイズを大幅に削減することができました。 これは、ブルーム フィルターがバイナリ分類問題に変換されるためです。 正のラベルはインデックスに値が存在することを示し、負のラベルは値が存在しないことを意味します。

ML モデルの導入により、値の最初のチェックが容易になり、その後、偽陰性を排除するためのバックアップ ブルーム フィルターが実行されます。 サイズの縮小は、モデルの圧縮表現と、バックアップ ブルーム フィルターに必要なキーの数の減少に起因します。 これは、従来のブルーム フィルター アプローチとは異なります。 

この作業の一環として、学習済みブルーム フィルター アプローチを評価するための XNUMX つの指標、つまりインデックスの最終シリアル化オブジェクト サイズと結合クエリ実行時の CPU 消費量を確立しました。 

実装上の課題を乗り越える

私たちの最初の課題は、ファクト テーブルにディメンション テーブル キーがほとんどない、非常に偏ったトレーニング データセットに対処することでした。 その際、テーブル間で約 2 分の XNUMX のキーが重複していることが観察されました。 これに取り組むために、私たちは Sandwich Learned Bloom Filter アプローチを活用しました [XNUMX]。 これは、初期の従来のブルーム フィルターを統合し、ファクト テーブルから欠落していたキーの大部分を削除することでデータセットの分布を再調整し、データセットから負のサンプルを効果的に排除します。 その後、最初のブルーム フィルターに含まれるキーのみが、誤検知とともに、「学習されたオラクル」と呼ばれる ML モデルに転送されました。 このアプローチにより、学習されたオラクルのバランスの取れたトレーニング データセットが得られ、バイアスの問題が効果的に克服されました。

1 番目の課題は、モデルのアーキテクチャとトレーニング機能に重点を置きました。 フィッシング URL の古典的な問題 [XNUMX] とは異なり、結合キー (ほとんどの場合、ユーザー/エクスペリエンスの一意の識別子) は本質的に有益ではありませんでした。 これにより、ディメンション エンティティがファクト テーブルに存在するかどうかを予測するのに役立つ潜在的なモデル機能としてディメンション属性を調査するようになりました。 たとえば、特定の言語でのエクスペリエンスに関するユーザー セッション情報を含むファクト テーブルを想像してください。 ユーザー ディメンションの地理的位置または言語設定属性は、個々のユーザーがファクト テーブルに存在するかどうかを示す良い指標となります。

XNUMX 番目の課題である推論遅延については、偽陰性を最小限に抑え、迅速な応答を提供するモデルが必要でした。 これらの主要な指標には、勾配ブースト ツリー モデルが最適な選択であり、精度と速度のバランスを取るためにその機能セットを削減しました。

学習されたブルーム フィルターを使用した更新された結合クエリは次のとおりです。

結果

データ レイクで学習したブルーム フィルターを使用した実験の結果を次に示します。 これらを 30 つの本番ワークロードに統合し、それぞれが異なるデータ特性を持っていました。 これらのワークロードの中で最も計算コストがかかる部分は、ファクト テーブルとディメンション テーブルの間の結合です。 ファクト テーブルのキー スペースは、ディメンション テーブルの約 XNUMX% です。 まず、最終的なシリアル化されたオブジェクト サイズの点で、学習済みブルーム フィルターが従来のブルーム フィルターよりも優れたパフォーマンスを発揮したことについて説明します。 次に、Learned Bloom Filters をワークロード処理パイプラインに統合することで観察されたパフォーマンスの向上を示します。

学習済みブルームフィルターのサイズ比較

以下に示すように、特定の誤検知率を見ると、学習されたブルーム フィルターの 17 つのバリアントは、従来のブルーム フィルターと比較して、合計オブジェクト サイズが 42 ~ XNUMX% 向上します。

さらに、勾配ブーストされたツリー ベースのモデルで機能のより小さなサブセットを使用することで、推論を高速化しながら最適化の損失をほんのわずかに抑えることができました。

学習されたブルームフィルターの使用結果 

このセクションでは、ブルーム フィルター ベースの結合のパフォーマンスを、いくつかのメトリックにわたって通常の結合のパフォーマンスと比較します。 

以下の表は、学習済みブルーム フィルターを使用した場合と使用しない場合のワークロードのパフォーマンスを比較しています。 合計誤検知確率が 1% の学習済みブルーム フィルターは、両方の結合タイプで同じクラスター構成を維持しながら、以下の比較を示します。 

まず、ブルーム フィルターの実装は、CPU 時間で通常の結合よりも 60% も優れたパフォーマンスを示したことがわかりました。 ブルーム フィルターの評価に追加のコンピューティングが費やされたため、学習済みブルーム フィルター アプローチのスキャン ステップの CPU 使用率が増加しました。 ただし、このステップで行われた事前フィルタリングにより、シャッフルされるデータのサイズが削減され、下流のステップで使用される CPU が削減され、合計 CPU 時間が削減されました。

第 80 に、学習済みブルーム フィルターでは、通常の結合よりも合計データ サイズが約 80% 少なく、書き込まれる合計シャッフル バイト数も約 XNUMX% 少なくなります。 これにより、以下で説明するように、結合パフォーマンスがより安定します。 

また、実験中の他の運用ワークロードでもリソース使用量の削減が確認されました。 XNUMX つのワークロードすべてにわたって XNUMX 週間にわたって、学習済みブルーム フィルター アプローチにより平均値が生成されました。 日々のコスト削減 of 25%、 これには、モデルのトレーニングとインデックスの作成も含まれます。

結合の実行中にシャッフルされるデータの量が減少したため、分析パイプラインの運用コストを大幅に削減すると同時に、分析パイプラインの安定性を高めることができました。次のグラフは、実行時間 (ウォール) の変動性 (変動係数を使用) を示しています。実験した XNUMX つのワークロードについて、通常の結合ワークロードと学習済みブルーム フィルター ベースのワークロードを XNUMX 週間にわたって実行しました。 学習済みブルーム フィルターを使用した実行はより安定しており、継続時間がより一貫しているため、安価で一時的な信頼性の低いコンピューティング リソースに移行できる可能性が開かれています。 

参考文献

[1] T. クラスカ、A. ボイテル、EH チー、J. ディーン、および N. ポリゾティス。 学習されたインデックス構造の場合。 https://arxiv.org/abs/1712.01208、2017。

[2] M.ミッツェンマッハー。 サンドイッチングによる学習済みブルーム フィルターの最適化。 

https://arxiv.org/abs/1803.01474、2018。


¹3年30月2023日までのXNUMXか月時点

²3年30月2023日に終了したXNUMXか月現在

タイムスタンプ:

より多くの ROBLOX