為 ML 診斷設定 GKE

如果您使用 Google Kubernetes Engine (GKE) 執行機器學習工作負載,可以透過下列兩種方式使用 ML Diagnostics 平台:

  1. 自動監控工作負載及收集系統指標:如要自動監控工作負載及收集系統指標,您不需要檢測程式碼或進行任何額外設定。系統預設會啟用工作負載監控和系統指標收集功能,因此您不需要執行本指南中的步驟。工作負載監控功能支援 jobsetjob GKE 工作類型,且與 GKE 1.36.0-gke.4681000 以上版本相容。
  2. ML Diagnostics SDK 和隨選剖析:如要使用 ML Diagnostics SDK 並執行隨選剖析,請按照本指南設定 GKE 叢集,並安裝必要的 GKE 構件。

工作負載的設定取決於您使用隨選剖析還是程式輔助剖析

如果您使用的 GKE 版本高於 1.35.0-gke.3065000,可以透過單一 gcloud CLI 指令、 Google Cloud 控制台或 Terraform,為 ML Diagnostics 設定 GKE 叢集。詳情請參閱「使用 gcloud CLI、 Google Cloud 控制台或 Terraform 設定」。

如果是 1.35.0-gke.3065000 之前的 GKE 版本,您需要手動設定 GKE 叢集,才能安裝 cert-managerinjection-webhookconnection-operator 構件。詳情請參閱「手動安裝」。

使用 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

如要停用機器學習診斷,請使用下列指令:

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

如要進一步瞭解如何使用 gcloud CLI 指令設定 GKE 叢集以進行機器學習診斷,請參閱下列 API 參考資料頁面中的 enable-managed-mldiagnostics 旗標:

控制台

  • 如果是新的 GKE 叢集,請依序前往「功能管理工具」>「代管機器學習診斷」

    前往 GKE 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 以上) 新增 managed_machine_learning_diagnostics_config 區塊,並使用 enabled = true

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:區域或可用區。

如要進一步瞭解如何搭配使用 Terraform 與 GKE,請參閱「Terraform 支援 GKE」。

手動安裝

如果是 1.35.0-gke.3065000 之前的 GKE 版本,您需要手動設定 GKE 叢集,才能安裝下列項目:

  • cert-managerinjection-webhook 的必要條件。
  • injection-webhook:為 SDK 提供必要的中繼資料。支援常見的 ML Kubernetes 工作負載,例如 JobSetRayJobLeaderWorkerSet
  • 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。部署工作負載前,請使用 managed-mldiagnostics-gke=true 為工作負載或其命名空間加上標籤:

  • 為工作負載加上標籤。為 JobsetLWSRayJob 工作負載加上標籤,即可為該特定工作負載啟用 Webhook。以下是 JobSet 工作負載的範例:

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • 為命名空間加上標籤。這會為該命名空間內的所有 JobsetLWSRayJob 工作負載啟用 Webhook。

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