GKE またはセルフマネージド Kubernetes を構成する
ML Diagnostics プラットフォームは、Google Kubernetes Engine(GKE)またはセルフマネージド Kubernetes で実行される ML ワークロード用に構成できます。
ML 診断には、次の一般提供機能が含まれています。
- ワークロードの自動モニタリングとシステム指標の収集: GKE でワークロードの自動モニタリングとシステム指標の収集を行う場合、コードを計測したり、追加の構成を行ったりする必要はありません。ワークロード モニタリングとシステム指標の収集はデフォルトで有効になっているため、このガイドの手順を行う必要はありません。ワークロード モニタリングは、
JobSetとJobの GKE サービスの種類をサポートしており、GKE バージョン1.36.4-gke.1247000以降と互換性があります。 - ML Diagnostics SDK の指標とプログラムによるプロファイリング: ML Diagnostics SDK を使用して指標を収集し、プログラムによるプロファイリングを実行する場合は、
injection-webhookHelm チャートをインストールし、ワークロードにラベルを付け、ML Diagnostics SDK を使用します。GKE では、サポートされている GKE バージョンを使用している場合は、1 つの Google Cloud CLI コマンドを使用できます。または、手動インストールを実行することもできます。セルフマネージド Kubernetes では、Webhook を手動でインストールする必要があります。 - オンデマンド プロファイリング: オンデマンド プロファイリングを使用する場合は、
connection-operatorHelm チャートをインストールします。GKE では、サポートされている GKE バージョンを使用している場合は、1 つの gcloud CLI コマンドを使用できます。または、手動インストールを実行することもできます。セルフマネージド Kubernetes では、オペレーターを手動でインストールする必要があります。
ML 診断には、次のプレビュー機能も含まれています。
- Diagon DaemonSet プロファイリング: GKE ワークロードでオンデマンド プロファイリング、継続的なプロファイリング、ワークロード モニタリングからの自動プロファイル キャプチャを使用する場合は、GKE TPU クラスタに Diagon DaemonSet をデプロイします。この DaemonSet は、セルフマネージド Kubernetes クラスタでも動作します。このクラスタでは、オンデマンド プロファイリングと継続的なプロファイリングのみがサポートされています。セルフマネージド Kubernetes では、ワークロード モニタリングはサポートされていません。
Diagon DaemonSet をデプロイする
GKE またはセルフマネージド Kubernetes クラスタでコンテナ化されたワークロードを実行する場合は、Diagon デーモンを DaemonSet としてデプロイできます。これにより、デーモンのコピーがクラスタ内のすべての(または選択した)GPU ノードと TPU ノードで実行されます。
コンテナ イメージ リポジトリ
Diagon デーモンは Docker イメージとして公開されており、次の Artifact Registry パスから入手できます。
us-central1-docker.pkg.dev/hypercomputediagon-release/daemon-docker/mldiagnostics-daemon:latest
デプロイ手順を実行する
Diagon DaemonSet をクラスタにデプロイする手順は次のとおりです。
DaemonSet 構成を作成する: 次の YAML 構成を
diagon-daemonset.yamlとして保存します。この構成では、Diagon デーモンが特権モードで実行され、基盤となるホスト GPU デバイスと TPU デバイスから診断指標とプロファイリング指標を収集できます。# diagon-daemonset.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: diagon-daemon namespace: diagon labels: app.kubernetes.io/name: diagon-daemon app.kubernetes.io/part-of: diagon spec: selector: matchLabels: name: diagon-daemon template: metadata: labels: name: diagon-daemon spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet serviceAccountName: SERVICE_ACCOUNT_NAME terminationGracePeriodSeconds: 30 tolerations: - operator: Exists effect: NoSchedule - operator: Exists effect: NoExecute containers: - name: diagon-daemon image: us-central1-docker.pkg.dev/hypercomputediagon-release/daemon-docker/mldiagnostics-daemon:latest imagePullPolicy: Always command: - /mldiagnostics_extension_files/bin/mldiagnostics_extension - -standalone=true - -channel=hypercomputecluster.googleapis.com/diagnostics - -alsologtostderr=true securityContext: privileged: true resources: requests: cpu: 10m memory: 32Mi limits: memory: 256Mi # No CPU limit.DaemonSet をクラスタにデプロイする: 次のコマンドを実行して、アクティブな Kubernetes コンテキストにデーモンをデプロイします。
kubectl apply -f diagon-daemonset.yamlデプロイとデーモンの健全性を確認する: 管理ワークステーションまたは Cloud Shell で、すべてのデーモン Pod がワーカーノードにスケジュールされ、
Running状態に達していることを確認します。kubectl get pods -n diagon -l name=diagon-daemon -o wideストリーミング ログを調べて、 Google Cloud ML 診断コントロール プレーンへの接続とアクティブなハートビートを確認します。
kubectl logs -n diagon -l name=diagon-daemon --tail=50出力には、次の想定されるログ署名が含まれます。
Stream established. Received successful DaemonRegistrationResponse from backend Sending DaemonHeartbeatRequestDaemonSet イメージを更新する: 新しいバージョンのデーモンに更新するか、ロールバックするには、YAML ファイルのイメージタグを更新するか、次のコマンドを直接実行します。
kubectl set image daemonset/diagon-daemon diagon-daemon=us-docker.pkg.dev/hypercomputediagon-release/daemon/diagon-daemon:v2.1.0 --namespace=kube-systemデプロイまたは更新の進行状況を確認するには、ロールアウト ステータスを確認します。
kubectl rollout status daemonset/diagon-daemon --namespace=kube-system
オペレーターと Webhook を設定する
オペレーターと Webhook の設定には、次のオプションがあります。
1.35.0-gke.3065000より後のバージョンの GKE を使用している場合は、1 つの gcloud CLI コマンド、 Google Cloud コンソール、または Terraform を使用して、ML 診断用に GKE クラスタを設定できます。1.35.0-gke.3065000より前の GKE バージョンとセルフマネージド Kubernetes の場合は、cert-manager、injection-webhook、connection-operatorアーティファクトをインストールするようにクラスタを手動で構成する必要があります。詳細については、手動インストールをご覧ください。
Diagon DaemonSet とともに、GKE クラスタにオペレーターと Webhook をデプロイします。オペレーターと Webhook をすでにデプロイしている場合は、削除する必要はありません。代わりに、オペレーターはオンデマンド プロファイル キャプチャのフォールバック パスとして機能し、SDK を使用するには引き続き Webhook が必要です。
GKE ではなくセルフマネージド Kubernetes 環境を使用する場合は、SDK の Webhook をインストールし、Diagon DaemonSet をデプロイします。セルフマネージド Kubernetes 環境では、ワークロード モニタリングは機能しません。SDK 指標、プログラムによるプロファイリング、オンデマンド プロファイリング、継続的なプロファイリングのみがサポートされています。
1.35.0-gke.3065000 より後の GKE バージョンの場合は、次のいずれかの方法で、必要な ML 診断コンポーネント(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 診断用に GKE クラスタを設定する gcloud CLI コマンドの詳細については、次の API リファレンス ページの enable-managed-mldiagnostics フラグをご覧ください。
コンソール
新しい GKE クラスタの場合は、[Feature Manager] > [Managed Machine Learning Diagnostics] に移動します。
既存の GKE クラスタの場合は、[クラスタ] に移動し、クラスタの名前を選択して [編集] に移動し、[機能] の [マネージド機械学習診断] を編集します。
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 リソースを使用してクラスタでマネージド ML 診断を無効にするには、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 サブモジュールなど)を使用してクラスタでマネージド ML 診断を有効にするには、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 モジュールを使用してクラスタでマネージド ML 診断を無効にするには、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
GKE で Terraform を使用する方法については、GKE での Terraform のサポートをご覧ください。
手動インストール
1.35.0-gke.3065000 より前の GKE バージョンの場合は、GKE クラスタを手動で構成して、次のものをインストールする必要があります。
cert-manager:injection-webhookの前提条件。injection-webhook: 必要なメタデータを SDK に提供します。JobSet、RayJob、LeaderWorkerSetなどの一般的な ML Kubernetes ワークロードをサポートしています。connection-operator: GKE でのオンデマンド プロファイリング。connection-operatorとinjection-webhookを GKE クラスタにデプロイすると、オンデマンド キャプチャをトリガーしたときに、プロファイリング サーバーが実行されているターゲット Pod へのプロファイリング リクエストが初期化されます。
GKE クラスタの設定の詳細については、GKE クラスタを構成するをご覧ください。
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 Helm チャートは、メタデータを 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 Helm チャートを使用すると、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 のラベルを付けます。
ワークロードにラベルを付ける:
JobSet、LeaderWorkerSet、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 内のすべての
JobSet、LeaderWorkerSet、RayJobワークロードで Webhook が有効になります。kubectl create namespace ai-workloads kubectl label namespace ai-workloads managed-mldiagnostics-gke=true