Configura GKE o Kubernetes autogestito

Puoi configurare la piattaforma di diagnostica ML per i workload ML in esecuzione su Google Kubernetes Engine (GKE) o Kubernetes autogestito.

ML Diagnostics include le seguenti funzionalità in disponibilità generale:

  • Monitoraggio automatico dei workload e raccolta automatica delle metriche di sistema: per il monitoraggio automatico dei workload e la raccolta automatica delle metriche di sistema su GKE, non è necessario instrumentare il codice o eseguire alcuna configurazione aggiuntiva. Il monitoraggio dei workload e la raccolta delle metriche di sistema sono abilitati per impostazione predefinita e non è necessario eseguire i passaggi descritti in questa guida. Il monitoraggio dei workload supporta i tipi di job GKE JobSet e Job ed è compatibile con GKE versione 1.36.4-gke.1247000 e successive.
  • Metriche dell'SDK ML Diagnostics e profilazione programmatica: se vuoi utilizzare l'SDK ML Diagnostics per raccogliere metriche ed eseguire la profilazione programmatica, installa il grafico Helm injection-webhook, etichetta il workload e utilizza l'SDK ML Diagnostics. Su GKE, puoi utilizzare un singolo comando di Google Cloud CLI se utilizzi una versione di GKE supportata o eseguire un'installazione manuale. Su Kubernetes autogestito, devi installare il webhook manualmente.
  • Profilazione on demand: se vuoi utilizzare la profilazione on demand, installa il grafico Helm connection-operator. Su GKE, puoi utilizzare un singolo comando gcloud CLI se utilizzi una versione di GKE supportata o eseguire un'installazione manuale. Su Kubernetes autogestito, devi installare l'operatore manualmente.

ML Diagnostics include anche la seguente funzionalità in anteprima:

  • Profilazione DaemonSet Diagon: se vuoi utilizzare la profilazione on demand, la profilazione continua e l'acquisizione automatica dei profili dal monitoraggio dei workload sul tuo workload GKE, esegui il deployment del DaemonSet Diagon sui tuoi cluster GKE TPU. Questo DaemonSet funziona anche su cluster Kubernetes autogestiti, dove sono supportate solo la profilazione on demand e continua. Il monitoraggio dei workload non è supportato su Kubernetes autogestito.

Esegui il deployment del DaemonSet Diagon

Se esegui workload containerizzati su GKE o su cluster Kubernetes autogestiti, puoi eseguire il deployment del daemon Diagon come DaemonSet. In questo modo, una copia del daemon viene eseguita su tutti i nodi GPU e TPU o su quelli selezionati all'interno del cluster.

Repository di immagini container

Il daemon Diagon viene pubblicato come immagine Docker ed è disponibile nel seguente percorso di Artifact Registry:

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

Passi per il deployment

Per eseguire il deployment del DaemonSet Diagon nel tuo cluster, completa i seguenti passaggi:

  1. Crea la configurazione del DaemonSet: salva la seguente configurazione YAML come diagon-daemonset.yaml. Questa configurazione esegue il daemon Diagon in modalità con privilegi in modo che possa raccogliere metriche di diagnostica e profilazione dai dispositivi GPU e TPU host sottostanti.

    # 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. Esegui il deployment del DaemonSet nel cluster: esegui questo comando per eseguire il deployment del daemon nel contesto Kubernetes attivo.

    kubectl apply -f diagon-daemonset.yaml
    
  3. Verifica l'integrità del deployment e del daemon: sulla tua workstation di amministrazione o in Cloud Shell, verifica che tutti i pod daemon siano pianificati tra i nodi worker e abbiano raggiunto lo stato Running:

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

    Esamina i log di streaming per verificare la connettività al control plane di Google Cloud ML Diagnostics e gli heartbeat attivi:

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

    L'output include le seguenti firme di log previste:

    Stream established.
    Received successful DaemonRegistrationResponse from backend
    Sending DaemonHeartbeatRequest
    
  4. Aggiorna l'immagine DaemonSet: per eseguire l'aggiornamento a una versione più recente del daemon o eseguire il rollback, aggiorna il tag dell'immagine nel file YAML o esegui direttamente il comando seguente.

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

    Per controllare l'avanzamento del deployment o dell'aggiornamento, verifica lo stato dell'implementazione:

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

Configura l'operatore e il webhook

Per la configurazione dell'operatore e del webhook, hai le seguenti opzioni:

  • Se utilizzi una versione di GKE successiva a 1.35.0-gke.3065000, puoi configurare il cluster GKE per ML Diagnostics con un singolo comando gcloud CLI, tramite la console Google Cloud o utilizzando Terraform.

  • Per le versioni di GKE precedenti alla 1.35.0-gke.3065000 e per Kubernetes autogestito, devi configurare manualmente il cluster per installare gli artefatti cert-manager, injection-webhook e connection-operator. Per saperne di più, consulta Installazione manuale.

Esegui il deployment dell'operatore e del webhook sul tuo cluster GKE, insieme al DaemonSet Diagon. Se hai già eseguito il deployment dell'operatore e del webhook, non è necessario eliminarli. Invece, l'operatore funge da percorso di riserva per l'acquisizione del profilo on demand e il webhook è comunque necessario per utilizzare l'SDK.

