Crea un cluster Ray su Vertex AI

Puoi utilizzare la console Google Cloud o l'SDK Vertex AI per Python per creare un cluster Ray. Un cluster può avere fino a 2000 nodi. Esiste un limite superiore di 1000 nodi all'interno di un pool di worker. Non c'è limite al numero di worker ma con un elevato numero di pool di worker, ad esempio con 1000 pool con un nodo ciascuno, possono influire negativamente sulle prestazioni del cluster.

Prima di iniziare, assicurati di leggere la panoramica di Ray su Vertex AI e di configurare tutti gli strumenti di prerequisiti di cui hai bisogno.

L'avvio di un cluster Ray su Vertex AI potrebbe richiedere 10-20 minuti dopo averlo creato.

Console

In conformità con Best practice Ray OSS Si consiglia di impostare il conteggio logico delle CPU su 0 sul nodo head Ray in base all'ordine. per evitare di eseguire carichi di lavoro sul nodo head.

  1. Nella console Google Cloud, vai alla pagina Ray su Vertex AI.

    Vai alla pagina di Ray on Vertex AI

  2. Fai clic su Crea cluster per aprire il riquadro Crea cluster.

  3. Per ogni passaggio del riquadro Crea cluster, rivedi o sostituisci le informazioni predefinite del cluster. Fai clic su Continua per completare ogni passaggio:

    1. In Nome e regione, specifica un nome e scegli una località per il cluster.

    2. In Impostazioni di calcolo, specifica la configurazione del Cluster Ray sul nodo head di Vertex AI, tra cui tipo di macchina, acceleratore tipo e conteggio, tipo e dimensione del disco e numero di repliche. Se vuoi, puoi aggiungere un URI immagine personalizzato per specificare un'immagine del container personalizzata per aggiungere dipendenze Python non fornite dall'immagine del container predefinita. Vedi Immagine personalizzata.

      In Opzioni avanzate, puoi:

      • Specifica la tua chiave di crittografia.
      • Specifica un account di servizio personalizzato.
      • Disattiva la raccolta delle metriche se non devi monitorare le statistiche delle risorse del tuo carico di lavoro durante l'addestramento.
    3. (Facoltativo) Per impostare un endpoint privato anziché pubblico per il cluster, specifica una rete VPC da utilizzare con Ray su Vertex AI. Per ulteriori informazioni, vedi Connettività privata e pubblica.

      Se non hai configurato una connessione per la tua rete VPC, fai clic su Configura connessione. Nel riquadro Crea una connessione di accesso ai servizi privati, completa e fai clic su Continua per ciascuno dei seguenti passaggi:

      1. Abilita l'API Service Networking.

      2. Per Alloca un intervallo IP, puoi selezionare, creare o consentire a Google di allocare automaticamente un intervallo IP.

      3. Per Crea una connessione, controlla i valori relativi a Rete e Allocazione allocata Informazioni sull'intervallo IP.

      4. Fai clic su Crea connessione.

  4. Fai clic su Crea.

SDK Ray on Vertex AI

In conformità con il consiglio della best practice di Ray OSS, viene applicato il conteggio delle CPU logiche su 0 sul nodo principale di Ray per evitare di eseguire qualsiasi carico di lavoro sul nodo principale.

Da un ambiente Python interattivo, utilizza quanto segue per creare Cluster Ray su Vertex AI:

import ray
import vertex_ray
from google.cloud import aiplatform
from vertex_ray import Resources

# Define a default CPU cluster, machine_type is n1-standard-16, 1 head node and 1 worker node
head_node_type = Resources()
worker_node_types = [Resources()]

# Or define a GPU cluster.
head_node_type = Resources(
  machine_type="n1-standard-16",
  node_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # Optional. When not specified, a prebuilt image is used.
)

worker_node_types = [Resources(
  machine_type="n1-standard-16",
  node_count=2,  # Must be >= 1
  accelerator_type="NVIDIA_TESLA_T4",
  accelerator_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # When not specified, a prebuilt image is used.
)]

