次の方法で共有


Fabric の Apache Spark 構成を自動チューニングする方法

Autotune では、Apache Spark 構成が自動的に調整され、ワークロードの実行時間が短縮され、パフォーマンスが向上します。 手動チューニングを回避するのに役立ちます。通常は、繰り返し試行とエラーが必要です。 Autotune では、ワークロードの実行履歴データを使用して、各ワークロードの有効な設定を繰り返し検出して適用します。

Microsoft Fabricでのクエリチューニングの自動チューニングは現在プレビュー段階です。 すべての運用リージョンで使用できますが、既定では無効になっています。 環境の Spark 構成で有効にするか、ノートブックまたは Spark ジョブ定義コードの 1 つのセッションに対して有効にします。

構成の既定値と要件

  • 既定の動作: 自動チューニングは既定では オフ になっています。
  • オフに設定する必要はありません:自動チューニングを有効にしない場合、Spark では標準の構成動作が使用されます。
  • 自動チューニングを使用するために必要なセットアップ: 次のいずれかを spark.ms.autotune.enabled=true 設定します。

クエリのチューニング

クエリごとに次の 3 つの Apache Spark 設定を自動チューニングします。

  • spark.sql.shuffle.partitions: 結合または集計中のデータ シャッフルのパーティション数を設定します。 既定値は 200 です。
  • spark.sql.autoBroadcastJoinThreshold: 結合中にワーカー ノードにブロードキャストする最大テーブル サイズをバイト単位で設定します。 既定値は 10 MB です。
  • spark.sql.files.maxPartitionBytes: ファイルの読み取り時に 1 つのパーティションにパックする最大バイト数を設定します。 Parquet、JSON、ORC のファイル ソースに適用されます。 既定値は 128 MB です。

自動クエリチューニングは、各クエリを調査し、そのクエリ用の個別の機械学習モデルが構築されます。 次の場合に最適です。

  • 反復的なクエリ
  • 実行時間の長いクエリ (15 秒以上)
  • Apache Spark SQL API クエリ (RDD API ではない)

ノートブック、Spark ジョブ定義、およびパイプラインで自動チューニングを使用できます。 利点は、クエリの複雑さとデータの形状によって異なります。 テストでは、読み取り、結合、集計、並べ替えなどの探索的データ分析パターンで最大の利益が得られます。

自動チューニングが有効になっている実行時間のスクリーンショット。

自動チューニングのしくみ

Autotune では、反復的な最適化ループが使用されます。

  1. 既定の Spark 構成値から開始します。
  2. ベースライン (重心) に基づいて候補の構成を生成します。
  3. 前の実行でトレーニングされたモデルを使用して、最適な候補を予測します。
  4. 候補を適用し、クエリを実行します。
  5. 実行結果をモデルに戻します。

時間の経過とともに、ベースラインは回帰リスクを軽減しながら、より適切な設定に移行します。 収集されたすべてのデータ ポイントを使用すると、異常の影響を軽減するのにも役立ちます。

自動チューニングを有効にする

自動チューニングはすべての実稼働リージョンで使用できますが、既定では無効になっています。 環境レベルで有効にするには、新規または既存の環境で Spark プロパティ spark.ms.autotune.enabled=true 設定します。 その環境を使用するすべてのノートブックとジョブは、設定を継承します。

自動チューニングを有効にするスクリーンショット。

自動チューニングには、組み込みの回帰検出が含まれています。 たとえば、クエリが異常に大量のデータを処理する場合、自動チューニングはその実行のチューニングを自動的にスキップできます。 多くのシナリオでは、自動チューニングでは、強力な設定に収束するために約 20 ~ 25 回のイテレーションが必要です。

Autotune は ランタイム 1.2 と互換性があります。 1.2 より後のランタイム バージョンでは有効にできません。 高コンカレンシー モードまたはプライベート エンドポイントが有効になっている場合は実行されません。 自動チューニングは、どの自動スケーリング構成においても自動スケーリングと共に機能します。

ノートブックまたは Spark ジョブ定義で Spark プロパティを設定することで、1 つのセッションに対して自動チューニングを有効にすることもできます。

1 つのセッションに対して自動チューニングを有効にする

%%sql
SET spark.ms.autotune.enabled=TRUE

1 つのセッションの自動チューニングを無効にする

ノートブックまたは Spark ジョブ定義で自動チューニングを無効にするには、最初のセルまたはコードの最初の行として次のいずれかのコマンドを実行します。

%%sql 
SET spark.ms.autotune.enabled=FALSE 

ケース スタディ

Apache Spark クエリを実行すると、自動チューニングによってそのクエリ図形のモデルが構築され、時間の経過に伴う最適な設定が学習されます。 たとえば、次のフィルター クエリから始めます。

%%pyspark
df.filter(df.country == "country-A")

自動チューニングは、この実行から学習します。 後でフィルター値のみを変更した場合、クエリの図形は次のようになります。

%%pyspark
df.filter(df.country == "country-B")

Autotune では、この同様のクエリ パターンに対して以前の学習を再利用できるため、手動による再チューニングを行わずにパフォーマンスを維持できます。

ログ

各クエリについて、autotune は、サポートされている 3 つの Spark 構成の推奨値を計算します。 推奨事項を調べるには、[ Autotune] で始まるエントリのドライバー ログを確認します。

監視ハブ内の自動チューニング ログのスクリーンショット。

一般的なログの状態は次のとおりです。

状態 説明
AUTOTUNE_DISABLED スキップされます。 自動チューニングが無効になっているため、テレメトリの収集と最適化は適用されません。
QUERY_TUNING_DISABLED スキップされます。 クエリのチューニングが無効になっています。
QUERY_PATTERN_NOT_MATCH スキップされます。 クエリ パターンは、サポートされている読み取り専用クエリの種類と一致しません。
QUERY_DURATION_TOO_SHORT スキップされます。 クエリが 15 秒未満で実行されました。これは、効果的なチューニングには短すぎます。
QUERY_TUNING_SUCCEED 成功しました。 クエリチューニングが完了し、最適化された Spark 設定が適用されました。

わかりやすさに関するメモ

このセクションでは、責任ある AI Standard に合わせて、自動チューニングの使用方法と検証方法について説明します。

自動チューニングの目的

Autotune は、データプロフェッショナル向けの Apache Spark ワークロード効率を向上させるために設計されています。 それ:

  • Apache Spark 構成を自動的に調整して、実行時間を短縮します。
  • 手動によるチューニング作業を減らします。
  • ワークロードの履歴データを使用して、構成の選択を繰り返し調整します。

自動チューニングの検証

Autotune では、有効性と安全性を確保するために広範な検証が行われます。

  • さまざまな Spark ワークロードにわたる厳格なテストを使用して、チューニング アルゴリズムの有効性を確認します。
  • パフォーマンス上の利点を示す標準的な Spark 最適化方法に対するベンチマーク。
  • 実用的な価値を示す実世界のケース スタディが含まれています。
  • 厳密なセキュリティとプライバシーの標準に従って、ユーザー データを保護します。

ユーザー データは、ワークロードのパフォーマンスを向上させるためにのみ使用され、機密情報の誤用や漏えいを防ぐための堅牢な保護を施されています。

  • Apache Spark for Microsoft Fabric
  • Microsoft Fabric