ML 診断用に GKE を構成する

ML ワークロードに Google Kubernetes Engine(GKE)を使用している場合は、ML 診断プラットフォームを次の 2 つの方法で使用できます。

  1. ワークロードとシステム指標の自動モニタリングと収集: ワークロードとシステム指標の自動モニタリングと収集では、コードの計測や追加の構成を行う必要はありません。ワークロード モニタリングとシステム指標の収集はデフォルトで有効になっているため、このガイドの手順を行う必要はありません。ワークロード モニタリングは、jobsetjob の GKE ジョブタイプをサポートしており、GKE バージョン 1.36.0-gke.4681000 以降と互換性があります。
  2. ML Diagnostics SDK とオンデマンド プロファイリング: ML Diagnostics SDK を使用してオンデマンド プロファイリングを行う場合は、このガイドに沿って GKE クラスタを構成し、必要な GKE アーティファクトをインストールします。

ワークロードの構成は、オンデマンド プロファイリングを使用するか、プログラムによるプロファイリングを使用するかによって異なります。

  • オンデマンド プロファイリング: connection-operator をインストールする必要があります。
  • プログラマティック プロファイリング: injection-webhook のインストール、ワークロードのラベル付けML Diagnostics SDK の使用が必要です。

1.35.0-gke.3065000 より新しいバージョンの GKE を使用している場合は、単一の gcloud CLI コマンド、 Google Cloud コンソール、または Terraform を使用して、ML Diagnostics 用の GKE クラスタを設定できます。詳細については、gcloud CLI、 Google Cloud コンソール、Terraform を使用して設定するをご覧ください。

1.35.0-gke.3065000 より前の GKE バージョンの場合は、cert-managerinjection-webhookconnection-operator のアーティファクトをインストールするように GKE クラスタを手動で構成する必要があります。詳細については、手動インストールをご覧ください。

gcloud CLI、 Google Cloud コンソール、または Terraform で設定する

1.35.0-gke.3065000 より後の GKE バージョンの場合は、次のいずれかの方法を使用して、必要な ML Diagnostics コンポーネント(connection-operator と injection-webhook の両方)を GKE クラスタにデプロイします。

gcloud

新しい GKE クラスタの場合:

gcloud beta container clusters create CLUSTER_NAME --enable-managed-mldiagnostics

既存の GKE クラスタの場合:

gcloud beta container clusters update CLUSTER_NAME --enable-managed-mldiagnostics

ML 診断を無効にするには、次の操作を行います。

gcloud beta container clusters update CLUSTER_NAME --no-enable-managed-mldiagnostics

ML Diagnostics 用に GKE クラスタを設定する gcloud CLI コマンドの詳細については、次の API リファレンス ページの enable-managed-mldiagnostics フラグをご覧ください。

コンソール

  • 新しい GKE クラスタの場合は、[Feature Manager] > [Managed Machine Learning Diagnostics] に移動します。

    GKE Managed Machine Learning Diagnostics に移動

  • 既存の GKE クラスタの場合は、[クラスタ] に移動してクラスタの名前を選択し、[編集] に移動して、[機能] の [マネージド ML 診断] を編集します。

Terraform

Terraform を使用して GKE インフラストラクチャをプロビジョニングする場合は、terraform-provider-google-beta プロバイダ(バージョン v7.28.0 以降)または terraform-google-modules/kubernetes-engine/google モジュール(バージョン v45.0.0 以降)を使用できます。

Google Cloud Terraform プロバイダの使用

google_container_cluster リソースを使用して新しいクラスタでマネージド ML 診断を有効にするには、google-beta プロバイダ(バージョン v7.28.0 以降)を使用して enabled = true を含む managed_machine_learning_diagnostics_config ブロックを追加します。

terraform {
  required_providers {
    google-beta = {
      source  = "hashicorp/google-beta"
      version = ">= 7.28.0"
    }
  }
}

resource "google_container_cluster" "primary" {
  provider = google-beta
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other cluster configuration ...

  managed_machine_learning_diagnostics_config {
    enabled = true
  }
}

Terraform リソースを使用してクラスタで Managed ML Diagnostics を無効にするには、managed_machine_learning_diagnostics_config ブロックで enabled = false を設定します。

resource "google_container_cluster" "primary" {
  provider = google-beta
  name     = "CLUSTER_NAME"
  location = "LOCATION"

  # ... other cluster configuration ...

  managed_machine_learning_diagnostics_config {
    enabled = false
  }
}

