GKE oder selbstverwaltetes Kubernetes konfigurieren

Sie können die ML-Diagnoseplattform für ML-Arbeitslasten konfigurieren, die in der Google Kubernetes Engine (GKE) oder in selbstverwaltetem Kubernetes ausgeführt werden.

ML Diagnostics umfasst die folgenden allgemein verfügbaren Funktionen:

  • Automatisches Arbeitslastmonitoring und Erfassung von Systemmesswerten: Für das automatische Arbeitslastmonitoring und die Erfassung von Systemmesswerten in GKE müssen Sie Ihren Code nicht instrumentieren oder zusätzliche Konfigurationen vornehmen. Das Arbeitslastmonitoring und die Erfassung von Systemmesswerten sind standardmäßig aktiviert. Sie müssen die Schritte in dieser Anleitung nicht ausführen. Das Monitoring von Arbeitslasten unterstützt die GKE-Jobtypen JobSet und Job und ist mit GKE-Versionen ab 1.36.4-gke.1247000 kompatibel.
  • ML Diagnostics SDK-Messwerte und programmatisches Profiling: Wenn Sie das ML Diagnostics SDK verwenden möchten, um Messwerte zu erfassen und programmatisches Profiling auszuführen, installieren Sie das Helm-Diagramm injection-webhook, kennzeichnen Sie die Arbeitslast und verwenden Sie das ML Diagnostics SDK. In GKE können Sie einen einzelnen Google Cloud CLI-Befehl verwenden, wenn Sie eine unterstützte GKE-Version verwenden, oder eine manuelle Installation durchführen. In selbstverwaltetem Kubernetes müssen Sie den Webhook manuell installieren.
  • On-Demand-Profilerstellung: Wenn Sie die On-Demand-Profilerstellung verwenden möchten, installieren Sie das Helm-Diagramm connection-operator. In GKE können Sie einen einzelnen gcloud CLI-Befehl verwenden, wenn Sie eine unterstützte GKE-Version verwenden, oder eine manuelle Installation durchführen. In selbstverwaltetem Kubernetes müssen Sie den Operator manuell installieren.

ML Diagnostics enthält auch die folgende Funktion in der Vorabversion:

  • Diagon-DaemonSet-Profiling: Wenn Sie On-Demand-Profiling, kontinuierliches Profiling und automatische Profilerfassung aus dem Arbeitslastmonitoring für Ihre GKE-Arbeitslast verwenden möchten, stellen Sie das Diagon-DaemonSet auf Ihren GKE-TPU-Clustern bereit. Dieses DaemonSet funktioniert auch auf selbstverwalteten Kubernetes-Clustern, auf denen nur On-Demand- und kontinuierliches Profiling unterstützt werden. Das Monitoring von Arbeitslasten wird in selbstverwaltetem Kubernetes nicht unterstützt.

Diagon-DaemonSet bereitstellen

Wenn Sie containerisierte Arbeitslasten in GKE oder selbstverwalteten Kubernetes-Clustern ausführen, können Sie den Diagon-Daemon als DaemonSet bereitstellen. Dadurch wird sichergestellt, dass eine Kopie des Daemons auf allen oder ausgewählten GPU- und TPU-Knoten im Cluster ausgeführt wird.

Container-Image-Repository

Der Diagon-Daemon wird als Docker-Image veröffentlicht und ist unter dem folgenden Artifact Registry-Pfad verfügbar:

us-central1-docker.pkg.dev/hypercomputediagon-release/daemon-docker/mldiagnostics-daemon:latest

Deployment

