Sviluppa un'applicazione sul cluster Ray su Gemini Enterprise Agent Platform

Connettiti a un cluster Ray su Gemini Enterprise Agent Platform e sviluppa un'applicazione utilizzando i seguenti metodi:

  • Connettiti al cluster Ray su Gemini Enterprise Agent Platform tramite Ray Client utilizzando la versione dell' SDK Agent Platform per Python che include la funzionalità di Ray Client. Utilizza questa opzione se preferisci un ambiente di sviluppo Python interattivo.

    • Utilizza l'SDK Agent Platform per Python nel notebook Colab Enterprise nella Google Cloud console.

    • Utilizza l'SDK Agent Platform per Python in una sessione Python, una shell o un notebook Jupyter.

  • Scrivi uno script Python e invialo al cluster Ray su Gemini Enterprise Agent Platform utilizzando l'API Ray Jobs. Se preferisci inviare i job in modo programmatico, utilizza questa opzione.

Prima di iniziare, assicurati di leggere la panoramica di Ray on Agent Platform e di configurare tutti gli strumenti prerequisiti di cui hai bisogno.

Connettiti a un cluster Ray tramite Ray Client

Per utilizzare il client Ray interattivo, connettiti al cluster Ray su Gemini Enterprise Agent Platform. La rete dell'ambiente di connessione dipende dalla configurazione di rete del cluster. Non si applicano limitazioni all'ambiente di connessione, a condizione che il cluster abbia accesso a internet pubblico. Ciò significa che non hai specificato una rete VPC durante la creazione del cluster. Tuttavia, se il cluster si trova su una rete VPC privata con peering con Gemini Enterprise Agent Platform, l'ambiente di connessione deve trovarsi sulla stessa rete VPC del cluster.

La versione di Ray sul lato client deve corrispondere alla versione di Ray del cluster. pip install "google-cloud-aiplatform[ray]" installa la versione 2.47 di Ray sul lato client per impostazione predefinita. Se la versione di Ray del cluster è precedente, ad esempio 2.42, utilizza pip install ray==2.42.0 per far corrispondere la versione di Ray del lato client alla versione di Ray del cluster.

Console

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

  1. Nella Google Cloud console, vai alla pagina Ray on Agent Platform.

    Vai alla pagina Ray on Agent Platform

  2. Nella riga del cluster che hai creato, fai clic su Apri in Colab Enterprise.

  3. Si apre il notebook Colab Enterprise. Segui le istruzioni su come utilizzare l'SDK Agent Platform per Python per connetterti al cluster Ray su Gemini Enterprise Agent Platform.

    • Se viene visualizzata una schermata di dialogo che ti chiede di abilitare le API, fai clic su Abilita.

    • Se ti connetti al cluster per la prima volta, fai clic su Connetti. Se ti riconnetti al cluster, fai clic su Riconnetti. Il notebook impiega alcuni minuti per connettersi al runtime.

    • Fai clic su +CREA per creare un nuovo notebook.

    • Fai clic su Pannello Ray on Agent Platform per aprire il riquadro Ray on Agent Platform.
      Vengono visualizzati i cluster esistenti.

    • Seleziona un cluster e fai clic su CONNETTI.
      Nel notebook aperto viene visualizzato il codice che si connette al cluster scelto.

    • Altre azioni (facoltative): per aprire la pagina dell'elenco dei cluster Ray on Agent Platform, fai clic su Gestisci cluster nel riquadro Ray on Agent Platform.

      • Seleziona un cluster e fai clic sul menu Altre azioni.
        Vengono visualizzate altre opzioni:
        altre opzioni
    • Esegui la cella di codice Introduzione per importare l'SDK Agent Platform per Python e connetterti al cluster Ray su Gemini Enterprise Agent Platform.

Python

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

Da un ambiente Python interattivo:

import ray

# Necessary even if aiplatform.* symbol is not directly used in your program.
from google.cloud import aiplatform
import vertex_ray

import vertexai
vertexai.init()
# The CLUSTER_RESOURCE_NAME is the one returned from vertex_ray.create_ray_cluster.
CLUSTER_RESOURCE_NAME='projects/{}/locations/{}/persistentResources/{}'.format(PROJECT_ID, LOCATION, CLUSTER_NAME)

ray.init('vertex_ray://{}'.format(CLUSTER_RESOURCE_NAME))

Dove:

  • LOCATION: la località che specifichi per il cluster Ray su Gemini Enterprise Agent Platform.

  • PROJECT_ID: l' Google Cloud ID progetto. Trova l' ID progetto nella Google Cloud pagina di benvenuto della console.

  • CLUSTER_NAME: il nome del cluster Ray su Gemini Enterprise Agent Platform, specificato durante la creazione del cluster. Vai alla Google Cloud console per visualizzare l'elenco dei nomi dei cluster per un progetto.

Viene visualizzato un output simile al seguente:

Python version:  3.10.12
Ray version: 2.47
Vertex SDK version: 1.46.0
Dashboard: xxxx-dot-us-central1.aiplatform-training.googleusercontent.com

Utilizza l'URL Dashboard per accedere alla dashboard di Ray da un browser. L'URI è nel formato https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. La dashboard mostra i job inviati, il numero di GPU o CPU e lo spazio su disco di ogni macchina nel cluster.

Dopo aver eseguito la connessione al cluster Ray su Gemini Enterprise Agent Platform, sviluppa un programma Ray nello stesso modo in cui ne sviluppi uno per un normale backend Ray OSS.

@ray.remote
def square(x):
  print(x)
  return x * x

# Launch four parallel square tasks.
futures = [square.remote(i) for i in range(4)]

print(ray.get(futures))
# Returns [0, 1, 4, 9]