aiplatform.init()
# Initialize Vertex AI to retrieve projects for downstream operations.
# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
  head_node_type=head_node_type,
  network=NETWORK, #Optional
  worker_node_types=worker_node_types,
  python_version="3.10",  # Optional
  ray_version="2.33",  # Optional
  cluster_name=CLUSTER_NAME, # Optional
  service_account=SERVICE_ACCOUNT,  # Optional
  enable_metrics_collection=True,  # Optional. Enable metrics collection for monitoring.
  labels=LABELS,  # Optional.

)

Dove:

  • CLUSTER_NAME: un nome per il cluster Ray su Vertex AI che devono essere univoci nell'intero progetto.

  • NETWORK: (facoltativo) il nome completo del VPC nel formato projects/PROJECT_ID/global/networks/VPC_NAME. Per impostare un endpoint privato anziché uno pubblico per il cluster, specifica una rete VPC da utilizzare con Ray on Vertex AI. Per ulteriori informazioni, consulta Connettività privata e pubblica.

  • (Facoltativo) VPC_NAME: il VPC su cui opera la VM.

  • PROJECT_ID: l'ID del tuo progetto Google Cloud. Puoi visualizzare l'ID progetto nella console Google Cloud benvenuto .

  • SERVICE_ACCOUNT: (Facoltativo) L'account di servizio per eseguire le applicazioni Ray sul cluster. È necessario concedere i ruoli obbligatori.

  • LABELS: (Facoltativo) Le etichette con metadati definiti dall'utente utilizzati per organizzare i cluster Ray. Le chiavi e i valori delle etichette non possono essere più lunghi di 64 (punti di codice Unicode) e possono contenere solo lettere minuscole, caratteri numerici, trattini bassi e trattini. Caratteri internazionali sono consentiti. Per saperne di più, visita la pagina https://goo.gl/xmQnxf informazioni ed esempi di etichette.

Dovresti vedere il seguente output fino a quando lo stato non diventa RUNNING:

[Ray on Vertex AI]: Cluster State = State.PROVISIONING
Waiting for cluster provisioning; attempt 1; sleeping for 0:02:30 seconds
...
[Ray on Vertex AI]: Cluster State = State.RUNNING

Tieni presente quanto segue:

  • Il primo nodo viene utilizzato come nodo head.

  • I tipi di macchina TPU non sono supportati.

Gestione del ciclo di vita

Durante il ciclo di vita di un cluster Ray su Vertex AI ogni azione viene associati a uno stato. Lo stato di fatturazione e l'opzione di gestione per ogni stato sono riassunti nella tabella seguente. La documentazione di riferimento fornisce una definizione per ciascuno di questi stati.

Azione Stato Fatturato? Eliminare l'azione disponibile? Annullare l'azione disponibile?
L'utente sta creando un cluster PROVISIONING No No No
L'utente esegue manualmente il ridimensionamento verso l'alto o verso il basso IN FASE DI AGGIORNAMENTO Sì, in base alle dimensioni in tempo reale No
Il cluster è in fase di esecuzione IN ESECUZIONE Non applicabile, puoi eliminare
La scalabilità automatica del cluster è attiva o meno IN FASE DI AGGIORNAMENTO Sì, in base alle dimensioni in tempo reale No
L'utente sta eliminando il cluster FINE No No Non applicabile: l'arresto è già in corso
Il cluster entra in stato di errore ERRORE No Non applicabile, puoi eliminare
Non applicabile STATE_UNSPECIFIED No Non applicabile

Immagine personalizzata (facoltativa)

Le immagini predefinite si adattano alla maggior parte e casi d'uso specifici. Se vuoi creare la tua immagine, ti consigliamo di utilizzare le immagini preimpostate di Ray on Vertex come immagine di base. Consulta: la documentazione di Docker su come creare le tue immagini da un'immagine di base.

Queste immagini di base includono un'installazione di Python, Ubuntu e Ray. Includono anche dipendenze quali:

  • python-json-logger
  • google-cloud-resource-manager
  • ca-certificates-java
  • libatlas-base-dev
  • liblapack-dev
  • G++, libio-all-perl
  • libyaml-0-2.

