Fabric の Apache Spark 構成を自動チューニングする方法
Autotune は、Apache Spark 構成を自動調整し、ワークロードの実行時間を最小限に抑えてパフォーマンスを最適化します。 Autotune では、広範な労力、リソース、時間、実験を必要とする手動チューニングと比較して時間とリソースが節約されます。 Autotune では、ワークロードの実行履歴データを使用して、特定のワークロードに対して最も効果的な構成を繰り返し検出して適用します。
Note
Microsoft Fabric の自動チューニング クエリ チューニング機能は現在プレビュー段階です。 Autotune はすべてのリージョンで使用できますが、既定では無効です。 Spark ノートブックまたは Spark ジョブ定義コードにそれぞれの Spark 設定を含めることで、環境内または単一セッション内の Spark 構成設定を使用してアクティブ化できます。
クエリのチューニング
Autotune では、クエリごとに 3 つのApache Spark 設定が個別に構成されます。
spark.sql.shuffle.partitions
- 結合または集計中のデータ シャッフルのパーティション数を設定します。 既定値は 200 です。spark.sql.autoBroadcastJoinThreshold
- 結合の実行時にすべてのワーカー ノードにブロードキャストされるテーブルの最大サイズをバイト単位で設定します。 既定値は 10 MB です。spark.sql.files.maxPartitionBytes
- ファイルの読み取り時に 1 つのパーティションに取り込める最大バイト数を定義します。 Parquet、JSON、ORC ファイル ベースのソースで機能します。 既定値は 128 MB です。
ヒント
Autotune クエリ チューニングでは、個々のクエリが調べられ、クエリごとに個別の ML モデルが構築されます。 具体的には次を対象とします。
- 反復的なクエリ
- 実行時間の長いクエリ (実行時間が 15 秒を超えるクエリ)
- Apache Spark SQL API クエリ (非常にまれな RDD API で記述されたものを除く) で、言語 (Scala、PySpark、R、Spark SQL) に関係なくすべてのクエリを最適化します
この機能は、ノートブック、Apache Spark ジョブ定義、およびパイプラインと互換性があります。 利点は、クエリの複雑さ、使用されるメソッド、および構造で異なります。 広範なテストでは、データの読み取り、結合の実行、集計、並べ替えなど、探索的データ分析に関連するクエリにより最大の利点が実現することが示されています。
Autotune の背後にある AI ベースの直感
自動チューニング機能は、反復的なプロセスを利用してクエリのパフォーマンスを最適化します。 デフォルトの構成から始まり、機械学習モデルを使用して有効性を評価します。 ユーザーがクエリを送信すると、システムは以前の対話に基づいて格納されたモデルを取得します。 重心という名前のデフォルトの設定に関する潜在的な構成が生成されます。 モデルによって予測される最適な候補が適用されます。 クエリの実行後、パフォーマンス データがシステムに送り返され、モデルが調整されます。
フィードバック ループは、重心を最適な設定に徐々にシフトします。 回帰のリスクを最小限に抑えながら、時間の経過と同時にパフォーマンスを改善します。 ユーザー クエリに基づく継続的な更新により、パフォーマンス ベンチマークを絞り込めます。 さらに、このプロセスは重心構成を更新して、モデルがより効率的な設定に段階的に移行するようにします。 これは、過去のパフォーマンスを評価し、それらを将来の調整の指針に使用することで達成されます。 すべてのデータ ポイントを使用して、異常の影響を軽減します。
責任ある AI の観点から見ると、Autotune の機能には、データの使用状況と利点に関する情報を常に把握できるように設計された透明性メカニズムが含まれています。 セキュリティとプライバシーは、Microsoft の標準に準拠しています。 継続的な監視は、起動後のパフォーマンスとシステムの整合性を維持します。
自動チューニングを有効にする
自動チューニングはすべての運用リージョンで使用できますが、既定では無効になっています。これは、環境内の Spark 構成設定を使用してアクティブ化できます。自動チューニングを有効にするには、新しい環境を作成するか、既存の環境に対して、次のスクリーンショットに示すように Spark プロパティ 'spark.ms.autotune.enabled = true' を設定します。この設定は、その環境で実行されているすべてのノートブックとジョブによって継承され、自動的にチューニングされます。
Autotune には、パフォーマンスの監視とパフォーマンスの低下を検出するためのメカニズムが組み込まれています。 たとえば、クエリが異常に大量のデータを処理する場合、Autotune は自動的に非アクティブ化されます。 最適な構成を学習して特定するために、20から25回のイテレーションが必要です。
Note
Autotune は、Fabric Runtime 1.1 および Runtime 1.2 と互換性があります。 高コンカレンシー モードまたはプライベート エンドポイントが有効になっている場合、Autotune は機能しません。 ただし、自動チューニングは構成に関係なく、自動スケールとシームレスに統合されます。
Spark ノートブックまたは Spark ジョブ定義コードにそれぞれの Spark 設定を含めることで、単一セッション内で自動チューニングを有効にすることができます。
%%sql
SET spark.ms.autotune.enabled=TRUE
それぞれの Spark ノートブックまたは Spark ジョブ定義コードの Spark 設定を使用することで自動チューニングを制御できます。 Autotune を無効にするには、次のコマンドを、コードの最初のセル (ノートブック) または行 (SJD) として実行します。
%%sql
SET spark.ms.autotune.enabled=FALSE
ケース スタディ
Apache Spark クエリを実行すると、自動チューニングによって、クエリの実行の最適化専用のカスタマイズされた ML モデルが作成されます。 クエリ パターンとリソースのニーズを分析します。 国などの特定の属性に基づいてデータセットをフィルター処理する最初のクエリについて考えてみましょう。 この例では地理的なフィルター処理を使用していますが、原則はクエリ内のすべての属性または操作に汎用的に適用されます。
%%pyspark
df.filter(df.country == "country-A")
Autotune はこのクエリから学習し、後続の実行を最適化します。 たとえば、フィルター値を変更したり、別のデータ変換を適用したりしてクエリが変更されると、クエリの構造上の本質は、多くの場合一貫性が保たれます。
%%pyspark
df.filter(df.country == "country-B")
変更にもかかわらず、自動チューニングは新しいクエリの基本的な構造を識別し、以前に学習した最適化を実装します。 この機能により、新しいクエリイテレーションごとに手動で再構成する必要なく、継続的な高効率が保証されます。
ログ
各クエリについて、自動チューニングによって 3 つの Spark 構成に最適な設定が決定されます。 ログに移動して、推奨される設定を表示できます。 自動チューニングで推奨される構成は、ドライバー ログに配置されます。具体的には、[Autotune] で始まるエントリです。
ログにはさまざまな種類のエントリがあります。 主なものは次のとおりです。
状態 | 説明 |
---|---|
AUTOTUNE_DISABLED | スキップされます。 Autotune が無効になっています。テレメトリ データの取得とクエリの最適化を防ぎます。 Autotune で、お客様のプライバシーを尊重しながら、その機能を完全に使用できるようにします。" |
QUERY_TUNING_DISABLED | スキップされます。 Autotune クエリ チューニングが無効になっています。 これを有効にして、Spark SQL クエリの設定を微調整します。 |
QUERY_PATTERN_NOT_MATCH | スキップされます。 クエリ パターンが一致しませんでした。 Autotune は、読み取り専用クエリに対して有効です。 |
QUERY_DURATION_TOO_SHORT | スキップされます。 クエリの実行時間が短すぎて最適化が行えません。 Autotune では、効果的なチューニングを行うには、より長いクエリが必要です。 クエリは少なくとも 15 秒間実行する必要があります。 |
QUERY_TUNING_SUCC Enterprise Edition D | 成功しました。 クエリのチューニングが完了しました。 最適な Spark 設定が適用されました。 |
わかりやすさに関するメモ
このセクションでは、責任ある AI Standard に準拠して、Autotune 機能の使用と検証を明確にし、透明性を促進し、情報に基づいた意思決定を可能にすることを目的としています。
Autotune の目的
Autotune は、主にデータプロフェッショナル向けに Apache Spark ワークロードの効率を高めるために開発されています。 その主な機能は次のとおりです。
- Apache Spark 構成のチューニングを自動化して実行時間を短縮する。
- 手動チューニング作業を最小限に抑える。
- 履歴ワークロード データを使用して構成を繰り返し調整する。
Autotune の検証
Autotune では、その有効性と安全性を確保するための広範なテストが実施されています。
- チューニング アルゴリズムの有効性を検証するために、さまざまな Spark ワークロードを使用した厳格なテスト。
- パフォーマンス上の利点を示すための、標準の Spark 最適化方法に対するベンチマーク。
- Autotune の実際の価値を強調した実際のケース スタディ。
- ユーザー データを保護するための厳格なセキュリティとプライバシーの標準への準拠。
ユーザー データは、ワークロードのパフォーマンスを向上させるためにのみ使用され、機密情報の誤用や漏えいを防ぐための堅牢な保護を施されています。