「Databricks SQL Serverless + DBT のテストから学んだ5つの教訓」
「Databricks SQL Serverless + DBTのテストから学んだ5つの教訓」
サーバーレスデータウェアハウスとdbtの同時スレッドのコストとパフォーマンスをテストするために、1万2000ドルの実験を行い、予想外の結果を得ました。
著者:ジェフ・チョウ、スチュワート・ブライソン
DatabricksのSQLデータウェアハウス製品は、プロダクションのSQLクエリとデータウェアハウスの効率化を求める企業にとって魅力的な提案です。しかし、使用量が増えると、これらのシステムのコストとパフォーマンスの分析が重要になります。
このブログでは、業界標準のTPC-DIベンチマークを活用して、サーバーレスSQLデータウェアハウス製品のコストとパフォーマンスについて、技術的な詳細を説明します。データエンジニアやデータプラットフォームマネージャーは、ここで提示された結果を活用して、データインフラストラクチャの選択に関するより良い意思決定をすることができるでしょう。
DatabricksのSQLデータウェアハウスのオファリングにはどのようなものがありますか?
特定の製品に入る前に、まずは現在利用可能なさまざまなオプションについて見てみましょう。Databricksは現在、3つの異なるデータウェアハウスオプションを提供しています:
- 「マスク言語モデリングタスクのBERTトレーニング方法」
- 「ほとんどのオンラインコンテンツがAIによって生成される場合、何が起こるのか?」
- ネットワークフローアルゴリズムの探求:情報を効率的にチャネル化する
- SQL Classic — 最も基本的なデータウェアハウスで、顧客のクラウド環境内で実行されます。
- SQL Pro — 性能が向上し、探索的データサイエンスに適しています。顧客のクラウド環境内で実行されます。
- SQL Serverless — “ベスト”のパフォーマンスであり、計算は完全にDatabricksが管理します。
コストの観点からは、クラシックとプロはユーザーのクラウド環境内で実行されます。つまり、Databricksの利用料(DBU)とクラウドプロバイダ(例:AWS EC2料金)の2つの請求書が送られてきます。
コストの比較をより理解するために、報告されたインスタンスタイプに基づく実行コストの例を見てみましょう:
上記の表では、オンデマンドとスポットのコスト比較も示されています。この表からわかるように、サーバーレスオプションにはクラウドのコンポーネントがないため、すべてがDatabricksによって管理されています。
すべてのオンデマンドインスタンスを使用している場合、サーバーレスはプロと比較してコスト効果的であるかもしれません。ただし、安いスポットノードが利用可能な場合は、プロの方が安価となる場合もあります。全体的に、サーバーレスの価格設定は比較的合理的であり、クラウドコストも含まれているため、私の意見では「プレミアム」な価格です。
また、最も安価なオプションである同等のジョブのコンピュートクラスターも含まれています。コストが心配な場合は、SQLクエリをジョブのコンピュートで実行することもできます!
サーバーレスの利点と欠点
Databricksのサーバーレスオプションは、完全に管理されたコンピュートプラットフォームです。これは、すべてのコンピュートの詳細がユーザーに隠されているSnowflakeと非常に似ています。大まかに言うと、これには以下の利点と欠点があります:
利点:
- インスタンスや設定について考える必要がありません
- ゼロからクラスタを起動するよりも立ち上げ時間が短いです (観察から5〜10秒)
欠点:
- 企業は、Databricks内で実行されるすべての計算に対してセキュリティ上の問題を抱える可能性があります
- 企業は、特定のインスタンスに特別な割引が適用される可能性のあるクラウド契約を活用できない可能性があります
- クラスタを最適化する能力がないため、Databricksが選んだインスタンスや設定が実際にジョブに適しているかどうかは分かりません
- 計算はブラックボックスであり、ユーザーは何が起こっているのか、Databricksが裏で実装している変更についてはわかりません。これが安定性の問題を引き起こす可能性があります。
サーバーレスの固有のブラックボックス性のため、我々は人々が依然として持っているさまざまな調整可能なパラメータとそれらが性能に与える影響を調査することに興味を持ちました。それでは、私たちが調査した内容について詳しく見ていきましょう:
実験の設定
この研究で「実践的な」アプローチを取り、実際の会社がSQLデータウェアハウスを実行したい場合に行う可能性のあることをシミュレートしました。現代のデータスタックで非常に人気のあるツールであるDBTを見て、次の2つのパラメータを調査と評価の対象としました:
- ウェアハウスのサイズ — [‘2X-Small’, ‘X-Small’, ‘Small’, ‘VoAGI’, ‘Large’, ‘X-Large’, ‘2X-Large’, ‘3X-Large’, ‘4X-Large’]
- DBTスレッドs — [‘4’, ‘8’, ’16’, ’24’, ’32’, ’40’, ’48’]
これらの2つを選んだ理由は、どちらも「万能」なチューニングパラメータであり、両方がジョブの計算側に影響を与えるからです。特にDBTスレッドは、DAGを通してジョブを並列化するための効果的なチューニングです。
選んだワークロードは人気のあるTPC-DIベンチマークで、スケールファクターは1000です。このワークロードは実際のデータワークロードに近い完全なパイプラインです。たとえば、以下のDBT DAGのスクリーンショットがあります。これを見ればわかるように、かなり複雑で、DBTスレッドの数を変更すると影響が出る可能性があります。
ちなみに、Databricksには素晴らしいオープンソースリポジトリがあり、Databricks内でTPC-DIベンチマークを迅速にセットアップするのに役立ちます。 (私たちはDBTを使用しているため、これを使用していませんでした)。
実験の詳細については、Databricks Workflowsを使用し、タスクタイプをDBTとしてdbt CLIの「ランナー」として使用し、すべてのジョブを同時に実行しました。Databricks側の未知の環境条件による差異はないはずです。
各ジョブは新しいSQLデータウェアハウスを立ち上げ、後で解体し、同じUnityカタログ内の固有のスキーマで実行しました。実行結果を収集するためにElementary dbt packageを使用し、実行ごとにPythonノートブックを実行してこれらのメトリックを集約スキーマに収集しました。
コストはDatabricksシステムテーブルから抽出され、請求可能使用量に関するものです。
この実験を試してみて、Githubリポジトリをここでクローンしてください
結果
以下は、コストと実行時間に対するデータベースウェアハウスのサイズのグラフです。下記のグラフからは、VoAGIサイズのデータベースウェアハウスでは実行時間がスケーリングを停止していることがわかります。VoAGIよりも大きなサイズでは実行時間に影響がないか、むしろ悪くなっている可能性もあります。これは、クラスタのサイズをスケーリングすることが無限ではなく、より多くの計算を追加しても性能の向上が限定的であることを示す典型的なトレンドです。
CS愛好家の皆さんへ、これは基本的なCSの原則、アムダールの法則です。
ひとつの異例な観察結果は、VoAGIの倉庫が次の3つのサイズ(largeから2xlarge)よりも優れたパフォーマンスを発揮したことです。この特定のデータポイントを数回繰り返し、一貫した結果を得たため、これは奇妙な偶然ではありません。サーバーレスのブラックボックス性のため、裏側で何が起こっているのかを知ることができず、説明することができません。
VoAGIではスケーリングが停止するため、以下のコストグラフからわかるように、VoAGIの倉庫サイズを超えると、コストが急増し始めます。つまり、ランタイムが一定のまま高価なマシンを増やしているため、無駄な追加のパフォーマンスを支払っています。
以下のグラフは、スレッド数と倉庫サイズの変化に伴うランタイムの相対的な変化を示しています。水平のゼロラインよりも大きな値では、ランタイムが増加しています(悪いこと)。
ここにあるデータはややノイズがありますが、倉庫のサイズに基づいていくつかの興味深い洞察があります:
- 2x-small — スレッド数を増やすと、ジョブの実行時間が通常よりも長くなります。
- X-smallからlarge — スレッド数を増やすと、ジョブの実行時間が通常よりも約10%高速化される傾向がありますが、利益はほとんど変わらず、スレッド数をさらに増やしても価値はありません。
- 2x-large — 実際には最適なスレッド数があり、それは24です。明確な放物線状のラインで確認できます。
- 3x-large — 8つのスレッドカウントで非常に異常な実行時間の急増があります。なぜかはわかりません。
すべてを包括的なプロットにまとめるために、以下のプロットではコストとジョブの実行時間の関係を示しています。異なる色は異なる倉庫サイズを表し、バブルのサイズはDBTスレッドの数を示しています。
上記のプロットでは、通常の傾向として、大きな倉庫は通常、短い時間でジョブを完了させますが、コストが高くなります。ただし、いくつかの異常なポイントがあります:
- VoAGIがベスト — コストと実行時間の観点から見て、VoAGIは最適な倉庫です。
- DBTスレッドの影響 — 小規模な倉庫の場合、スレッド数を変更すると実行時間が約10%増減するようですが、コストはほとんど変わりません。大きな倉庫の場合、スレッド数はコストと実行時間の両方にかなり影響します。
結論
まとめると、Databricks SQLサーバレス+DBT製品に関する私たちのトップ5の学びは次のとおりです:
- 経験則はよくない — 倉庫のサイズやDBTスレッドの数についての「経験則」だけに頼ることはできません。予想される傾向は存在しますが、一定したものではなく、予測できるものではなく、完全にワークロードとデータに依存します。
- 大きなばらつき — 同じワークロードの場合、コストは$5から$45まで、実行時間は2分から90分まで異なる組み合わせによって変動します。
- サーバレスのスケーリングには限界がある — サーバーレスの倉庫は無限にスケールしないため、大きな倉庫はスピードアップを提供せず、コストの増加のみを引き起こします。
- VoAGIが優れている? — TPC-DIベンチマークで、VoAGIサーバーレスSQL倉庫が多くの大きな倉庫サイズよりもコストとジョブの実行時間の両方で優れた結果を出しましたが、なぜかは分かりません。
- ジョブクラスターが一番安いかもしれません — コストが心配な場合、ノートブックではなく標準のジョブコンピュートに切り替えると格段に安くなるかもしれません。
ここで報告された結果は、ブラックボックスの「サーバーレス」システムのパフォーマンスにはいくつかの異常が生じる可能性があることを明らかにしています。データブリックの壁の中ですべてが行われているため、私たちは何が起こっているのか全くわかりません。おそらく、巨大なスパーククラスター上でKubernetesで実行されているかもしれません。あるいは、アマゾンと特定のインスタンスに関して特別な取引をしているかもしれません。いずれにしても、予測できない性質がコストとパフォーマンスの制御を難しくしています。
各ワークロードは、その状態によってのみ真実なコストの実験だけが成り立つという「おおまかなルール」や高価な実験に依存することができません。サーバーレスシステムのより混沌とした性質は、これらのシステムが閉ループ制御システムが必要かどうかという疑問を投げかけます。
内省的な観点から言えば、サーバーレスのビジネスモデルは本当に魅力的です。前提として、データブリックが合理的なビジネスであり、収益を減少させたくないとすると、コンピューティングの向上をする動機があるかという問いが浮かびます。
問題は次のようなものです。もし彼らがサーバーレスを2倍速くしたら、突然サーバーレスからの収益が50%減少します – それはデータブリックにとって非常に悪い日です。もし彼らがそれを2倍速くすることができ、そしてスピードアップを相殺するためにDBUのコストを2倍にしたら、彼らは収益中性の状態を維持することができます(実際にはPhotonについてはそうしました)。
したがって、データブリックは顧客の実行時間を同じくらいに保ちながら、内部コストを減らすというインセンティブを持っています。これはデータブリックにとって素晴らしいことですが、コスト削減につながるサーバーレスの高速化技術をユーザーに提供することは難しいです。
Databricksパイプラインを改善する方法についてもっと学びたいですか? Jeff ChouやSync Teamのメンバーにお問い合わせください。
リソース
- この実験を自分で試して、ここでリポジトリをクローンしてください
関連コンテンツ
- データパイプラインにクローズドループフィードバックコントロールが必要な理由
- PhotonとGravitonインスタンスを使用したDatabricksクラスターは価値があるか?
- Databricksの自動スケーリングはコスト効果的ですか?
- Gradientの紹介 – Databricksの最適化を簡単にする
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles