Esegui il deployment di Ray con accelerazione GPU per i carichi di lavoro AI su GKE


Questa pagina mostra come configurare ed eseguire un cluster Ray abilitato per GPU su Google Kubernetes Engine (GKE) per scalare i carichi di lavoro di AI/ML.

Perché utilizzare Ray?

L'utilizzo di Ray su GKE, facilitato da KubeRay, consente di scalare le applicazioni Python e AI. Ray gestisce lo scaling dell'applicazione e GKE gestisce i server e le risorse sottostanti.

Questa combinazione semplifica la gestione delle risorse, la regolazione automatica della capacità, garantisce l'affidabilità e consente di eseguire il deployment delle applicazioni in vari ambienti. Se colleghi le tue applicazioni Ray distribuite all'infrastruttura e agli strumenti cloud esistenti su GKE, puoi semplificare le operazioni e fornire una piattaforma solida e scalabile per attività complesse utilizzando i metodi Kubernetes standard.

Per maggiori informazioni, consulta il post del blog Why GKE for your Ray AI workloads.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the GKE API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. Installa kubectl: kubectl è lo strumento a riga di comando principale per interagire con i cluster GKE. Se utilizzi Cloud Shell, kubectl è già installato. In caso contrario, installalo nel terminale eseguendo il comando gcloud components install kubectl.

    Per verificare l'installazione, esegui questo comando: kubectl version --client

  8. Installa Ray: ti consigliamo vivamente di creare e inserire un ambiente virtuale Python (venv) prima di installare Ray in modo da isolare le sue dipendenze.
    1. Installa Python.
    2. Crea e attiva un nuovo ambiente virtuale.
    3. Installa l'ultima versione stabile di Ray eseguendo questo comando all'interno del tuo ambiente virtuale: pip install -U "ray[default]".
    4. Per verificare l'installazione, esegui questo comando: ray --version. Prendi nota della versione di Ray (ad esempio, 2.44.1) nell'output.
  9. Assicurati che il tuo progetto Google Cloud disponga di una quota sufficiente per le GPU L4. Per ulteriori informazioni, consulta Informazioni sulle GPU e Quote di allocazione.

Crea un cluster GKE

Puoi eseguire il deployment del carico di lavoro in un cluster GKE Autopilot o Standard. Ti consigliamo di utilizzare un cluster Autopilot per un'esperienza Kubernetes completamente gestita. Per scegliere la modalità operativa GKE più adatta ai tuoi workload, consulta Scegliere una modalità operativa GKE.

Autopilot

In modalità Autopilot, Google gestisce la configurazione del cluster, inclusi scalabilità, sicurezza e altre impostazioni preconfigurate. I cluster Autopilot sono ottimizzati per eseguire la maggior parte dei carichi di lavoro di produzione e per il provisioning delle risorse di calcolo in base ai manifest Kubernetes.

  1. Nel terminale, esegui il seguente comando gcloud container clusters create-auto:

    gcloud container clusters create-auto my-ray-enabled-cluster \
        --enable-ray-operator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --location=us-central1
    

    Questo comando Google Cloud CLI crea un cluster Autopilot denominato my-ray-enabled-cluster con le seguenti impostazioni:

    • --enable-ray-operator: installa l'operatore Ray sul cluster, il che semplifica la gestione dei cluster Ray in Kubernetes.
    • --enable-ray-cluster-monitoring: configura l'integrazione con Cloud Monitoring per le metriche del cluster Ray.
    • --enable-ray-cluster-logging: configura l'integrazione con Cloud Logging per raccogliere i log dal cluster Ray.
    • --location=us-central1: specifica la regione geografica in cui verrà creato il cluster GKE. Tieni presente che la disponibilità e i tipi supportati di acceleratore variano in base alla località. Per saperne di più, consulta Regioni e zone GPU.

    I cluster Autopilot eseguono automaticamente il provisioning e la scalabilità dei nodi (inclusi quelli abilitati alla GPU che utilizzano le classi di calcolo) in base alle richieste dei carichi di lavoro, ottimizzando l'utilizzo e il costo. Il provisioning e lo scaling automatici delle risorse nei cluster Autopilot semplificano la gestione delle risorse e ti consentono di concentrarti sui modelli anziché sull'infrastruttura.

    Se utilizzi un cluster GKE Standard, i flag e le impostazioni per l'attivazione di Ray potrebbero essere diversi. Per maggiori informazioni, consulta Abilitare l'operatore Ray su GKE.

  2. Configura kubectl per comunicare con il cluster:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Standard

In modalità Standard, hai un maggiore controllo sull'infrastruttura di base del tuo cluster GKE. Gestisci direttamente i pool di nodi, le dimensioni dei nodi e altre configurazioni, consentendo una maggiore personalizzazione. I cluster standard sono adatti per i carichi di lavoro che richiedono configurazioni specifiche o un controllo rigoroso delle risorse.

  1. Nel terminale, esegui il seguente comando gcloud container clusters create:

    gcloud container clusters create my-ray-enabled-cluster \
        --addons=RayOperator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --region=us-central1 \
        --enable-autoprovisioning \
        --max-cpu=10 \
        --max-memory=64
    

    Questo comando Google Cloud CLI crea un cluster Standard denominato my-ray-enabled-cluster, con queste impostazioni:

    • --addons=RayOperator: installa l'operatore Ray sul cluster, il che semplifica la gestione dei cluster Ray in Kubernetes.
    • --enable-ray-cluster-monitoring: configura l'integrazione con Cloud Monitoring per le metriche del cluster Ray.
    • --enable-ray-cluster-logging: configura l'integrazione con Cloud Logging per raccogliere i log dal cluster Ray.
    • --region=us-central1: specifica la regione geografica in cui verrà creato il cluster GKE. Tieni presente che la disponibilità e i tipi supportati di acceleratore variano in base alla località. Per saperne di più, consulta Regioni e zone GPU.
    • --enable-autoprovisioning: crea ed elimina automaticamente i node pool e ridimensiona i nodi all'interno di questi pool in base alle esigenze del tuo workload.
    • --max-cpu: il numero massimo di core a cui può essere scalato il cluster.
    • --max-memory: il numero massimo di gigabyte di memoria a cui il cluster può scalare.
  2. Configura kubectl per comunicare con il cluster:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Installa il plug-in KubeRay kubectl ray

Il plug-in kubectl ray semplifica i workflow comuni di Ray su Kubernetes. Per le istruzioni di installazione più recenti, consulta la documentazione di KubeRay.

  1. Vai alla pagina delle release e scarica il file binario per la tua piattaforma. Ad esempio, per installare la versione 1.3.2 del plug-in kubectl ray su Linux amd64, esegui questi comandi:

    curl -LO https://github.com/ray-project/kuberay/releases/download/v1.3.2/kubectl-ray_v1.3.2_linux_amd64.tar.gz
    tar -xvf kubectl-ray_v1.3.2_linux_amd64.tar.gz
    cp kubectl-ray ~/.local/bin
    

    Sostituisci ~/.local/bin con la directory in PATH.

  2. Verifica l'installazione:

    kubectl ray version
    

    Se vedi un avviso come KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace., puoi ignorarlo tranquillamente. Se l'installazione è riuscita, l'output è la versione del plug-in kubectl ray.

Crea la classe di calcolo personalizzata nel cluster

Una classe di calcolo personalizzata in GKE ti consente di definire requisiti hardware specifici, come il tipo e il numero di GPU, in base alla priorità. GKE utilizza questa priorità quando esegue il provisioning dei nodi per i tuoi carichi di lavoro.

