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 imprese potrebbero dover utilizzare reti private. Questo argomento è trattato nell'interfaccia Private Service Connect per Ray su Vertex AI. Un altro caso d'uso prevede l'accesso ai file remoti come se fossero locali (consulta Ray sul file system di rete Vertex AI).

Panoramica

Gli argomenti trattati 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 superiore di 1000 nodi all'interno di un pool di worker. Non esiste alcun limite al numero di pool di worker, ma un numero elevato di pool di worker, ad esempio 1000 pool di worker con un solo nodo ciascuno, può influire negativamente sul rendimento 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 può richiedere 10-20 minuti dopo la creazione.

Console

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

  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 principale di Vertex AI, inclusi il tipo di macchina, il tipo e il numero di acceleratori, il tipo e le dimensioni del disco e il 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, consulta 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 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 consiglio della best practice OSS Ray, viene impostato 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 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.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.
  nfs_mounts=[nfs_mount],  # Optional.

)

Dove:

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

  • NETWORK: (facoltativo) il nome completo della rete VPC, nel formato di 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 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. Devono essere concessi 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 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 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 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? Azione di eliminazione disponibile? Azione di annullamento 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 è in corso 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

(Facoltativo) Immagine personalizzata

Le immagini predefinite sono in linea con la maggior parte degli use case. 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 per scoprire come creare le immagini da un'immagine di base.

Queste immagini di base includono un'installazione di Python, Ubuntu e Ray. Sono incluse 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 on Vertex AI crea un endpoint pubblico e sicuro per lo sviluppo interattivo con il client Ray sui 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 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 ai servizi privati 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 quando crei il 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.

Interfaccia Private Service Connect per Ray su Vertex AI

Il traffico in entrata e in uscita dell'interfaccia Private Service Connect è supportato nei cluster Ray su Vertex AI.

Per utilizzare il traffico in uscita dell'interfaccia Private Service Connect, segui le istruzioni riportate di seguito. Se Controlli di servizio VPC non è abilitato, i cluster con 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, per impostazione predefinita viene utilizzato l'ingresso dell'interfaccia Private Service Connect 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 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 di attivazione dell'interfaccia Private Service Connect

Abilita l'interfaccia Private Service Connect

Segui la guida alla configurazione delle risorse per configurare l'interfaccia Private Service Connect. Dopo aver configurato le risorse, puoi attivare l'interfaccia Private Service Connect nel tuo 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. Per configurare un collegamento di rete, esegui una delle seguenti operazioni:

    • Utilizza il nome NETWORK_ATTACHMENT_NAME 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 sottorete per il nuovo collegamento di rete.

    network-attachment

  5. Fai clic su Crea.

SDK Ray on Vertex AI

L'SDK Ray on Vertex AI fa parte dell'SDK Vertex AI Python. Per imparare a installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per ulteriori informazioni, consulta la documentazione del riferimento all'API Vertex AI SDK for 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_config=psc_config,
)

Dove:

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

Network File System (NFS) di Ray on Vertex AI

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

Configurazione VPC

Esistono due opzioni per configurare la 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 PSC-I, non devi selezionare la modalità di accesso al servizio privato quando crei il filestore.

Utilizzare il Network File System (NFS)

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

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 server NFS. Deve essere un indirizzo privato nella tua 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 ulteriori 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 di 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 connessa in peer.

    • LOCATION: 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: l'ID del tuo progetto. Puoi trovare questi ID nella pagina di 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 + VPC Peering abilitati.

Passaggi successivi