Creare un cluster Ray su Vertex AI

Questo documento fornisce istruzioni per configurare un cluster Ray su Vertex AI per soddisfare varie esigenze. Ad esempio, se vuoi creare la tua immagine, consulta Immagine personalizzata. Alcune aziende potrebbero dover utilizzare il networking privato. Questo argomento è trattato in Interfaccia Private Service Connect per Ray su Vertex AI. Un altro caso d'uso riguarda l'accesso ai file remoti come se fossero locali (vedi Ray su Vertex AI Network File System).

Panoramica

Gli argomenti trattati qui riguardano:

Crea un cluster Ray

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 massimo di 1000 nodi in un worker pool. Non esiste un limite al numero di pool di worker, ma un numero elevato di pool di worker, ad esempio 1000 pool di worker con un nodo ciascuno, può 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 prerequisiti necessari.

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

Console

In conformità con il best practice di OSS Ray, l'impostazione del conteggio delle CPU logiche su 0 sul nodo head di Ray viene applicata per evitare l'esecuzione di qualsiasi workload sul nodo head.

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

    Vai alla pagina Ray su 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. Per Nome e regione, specifica un Nome e scegli una Località per il cluster.

    2. Per le impostazioni di calcolo, specifica la configurazione del cluster Ray sul nodo head di Vertex AI, inclusi il tipo di macchina, il tipo e il conteggio degli acceleratori, il tipo e le dimensioni del disco e il conteggio delle 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.

      Nella sezione Opzioni avanzate, puoi:

      • Specifica la tua chiave di crittografia.
      • Specifica un service account personalizzato.
      • Disattiva la raccolta delle metriche se non devi monitorare le statistiche delle risorse del tuo workload durante l'addestramento.
    3. (Facoltativo) Per impostare un endpoint privato anziché un endpoint pubblico per il cluster, specifica una rete VPC da utilizzare con Ray su Vertex AI. Per saperne di più, consulta la sezione 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 ognuno 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, esamina le informazioni su Rete e Intervallo IP allocato.

      4. Fai clic su Crea connessione.

  4. Fai clic su Crea.

SDK Ray on Vertex AI

In conformità con il best practice di OSS Ray, l'impostazione del conteggio delle CPU logiche su 0 sul nodo head di Ray viene applicata per evitare l'esecuzione di qualsiasi workload sul nodo head.

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

import ray
import vertex_ray
from google.cloud import aiplatform
from vertex_ray import Resources
from vertex_ray.util.resources import NfsMount

# 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.
)]
# Optional. Create cluster with Network File System (NFS) setup.
nfs_mount = NfsMount(
    server="10.10.10.10",
    path="nfs_path",
    mount_point="nfs_mount_point",
)
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.42",  # Optional
  cluster_name=CLUSTER_NAME, # Optional
  service_account=SERVICE_ACCOUNT,  # Optional
  enable_metrics_collection=True,  # Optional. Enable metrics collection for monitoring.
  labels=LABELS,  # Optional.
  nfs_mounts=[nfs_mount],  # Optional.

)

Dove:

  • CLUSTER_NAME: un nome per il cluster Ray su Vertex AI che deve essere univoco nel tuo progetto.

  • NETWORK: (facoltativo) il nome completo della tua rete VPC, nel formato projects/PROJECT_ID/global/networks/VPC_NAME. Per impostare un endpoint privato anziché un endpoint pubblico per il cluster, specifica una rete VPC da utilizzare con Ray su Vertex AI. Per saperne di più, consulta Connettività privata e pubblica.

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

  • PROJECT_ID: il tuo ID progetto Google Cloud . Puoi trovare l'ID progetto nella pagina di benvenuto della console Google Cloud .

  • SERVICE_ACCOUNT: (facoltativo) l'account di servizio per eseguire le applicazioni Ray sul cluster. Ruoli richiesti devono essere concessi.

  • LABELS: (facoltativo) le etichette con metadati definiti dall'utente utilizzati per organizzare i cluster Ray. I valori e le chiavi di etichetta non devono superare i 64 caratteri (punti di codice Unicode) e possono contenere solo lettere minuscole, caratteri numerici, trattini bassi e trattini. Sono consentiti caratteri internazionali. Per ulteriori informazioni ed esempi di etichette, visita la pagina https://goo.gl/xmQnxf.

Dovresti vedere il seguente output finché lo stato non cambia in 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 principale.

  • I tipi di macchine TPU non sono supportati.

Gestione del ciclo di vita

Durante il ciclo di vita di un cluster Ray su Vertex AI, ogni azione è associata 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? Azione di annullamento disponibile?
L'utente sta creando un cluster PROVISIONING No No No
L'utente sta eseguendo lo scale up o lo scale down manualmente IN AGGIORNAMENTO Sì, in base alle dimensioni in tempo reale No
Il cluster è in fase di esecuzione IN ESECUZIONE Non applicabile: puoi eliminare
Il cluster esegue lo scale up o lo scale down automatico IN AGGIORNAMENTO Sì, in base alle dimensioni in tempo reale No
L'utente sta eliminando il cluster FINE No No Non applicabile: già in fase di arresto
Il cluster entra nello stato di errore ERRORE No Non applicabile: puoi eliminare
Non applicabile STATE_UNSPECIFIED No Non applicabile

Immagine personalizzata (facoltativa)

Le immagini predefinite sono in linea con la maggior parte dei casi d'uso. Se vuoi creare la tua immagine, ti consigliamo di utilizzare le immagini predefinite di Ray su Vertex come immagine di base. Consulta la documentazione di Docker per scoprire come creare le immagini da un'immagine di base.

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

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

Connettività privata e pubblica

Per impostazione predefinita, Ray su Vertex AI crea un endpoint pubblico e sicuro per lo sviluppo interattivo con Ray Client sui cluster Ray su Vertex AI. Ti consigliamo di utilizzare la connettività pubblica per i casi d'uso di sviluppo o temporanei. Questo endpoint pubblico è accessibile tramite internet. Solo gli utenti autorizzati che dispongono, come minimo, delle autorizzazioni del ruolo utente 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 i 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 in 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 di accesso privato ai servizi tra la tua rete VPC e Vertex AI. Se utilizzi Ray su 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 Ray e la shell interattiva. Segui le istruzioni riportate in Ray Dashboard e shell interattiva con VPC-SC + peering VPC per configurare la shell interattiva con VPC-SC e peering VPC nel tuo progetto utente.

Dopo aver creato il cluster Ray su Vertex AI, puoi connetterti al nodo head 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. Pertanto, è consigliabile utilizzare connessioni private per i cluster a lunga esecuzione.

Interfaccia Private Service Connect per Ray su Vertex AI

L'interfaccia Private Service Connect in uscita e in entrata è supportata sui cluster Ray su Vertex AI.

Per utilizzare il traffico in uscita dell'interfaccia Private Service Connect, segui le istruzioni fornite di seguito. Se Controlli di servizio VPC non è abilitato, i cluster con il traffico in uscita dall'interfaccia Private Service Connect utilizzano l'endpoint pubblico sicuro per l'ingresso con Ray Client.

Se i Controlli di servizio VPC sono abilitati, l'ingresso dell'interfaccia Private Service Connect viene utilizzato per impostazione predefinita con l'uscita dell'interfaccia Private Service Connect. Per connetterti a Ray Client o inviare job da un notebook per un cluster con ingresso dell'interfaccia Private Service Connect, assicurati che il notebook si trovi all'interno della rete VPC e della subnet del progetto utente. Per ulteriori dettagli su come configurare i Controlli di servizio VPC, consulta Controlli di servizio VPC con Vertex AI.

diagramma dell'attivazione dell'interfaccia Private Service Connect