Per creare la classe di calcolo personalizzata di esempio per questa guida:

  1. Salva la seguente specifica della classe di computing come nvidia-l4-compute-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: gpu-compute-class
    spec:
      priorities:
      - gpu:
          type: nvidia-l4
          count: 1
        spot: true
      - gpu:
          type: nvidia-l4
          count: 1
        spot: false
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    
  2. Crea la classe di calcolo eseguendo questo comando:

    kubectl apply -f nvidia-l4-compute-class.yaml
    

    Che cosa succede dopo aver applicato la classe di calcolo personalizzata? Dopo aver applicato il file YAML della classe di calcolo, GKE eseguirà automaticamente il provisioning dei nodi con una GPU NVIDIA L4 quando il cluster Ray li richiede. Dà la priorità alle VM spot come definito nel manifest. L'impostazione whenUnsatisfiable: DoNotScaleUp indica a GKE di non creare nodi che non soddisfano i requisiti specificati.

Crea e verifica il cluster Ray

Ora puoi creare il tuo cluster Ray sul tuo cluster GKE.

  1. Crea il cluster Ray. Utilizza il comando kubectl ray create cluster per definire e creare il cluster Ray. Questo comando semplifica il processo gestendo la creazione delle risorse Kubernetes sottostanti.

      kubectl ray create cluster my-ray-cluster \
          --worker-replicas=1 \
          --worker-cpu=2 \
          --worker-memory=4Gi \
          --worker-gpu=1 \
          --worker-node-selectors="cloud.google.com/compute-class=gpu-compute-class"
    

    Il comando kubectl ray create cluster utilizza il plug-in KubeRay per tradurre le specifiche in una definizione di risorsa personalizzata RayCluster e la invia all'API Kubernetes per creare l'oggetto RayCluster. Questo oggetto funge da blueprint, indicando all'operatore Ray come eseguire il provisioning e gestire i componenti effettivi del cluster Ray (nodi head e worker) in GKE. Per impostazione predefinita, GKE pianifica il pod head su un nodo della serie di macchine E2.

    Il comando di esempio utilizza queste impostazioni:

    • kubectl ray create cluster my-ray-cluster: specifica il nome del cluster Ray che vuoi creare.
    • --worker-node-selectors: indica a Kubernetes di pianificare i pod worker sui nodi etichettati con cloud.google.com/compute-class=gpu-compute-class.
  2. Verifica lo stato del cluster Ray. Utilizza questi comandi per verificare che il cluster Ray sia in esecuzione.

    • Controlla la risorsa RayCluster eseguendo questo comando:

      kubectl ray get cluster
      

      Questo comando elenca tutti i cluster Ray nello spazio dei nomi Kubernetes. Dovresti vedere my-ray-cluster nell'elenco. L'inizializzazione del cluster potrebbe richiedere alcuni minuti.

    • Controlla i pod Kubernetes eseguendo questo comando:

      kubectl get pods
      

      Questo comando elenca tutti i pod in esecuzione nello spazio dei nomi Kubernetes. Dovresti vedere i pod correlati al tuo cluster Ray:

      • Un pod per il nodo head di Ray, con un nome come my-ray-cluster-head-0.
      • Uno o più pod per i nodi worker Ray, con nomi come my-ray-cluster-worker-group-0-xxxxx. Il numero di pod worker dipende dalla configurazione iniziale del cluster Ray e da qualsiasi scalabilità automatica che potrebbe essersi verificata.

Invia un job Ray

Una volta pronto il cluster Ray, puoi inviare un job Ray al cluster Ray in esecuzione su GKE.