Se vuoi creare la tua immagine senza la nostra immagine di base (avanzato), assicurati che includa:

  • Ray 2.33.0 o 2.9.3
  • Python 3.10
  • python-json-logger==2.0.7

Connettività privata e pubblica

Per impostazione predefinita, Ray on Vertex AI crea un endpoint pubblico e sicuro sviluppo interattivo con Ray Client su cluster Ray su Vertex AI. Ti consigliamo di utilizzare la connettività pubblica per casi d'uso di sviluppo o temporanei. Questo endpoint pubblico è accessibile tramite internet. Solo gli utenti autorizzati che dispongono almeno delle autorizzazioni per i ruoli utente di Vertex AI nel progetto utente del cluster Ray possono accedere al cluster.

Se hai bisogno di una connessione privata al tuo cluster o se utilizzi Controlli di servizio VPC, il peering VPC è supportato per i cluster Ray su Vertex AI. I cluster con un endpoint privato sono accessibili solo da un client all'interno di una rete VPC con peering con Vertex AI.

Per configurare la connettività privata con il peering VPC per Ray su Vertex AI, seleziona una rete VPC quando crei il cluster. La rete VPC richiede una connessione privata ai servizi tra tra la tua rete VPC e Vertex AI. Se utilizzi Ray on Vertex AI nella console, puoi configurare la connessione di accesso ai servizi privati durante la creazione del cluster.

Se vuoi utilizzare Controlli di servizio VPC e il peering VPC con i cluster Ray su Vertex AI, è necessaria una configurazione aggiuntiva per utilizzare la dashboard e la shell interattiva di Ray. Segui le istruzioni riportate in Ray Dashboard e shell interattiva con VPC-SC + peering VPC per configurare la configurazione della shell interattiva con VPC-SC e peering VPC nel tuo progetto utente.

Dopo aver creato il cluster Ray su Vertex AI, puoi connetterti al node principale utilizzando l'SDK Vertex AI per Python. L'ambiente di connessione, ad esempio una VM Compute Engine o un'istanza Vertex AI Workbench, deve trovarsi nella rete VPC in peering con Vertex AI. Tieni presente che una connessione ai servizi privati ha un numero limitato di indirizzi IP, il che potrebbe comportare l'esaurimento degli indirizzi IP. È quindi consigliabile utilizzare connessioni private per i cluster di lunga durata.

Dashboard Ray e shell interattiva con VPC-SC + peering VPC

  1. Configura peered-dns-domains.

    {
      VPC_NAME=NETWORK_NAME
      REGION=LOCATION
      gcloud services peered-dns-domains create training-cloud \
      --network=$VPC_NAME \
      --dns-suffix=$REGION.aiplatform-training.cloud.google.com.
    
      # Verify
      gcloud beta services peered-dns-domains list --network $VPC_NAME);
    }
        
    • NETWORK_NAME: passa alla rete con peering.

    • LOCATION: località desiderata (ad es. us-central1).

  2. Configura DNS managed zone.

    {
      PROJECT_ID=PROJECT_ID
      ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com
      DNS_NAME=aiplatform-training.cloud.google.com
      DESCRIPTION=aiplatform-training.cloud.google.com
    
      gcloud dns managed-zones create $ZONE_NAME  \
      --visibility=private  \
      --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME  \
      --dns-name=$DNS_NAME  \
      --description="Training $DESCRIPTION"
    }
        
    • PROJECT_ID: l'ID progetto. Puoi trovare questi ID nella pagina di benvenuto della console Google Cloud.

  3. Registra transazione DNS.

    {
      gcloud dns record-sets transaction start --zone=$ZONE_NAME
    
      gcloud dns record-sets transaction add \
      --name=$DNS_NAME. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction add \
      --name=*.$DNS_NAME. \
      --type=CNAME $DNS_NAME. \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction execute --zone=$ZONE_NAME
    }
        
  4. Invia un job di addestramento con la shell interattiva + VPC-SC + peering VPC abilitato.

Passaggi successivi