Führen Sie die folgenden Schritte aus, um das Diagon-DaemonSet in Ihrem Cluster bereitzustellen:

  1. DaemonSet-Konfiguration erstellen: Speichern Sie die folgende YAML-Konfiguration als diagon-daemonset.yaml. Bei dieser Konfiguration wird der Diagon-Daemon im privilegierten Modus ausgeführt, damit er Diagnose- und Profiling-Messwerte von den zugrunde liegenden Host-GPU- und TPU-Geräten erfassen kann.

    # 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.
    
  2. DaemonSet im Cluster bereitstellen: Führen Sie den folgenden Befehl aus, um den Daemon in Ihrem aktiven Kubernetes-Kontext bereitzustellen.

    kubectl apply -f diagon-daemonset.yaml
    
  3. Bereitstellungs- und Daemon-Zustand prüfen: Prüfen Sie auf Ihrer Administratorworkstation oder in Cloud Shell, ob alle Daemon-Pods auf Worker-Knoten geplant sind und den Status Running erreicht haben:

    kubectl get pods -n diagon -l name=diagon-daemon -o wide
    

    Prüfen Sie die Streaminglogs, um die Verbindung zur Steuerungsebene von Google Cloud ML Diagnostics und aktive Heartbeats zu bestätigen:

    kubectl logs -n diagon -l name=diagon-daemon --tail=50
    

    Die Ausgabe enthält die folgenden erwarteten Logsignaturen:

    Stream established.
    Received successful DaemonRegistrationResponse from backend
    Sending DaemonHeartbeatRequest
    
  4. DaemonSet-Image aktualisieren: Wenn Sie auf eine neuere Version des Daemons aktualisieren oder ein Rollback durchführen möchten, aktualisieren Sie das Image-Tag in Ihrer YAML-Datei oder führen Sie den folgenden Befehl direkt aus.

    kubectl set image daemonset/diagon-daemon diagon-daemon=us-docker.pkg.dev/hypercomputediagon-release/daemon/diagon-daemon:v2.1.0 --namespace=kube-system
    

    Prüfen Sie den Roll-out-Status, um den Fortschritt der Bereitstellung oder Aktualisierung zu verfolgen:

    kubectl rollout status daemonset/diagon-daemon --namespace=kube-system
    

Operator und Webhook einrichten

Für die Einrichtung des Operators und des Webhooks haben Sie die folgenden Optionen:

  • Wenn Sie eine GKE-Version verwenden, die höher als 1.35.0-gke.3065000 ist, können Sie Ihren GKE-Cluster für ML Diagnostics mit einem einzigen gcloud CLI-Befehl, über die Google Cloud Console oder mit Terraform einrichten.

  • Bei GKE-Versionen vor 1.35.0-gke.3065000 und selbstverwaltetem Kubernetes müssen Sie den Cluster manuell konfigurieren, um die Artefakte cert-manager, injection-webhook und connection-operator zu installieren. Weitere Informationen finden Sie unter Manuelle Installation.

Stellen Sie den Operator und den Webhook zusammen mit dem Diagon-DaemonSet in Ihrem GKE-Cluster bereit. Wenn Sie den Operator und den Webhook bereits bereitgestellt haben, müssen Sie sie nicht löschen. Stattdessen dient der Operator als Fallback-Pfad für die On-Demand-Profilerfassung und der Webhook ist weiterhin erforderlich, um das SDK zu verwenden.

Wenn Sie anstelle von GKE eine selbstverwaltete Kubernetes-Umgebung verwenden, installieren Sie den Webhook für das SDK und stellen Sie das Diagon-DaemonSet bereit. In einer selbstverwalteten Kubernetes-Umgebung funktioniert das Monitoring von Arbeitslasten nicht. Es werden nur SDK-Messwerte, programmatisches Profiling, On-Demand-Profiling und kontinuierliches Profiling unterstützt.

Verwenden Sie für GKE-Versionen nach 1.35.0-gke.3065000 eine der folgenden Methoden, um die erforderlichen ML-Diagnosekomponenten (connection-operator und injection-webhook) in Ihrem GKE-Cluster bereitzustellen.

gcloud

Für neue GKE-Cluster:

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

Für vorhandene GKE-Cluster:

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

So deaktivieren Sie ML-Diagnose:

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

Weitere Informationen zu gcloud CLI-Befehlen zum Einrichten eines GKE-Cluster für ML-Diagnose finden Sie unter dem Flag enable-managed-mldiagnostics auf den folgenden API-Referenzseiten:

Console

  • Rufen Sie für neue GKE-Cluster Feature Manager > Verwaltete Diagnose für maschinelles Lernen auf.

    Zu „GKE Managed Machine Learning Diagnostics“

  • Rufen Sie für vorhandene GKE-Cluster Cluster auf, wählen Sie den Namen Ihres Clusters aus, rufen Sie Bearbeiten auf und bearbeiten Sie Verwaltete Machine Learning-Diagnose unter Features.

Terraform