Per farlo, utilizza il comando kubectl ray session per avviare una sessione interattiva e il comando ray job submit per avviare l'esecuzione del job.

  1. Avvia una sessione interattiva di Ray. Per stabilire una connessione locale al cluster Ray, esegui questo comando:

      kubectl ray session my-ray-cluster
    

    Questo comando avvia il port forwarding tra la tua macchina locale e il nodo head Ray nel tuo cluster GKE. Tieni presente che il terminale sarà occupato mentre questa sessione è attiva; per procedere, apri un'istanza del terminale separata.

  2. Crea il codice campione da eseguire. Salva il seguente codice di esempio in un file denominato sample_code.py.

      import ray
      import os
      import requests
    
      ray.init()
    
      @ray.remote
      class Counter:
          def __init__(self):
              # Used to verify runtimeEnv
              self.name = os.getenv("counter_name")
              assert self.name == "test_counter"
              self.counter = 0
    
          def inc(self):
              self.counter += 1
    
          def get_counter(self):
              return "{} got {}".format(self.name, self.counter)
    
      counter = Counter.remote()
    
      for _ in range(5):
              ray.get(counter.inc.remote())
              print(ray.get(counter.get_counter.remote()))
    
      # Verify that the correct runtime env was used for the job.
      assert requests.__version__ == "2.26.0"
    
  3. Apri un nuovo terminale e invia il job Ray.

    1. Apri un nuovo terminale sulla tua macchina locale. Se hai creato un ambiente virtuale per l'installazione di Ray, assicurati di attivarlo anche in questo nuovo terminale.
    2. Vai alla directory in cui hai salvato il file sample_code.py.
    3. Esegui questo comando:

        ray job submit \
            --working-dir=. \
            --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' \
            --address http://localhost:8265 python sample_code.py
      

      Il comando di esempio utilizza queste impostazioni:

      • --working-dir=.: specifica la directory corrente come directory di lavoro da rendere disponibile al job Ray sul cluster. Idealmente, questa directory contiene solo il codice sorgente dell'applicazione che vuoi eseguire su Ray. Nel nostro esempio, si tratta del file sample_code.py.
      • --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}': definisce l'ambiente di runtime per il job. Specifica la versione della libreria Python richiesta (requests==2.26.0) e imposta una variabile di ambiente (counter_name) per l'esecuzione del job.
  4. Visualizza il job Ray. Puoi monitorare il job in uno di questi modi:

    • Dashboard Ray: apri il browser web e vai su http://localhost:8265. Questo URL apre la dashboard di Ray, dove puoi visualizzare informazioni sul job in esecuzione, inclusi stato, log e utilizzo delle risorse.
    • Esplora metriche: utilizza le dashboard delle metriche predefinite nella consoleGoogle Cloud . Per maggiori informazioni, consulta Raccogliere e visualizzare log e metriche per i cluster Ray su GKE.
  5. Termina la sessione di Ray. Dopo aver terminato l'interazione con il cluster Ray o il monitoraggio del job, puoi terminare la sessione interattiva premendo Ctrl+C nel terminale in cui hai eseguito il comando kubectl ray session.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

Se hai eseguito il deployment della guida rapida in un nuovo progetto Google Cloud e non ne hai più bisogno, eliminalo completando i seguenti passaggi:

  1. Nella console Google Cloud , vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, inserisci l'ID progetto e fai clic su Chiudi per eliminare il progetto.

Se non hai creato un nuovo progetto Google Cloud e non hai più bisogno del cluster GKE, puoi eliminarlo eseguendo questo comando:

gcloud container clusters delete my-ray-enabled-cluster \
    --location=us-central1

Passaggi successivi

  • Esplora altri esempi, best practice e strumenti per Ray su GKE:per maggiori informazioni, consulta il repository ai-on-gke GitHub.
  • Scopri di più sull'utilizzo degli acceleratori su GKE: utilizza le GPU per l'elaborazione parallela nelle attività di machine learning e analisi dei dati. Utilizza le TPU per accelerare l'addestramento e l'inferenza di modelli di deep learning su larga scala.
  • Scopri di più sull'operatore Ray: per ulteriori informazioni su come utilizzare l'operatore Ray per gestire i deployment Ray, inclusi i job Ray, consulta Informazioni su Ray su GKE.
  • Utilizza Kueue per l'accodamento dei job:scopri come Kueue, un sistema di accodamento dei job nativo di Kubernetes, può aiutarti a gestire e dare la priorità ai tuoi workload di AI/ML, il che può migliorare l'utilizzo delle risorse. Per maggiori informazioni, consulta Ottimizzare l'utilizzo delle risorse GKE per carichi di lavoro di addestramento e inferenza AI/ML misti.