GKE Terraform モジュールの使用

terraform-google-modules/kubernetes-engine/google モジュール(beta-public-cluster サブモジュールなど)を使用してクラスタで Managed ML Diagnostics を有効にするには、enable_managed_machine_learning_diagnostics = true を設定します。

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google//modules/beta-public-cluster"
  version = ">= 45.0"

  project_id = "PROJECT_ID"
  name       = "CLUSTER_NAME"
  region     = "LOCATION"

  # ... other cluster configuration ...

  enable_managed_machine_learning_diagnostics = true
}

Terraform モジュールを使用してクラスタで Managed ML Diagnostics を無効にするには、enable_managed_machine_learning_diagnostics = false を設定します。

module "gke" {
  source  = "terraform-google-modules/kubernetes-engine/google//modules/beta-public-cluster"
  version = ">= 45.0"

  # ... other cluster configuration ...

  enable_managed_machine_learning_diagnostics = false
}

構成を更新したら、変更を適用します。

terraform apply

次のように置き換えます。

  • PROJECT_ID: プロジェクトの名前。
  • CLUSTER_NAME: クラスタの名前。
  • LOCATION: リージョンまたはゾーン。

GKE で Terraform を使用する方法の詳細については、GKE での Terraform のサポートをご覧ください。

手動インストール

1.35.0-gke.3065000 より前の GKE バージョンの場合は、次のものをインストールするように GKE クラスタを手動で構成する必要があります。

  • cert-manager: injection-webhook の前提条件。
  • injection-webhook: SDK に必要なメタデータを提供します。JobSetRayJobLeaderWorkerSet などの一般的な ML Kubernetes ワークロードをサポートしています。
  • connection-operator: GKE でのオンデマンド プロファイリングの場合。connection-operatorinjection-webhook を GKE クラスタにデプロイすると、オンデマンド キャプチャをトリガーしたときに、プロファイリング サーバーが実行されているターゲット Pod へのプロファイリング リクエストが初期化されます。

Google Kubernetes Engine の設定の詳細については、Google Kubernetes Engine クラスタを構成するをご覧ください。

cert-manager

cert-manager はクラスタの証明書コントローラとして機能し、アプリケーションのセキュリティを確保し、証明書が意図せずに期限切れになることがないようにします。

Helm を使用して、次のものをインストールします。

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.13.0 \
  --set installCRDs=true \
  --set global.leaderElection.namespace=cert-manager \
  --timeout 10m

Injection-webhook

injection-webhook はメタデータを SDK に渡します。helm upgrade --install を使用して、初めてインストールするか、既存のインストールをアップグレードします。

helm upgrade --install mldiagnostics-injection-webhook \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.25.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-injection-webhook

Connection-operator

connection-operator は、GKE でオンデマンド プロファイリングを有効にします。次の表を使用して、正しい mldiagnostics-connection-operator バージョンを確認してください。

JAX バージョン Helm チャートのバージョン
0.8.x 0.24.0
0.9.x+ 0.24.0+

Helm を使用して必要なバージョンをインストールします。

JAX 0.8.x の場合:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator \
  --set 'mldiagnosticsConnectionOperator.controller.args={--metrics-bind-address=:8443,--health-probe-bind-address=:8081,--sidecar-timeout=65m,--disable-hostname-override}'

JAX 0.9.x 以降の場合:

helm upgrade --install mldiagnostics-connection-operator \
  --namespace=gke-mldiagnostics \
  --create-namespace \
  --version 0.24.0 \
  oci://us-docker.pkg.dev/ai-on-gke/mldiagnostics-webhook-and-operator-helm/mldiagnostics-connection-operator

ワークロードにラベルを付ける

プログラムによるプロファイリングでは、injection-webhook をトリガーして、メタデータを Pod に挿入する必要があります。ワークロードをデプロイする前に、ワークロードまたはその Namespace に managed-mldiagnostics-gke=true のラベルを付けます。

  • ワークロードにラベルを付けるJobsetLWS、または RayJob ワークロードにラベルを付けます。これにより、その特定のワークロードの Webhook が有効になります。JobSet ワークロードの例を次に示します。

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • Namespace にラベルを付けます。これにより、その Namespace 内のすべての JobsetLWSRayJob ワークロードで Webhook が有効になります。

    kubectl create namespace ai-workloads
    kubectl label namespace ai-workloads managed-mldiagnostics-gke=true