Wenn Sie Terraform für die Bereitstellung Ihrer GKE-Infrastruktur verwenden, können Sie den Anbieter terraform-provider-google-beta (Version v7.28.0 oder höher) oder das Modul terraform-google-modules/kubernetes-engine/google (Version v45.0.0 oder höher) verwenden.

Google Cloud -Terraform-Anbieter verwenden

Wenn Sie die verwaltete ML-Diagnose für einen neuen Cluster mit der Ressource google_container_cluster aktivieren möchten, fügen Sie den Block managed_machine_learning_diagnostics_config mit enabled = true hinzu und verwenden Sie den Anbieter google-beta (Version v7.28.0 oder höher):

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
  }
}

Wenn Sie die verwaltete ML-Diagnose auf einem Cluster mit der Terraform-Ressource deaktivieren möchten, legen Sie enabled = false im Block managed_machine_learning_diagnostics_config fest:

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-Modul verwenden

Wenn Sie Managed ML Diagnostics in einem Cluster mit dem Modul terraform-google-modules/kubernetes-engine/google (z. B. dem Submodul beta-public-cluster) aktivieren möchten, legen Sie enable_managed_machine_learning_diagnostics = true fest:

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
}

Wenn Sie Managed ML Diagnostics auf einem Cluster mit dem Terraform-Modul deaktivieren möchten, legen Sie enable_managed_machine_learning_diagnostics = false fest:

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
}

Wenden Sie die Änderungen an, nachdem Sie die Konfiguration aktualisiert haben:

terraform apply

Weitere Informationen zur Verwendung von Terraform mit GKE finden Sie unter Terraform-Unterstützung für GKE.

Manuelle Installation

Bei GKE-Versionen vor 1.35.0-gke.3065000 müssen Sie den GKE-Cluster manuell konfigurieren, um Folgendes zu installieren:

  • cert-manager: Eine Voraussetzung für injection-webhook.
  • injection-webhook: Stellt dem SDK die erforderlichen Metadaten zur Verfügung. Es unterstützt gängige ML-Kubernetes-Arbeitslasten wie JobSet, RayJob und LeaderWorkerSet.
  • connection-operator: Für On-Demand-Profiling in GKE. Wenn Sie connection-operator zusammen mit injection-webhook im GKE-Cluster bereitstellen, werden Profilerstellungsanfragen an Ziel-Pods mit ausgeführten Profilerstellungsservern initialisiert, wenn Sie die On-Demand-Erfassung auslösen.

Weitere Informationen zum Einrichten eines GKE-Clusters finden Sie unter GKE-Cluster konfigurieren.

Cert-manager

Das cert-manager-Add-on fungiert als Zertifikatscontroller für Ihren Cluster und sorgt dafür, dass Ihre Anwendungen sicher sind und Ihre Zertifikate nicht unbeabsichtigt ablaufen.

Installieren Sie Folgendes mit 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

Das Helm-Diagramm injection-webhook übergibt Metadaten an das SDK. Verwenden Sie helm upgrade --install, um eine Erstinstallation durchzuführen oder eine vorhandene Installation zu aktualisieren.

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

Das Helm-Diagramm connection-operator ermöglicht On-Demand-Profiling in GKE. Suchen Sie in der folgenden Tabelle nach der richtigen mldiagnostics-connection-operator-Version:

JAX-Version Helm-Diagrammversion
0.8.x 0.24.0
0.9.x+ 0.24.0+

Verwenden Sie Helm, um die erforderliche Version zu installieren.

Für 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}'

Für 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

Arbeitslast mit Label versehen

Für die programmatische Profilerstellung müssen Sie den injection-webhook auslösen, um Metadaten in Pods einzufügen. Versehen Sie entweder die Arbeitslast oder ihren Namespace mit dem Label managed-mldiagnostics-gke=true, bevor Sie die Arbeitslast bereitstellen:

  • Arbeitslast mit Label versehen: Versehen Sie eine JobSet-, LeaderWorkerSet- oder RayJob-Arbeitslast mit einem Label, um den Webhook für diese bestimmte Arbeitslast zu aktivieren. Im Folgenden finden Sie ein Beispiel für eine JobSet-Arbeitslast:

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • Namespace mit Label versehen: Dadurch wird der Webhook für alle JobSet-, LeaderWorkerSet- und RayJob-Arbeitslasten in diesem Namespace aktiviert.

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