Sviluppa un'applicazione utilizzando l'API Ray Jobs

Questa sezione descrive come inviare un programma Python al cluster Ray su Gemini Enterprise Agent Platform utilizzando l' API Ray Jobs.

Scrivi uno script Python

Sviluppa l'applicazione come script Python in qualsiasi editor di testo. Ad esempio, inserisci lo script seguente in un file my_script.py:

import ray
import time

@ray.remote
def hello_world():
    return "hello world"

@ray.remote
def square(x):
    print(x)
    time.sleep(100)
    return x * x

ray.init()  # No need to specify address="vertex_ray://...."
print(ray.get(hello_world.remote()))
print(ray.get([square.remote(i) for i in range(4)]))

Invia un job Ray utilizzando l'API Ray Jobs

Invia un job Ray utilizzando Python, la CLI Ray Jobs o l'indirizzo della dashboard pubblica di Ray dashboard.

Python: nome risorsa cluster

Invia un job Ray utilizzando un ambiente Python:

import ray
import vertex_ray
from ray.job_submission import JobSubmissionClient
from google.cloud import aiplatform  # Necessary even if aiplatform.* symbol is not directly used in your program.

CLUSTER_RESOURCE_NAME='projects/{}/locations/REGION/persistentResources/{}'.format(PROJECT_ID, CLUSTER_NAME)

client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME))

job_id = client.submit_job(
  # Entrypoint shell command to execute
  entrypoint="python my_script.py",
  # Path to the local directory that contains the my_script.py file.
  runtime_env={
    "working_dir": "./directory-containing-my-script",
    "pip": ["numpy",
            "setuptools<70.0.0",
            "xgboost",
            "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster
           ]
  }
)

# Ensure that the Ray job has been created.
print(job_id)

Dove:

  • REGION: la regione che specifichi per il cluster Ray su Gemini Enterprise Agent Platform.

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

  • CLUSTER_NAME: il nome del cluster Ray su Gemini Enterprise Agent Platform, specificato durante la creazione del cluster. Vai alla Google Cloud console per visualizzare l'elenco dei nomi dei cluster per un progetto.

  • CLUSTER_RAY_VERSION: blocca la versione di Ray alla stessa versione del cluster. Ad esempio, 2.47.1.

Python: dashboard di Ray

L'indirizzo della dashboard di Ray è accessibile dall'esterno del VPC, inclusa la rete internet pubblica. Tieni presente che vertex_ray è necessario per ottenere l'autenticazione automaticamente.

from ray.job_submission import JobSubmissionClient
import vertex_ray

DASHBOARD_ADDRESS=DASHBOARD_ADDRESS

client = JobSubmissionClient(
  "vertex_ray://{}".format(DASHBOARD_ADDRESS),
)

job_id = client.submit_job(
  # Entrypoint shell command to execute
  entrypoint="python my_script.py",
  # Path to the local directory that contains the my_script.py file
  runtime_env={
    "working_dir": "./directory-containing-my-script",
    "pip": ["numpy",
            "setuptools<70.0.0",
            "xgboost",
            "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster
           ]
  }
)
print(job_id)

Dove:

DASHBOARD_ADDRESS: l'indirizzo della dashboard di Ray per il cluster. Trova l'indirizzo della dashboard utilizzando l'SDK Agent Platform per Python.

CLI Ray Jobs

Utilizza i comandi della CLI Ray Jobs solo all'interno della rete VPC con peering.

$ ray job submit --working-dir ./ --address vertex_ray://{CLUSTER_RESOURCE_NAME} -- python my_script.py

Dopo aver inviato un job Ray a lunga esecuzione, se vuoi monitorare lo stato del job utilizzando client.get_job_status(job_id), crea una nuova istanza di JobSubmissionClient(client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME)) ) per aggiornare il token di autenticazione.

Supporto per il peering VPC e l'account di servizio personalizzato

Ray on Agent Platform supporta Ray Client e l'API Ray Jobs (JobSubmissionClient) in una rete pubblica per l'agente di servizio predefinito e gli account di servizio personalizzati.

La tabella seguente mostra il supporto di Ray on Agent Platform per il peering VPC quando crei il cluster Ray con la rete VPC:

Peering VPC Agente di servizio predefinito Account di servizio personalizzato
Ray Client (modalità interattiva) No
Ray JobSubmissionClient

I Controlli di servizio VPC richiedono configurazioni aggiuntive. Per maggiori dettagli, consulta Connettività privata e pubblica.

Utilizza Network File System (NFS) nel codice Ray

Se imposti un montaggio NFS quando crei il cluster Ray, leggi e scrivi questi volumi NFS nel tuo codice dell'applicazione.

RayClient

Questa sezione mostra come utilizzare Network File System (NFS) nel codice Ray.

  1. Inizializza RayClient in un ambiente Python

    import ray
    from google.cloud import aiplatform
    import vertex_ray
    aiplatform.init(project=PROJECT_ID, location=REGION)
    ray.init(address='vertex_ray://projects/{}/locations/us-central1/persistentResources/{}'.format(PROJECT_NUMBER, PERSISTENT_RESOURCE_ID))
  2. Esegui lo script del job

    import ray
    import logging
    import os
    import sys
    
    @ray.remote
    def main():
    logging.info("list all files in mounted folder")
    return os.listdir("/mnt/nfs/test")
    
    print(''.join(ray.get(main.remote())))

Invia un job Ray utilizzando Python, la CLI Ray Jobs o l'indirizzo della dashboard pubblica di Ray. Per maggiori informazioni, consulta Sviluppa un'applicazione sul cluster Ray su Gemini Enterprise Agent Platform).

Passaggi successivi