Abilita l'interfaccia Private Service Connect

Segui la guida Configurazione delle risorse per configurare l'interfaccia Private Service Connect. Dopo aver configurato le risorse, puoi abilitare l'interfaccia Private Service Connect sul cluster Ray su Vertex AI.

Console

  1. Durante la creazione del cluster e dopo aver specificato Nome e regione e Impostazioni di calcolo, viene visualizzata l'opzione Networking.

    console-specify-network

  2. Configura un collegamento di rete eseguendo una delle seguenti operazioni:

    • Utilizza il nome NETWORK_ATTACHMENT_NAME che hai specificato durante la configurazione delle risorse per Private Service Connect.
    • Crea un nuovo collegamento di rete facendo clic sul pulsante Crea collegamento di rete visualizzato nel menu a discesa.

    console-create-new-network

  3. Fai clic su Crea collegamento di rete.

  4. Nella sottoattività visualizzata, specifica un nome, una rete e una subnet per il nuovo collegamento di rete.

    network-attachment

  5. Fai clic su Crea.

SDK Ray on Vertex AI

L'SDK Ray su Vertex AI fa parte dell'SDK Vertex AI per Python. Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Vertex AI SDK per Python.

from google.cloud import aiplatform
import vertex_ray

# Initialization
aiplatform.init()

# Create a default cluster with network attachment configuration

psc_config = vertex_ray.PscIConfig(network_attachment=NETWORK_ATTACHMENT_NAME)
cluster_resource_name = vertex_ray.create_ray_cluster(
   psc_interface_config=psc_config,
)

Dove:

  • NETWORK_ATTACHMENT_NAME: il nome specificato durante la configurazione delle risorse per Private Service Connect nel progetto utente.

Ray su Network File System (NFS) di Vertex AI

Per rendere disponibili i file remoti nel cluster, monta le condivisioni Network File System (NFS). I tuoi job possono quindi accedere ai file remoti come se fossero locali, il che consente un'elevata velocità effettiva e una bassa latenza.

Configurazione VPC

Sono disponibili due opzioni per configurare VPC:

  1. Crea un collegamento di rete dell'interfaccia Private Service Connect. (Consigliato)
  2. Configura il peering di rete VPC.

Configura l'istanza NFS

Per maggiori dettagli su come creare un'istanza Filestore, consulta Creare un'istanza. Se utilizzi il metodo dell'interfaccia Private Service Connect, non devi selezionare la modalità di accesso privato ai servizi durante la creazione di Filestore.

Utilizzare il Network File System (NFS)

Per utilizzare il file system di rete, devi specificare una rete o un collegamento di rete (consigliato).

Console

  1. Nel passaggio Networking della pagina di creazione, dopo aver specificato una rete o un collegamento di rete. Per farlo, fai clic su Aggiungi montaggio NFS nella sezione Network File System (NFS) e specifica un montaggio NFS (server, percorso e punto di montaggio).

    Campo Descrizione
    server L'indirizzo IP del tuo server NFS. Deve essere un indirizzo privato nel tuo VPC.
    path Il percorso della condivisione NFS. Deve essere un percorso assoluto che inizia con /.
    mountPoint Il punto di montaggio locale. Deve essere un nome di directory UNIX valido. Ad esempio, se il punto di montaggio locale è sourceData, specifica il percorso /mnt/nfs/ sourceData dall'istanza VM di addestramento.

    Per maggiori informazioni, consulta Dove specificare le risorse di calcolo.

  2. Specifica un server, un percorso e un punto di montaggio. nfs-file-system

  3. Fai clic su Crea. Viene creato il cluster Ray.

Dashboard Ray e shell interattiva con Controlli di servizio VPC + 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 in peering.

    • LOCATION: la posizione desiderata (ad esempio, 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: il tuo ID progetto. Puoi trovare questi ID nella pagina Benvenuto della console Google Cloud .

  3. Registra la 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