Se utilizzi un ambiente Kubernetes autogestito anziché GKE, installa il webhook per l'SDK ed esegui il deployment del DaemonSet Diagon. In un ambiente Kubernetes autogestito, il monitoraggio dei workload non funziona; sono supportate solo le metriche dell'SDK, la profilazione programmatica, la profilazione on demand e la profilazione continua.

Per le versioni di GKE successive alla 1.35.0-gke.3065000, utilizza uno dei seguenti metodi per eseguire il deployment dei componenti di diagnostica ML richiesti (sia connection-operator che injection-webhook) nel tuo cluster GKE.

gcloud

Per i nuovi cluster GKE:

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

Per i cluster GKE esistenti:

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

Per disattivare ML Diagnostics, utilizza quanto segue:

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

Per saperne di più sui comandi gcloud CLI per configurare un cluster GKE per la diagnostica ML, consulta il flag enable-managed-mldiagnostics nelle seguenti pagine di riferimento API:

Console

  • Per i nuovi cluster GKE, vai a Gestore funzionalità > Diagnostica di machine learning gestito.

    Vai a Diagnostica di machine learning gestito di GKE

  • Per i cluster GKE esistenti, vai a Cluster, seleziona il nome del tuo cluster, vai a Modifica e modifica Diagnostica di machine learning gestito in Funzionalità.

Terraform

Se utilizzi Terraform per eseguire il provisioning dell'infrastruttura GKE, puoi utilizzare il provider terraform-provider-google-beta (versione v7.28.0 o successive) o il modulo terraform-google-modules/kubernetes-engine/google (versione v45.0.0 o successive).

Utilizzo del provider Terraform Google Cloud

Per abilitare la diagnostica ML gestita su un nuovo cluster utilizzando la risorsa google_container_cluster, aggiungi il blocco managed_machine_learning_diagnostics_config con enabled = true utilizzando il provider google-beta (versione v7.28.0 o successive):

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

Per disattivare Managed ML Diagnostics su un cluster utilizzando la risorsa Terraform, imposta enabled = false nel blocco managed_machine_learning_diagnostics_config:

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

  # ... other cluster configuration ...

  managed_machine_learning_diagnostics_config {
    enabled = false
  }
}

Utilizzo del modulo Terraform di GKE

Per attivare Managed ML Diagnostics su un cluster utilizzando il modulo terraform-google-modules/kubernetes-engine/google (ad esempio il sottomodulo beta-public-cluster), imposta 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
}

Per disattivare Managed ML Diagnostics su un cluster utilizzando il modulo Terraform, imposta 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
}

Dopo aver aggiornato la configurazione, applica le modifiche:

terraform apply

Per scoprire di più sull'utilizzo di Terraform con GKE, consulta Supporto di Terraform per GKE.

Installazione manuale

Per le versioni di GKE precedenti alla 1.35.0-gke.3065000, devi configurare manualmente il cluster GKE per installare quanto segue:

  • cert-manager: un prerequisito per injection-webhook.
  • injection-webhook: fornisce all'SDK i metadati richiesti. Supporta i workload Kubernetes ML comuni, come JobSet, RayJob e LeaderWorkerSet.
  • connection-operator: per la profilazione on demand su GKE. Il deployment di connection-operator insieme a injection-webhook nel cluster GKE inizializza le richieste di profilazione ai pod di destinazione con i server di profilazione in esecuzione quando attivi l'acquisizione on demand.

Per saperne di più sulla configurazione di un cluster GKE, consulta Configura il cluster GKE.

Cert-manager

Il componente aggiuntivo cert-manager funge da controller dei certificati per il tuo cluster, garantendo che le tue applicazioni siano sicure e che i tuoi certificati non scadano mai involontariamente.

Utilizza Helm per installare quanto segue:

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

Webhook di inserimento

Il grafico Helm injection-webhook trasmette i metadati all'SDK. Utilizza helm upgrade --install per eseguire la prima installazione o l'upgrade di un'installazione esistente.

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

Operatore di connessione

Il grafico Helm connection-operator consente la profilazione on demand su GKE. Utilizza la tabella seguente per trovare la versione corretta di mldiagnostics-connection-operator:

Versione JAX Versione del grafico Helm
0.8.x 0.24.0
0.9.x+ 0.24.0+

Utilizza Helm per installare la versione richiesta.

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

Per 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

Etichetta il workload

Per la profilazione programmatica, devi attivare injection-webhook per inserire i metadati nei pod. Etichetta il workload o il relativo spazio dei nomi con managed-mldiagnostics-gke=true prima di eseguire il deployment del workload:

  • Etichetta un workload: etichetta un workload JobSet, LeaderWorkerSet o RayJob, che attiva il webhook per quel workload specifico. Di seguito è riportato un esempio per un workload JobSet:

    apiVersion: jobset.x-k8s.io/v1alpha2
    kind: JobSet
    metadata:
      name: single-host-tpu-v3-jobset2
      namespace: default
      labels:
        managed-mldiagnostics-gke: "true"
    
  • Etichetta uno spazio dei nomi: in questo modo, il webhook viene abilitato per tutti i workload JobSet, LeaderWorkerSet e RayJob all'interno dello spazio dei nomi.

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