Développer une application sur le cluster Ray sur Vertex AI

Vous pouvez vous connecter à un cluster Ray sur Vertex AI et développer une application à l'aide des méthodes suivantes :

  • Connectez-vous au cluster Ray sur Vertex AI à l'aide de la version du SDK Vertex AI pour Python, qui inclut les fonctionnalités du client Ray. Utilisez cette option si vous préférez un environnement de développement Python interactif.

    • Utiliser le SDK Vertex AI pour Python dans le notebook Colab Enterprise de la console Google Cloud.

    • Utilisez le SDK Vertex AI pour Python dans une session Python, une interface système ou un notebook Jupyter.

  • Écrivez un script Python et envoyez-le au cluster Ray sur Vertex AI à l'aide de l'API Ray Jobs. Utilisez cette option si vous préférez envoyer des tâches par programmation.

Avant de commencer, assurez-vous de lire la présentation de Ray sur Vertex AI et de configurer tous les outils prérequis.

Développer une application à l'aide du SDK Vertex AI pour Python

Pour vous connecter au cluster Ray sur Vertex AI à l'aide du SDK Vertex AI pour Python, l'environnement de connexion doit se trouver sur le même réseau VPC appairé.

Console

  1. Dans la console Google Cloud, accédez à la page Ray sur Vertex AI.

    Accéder à la page Ray sur Vertex AI

  2. Sur la ligne du cluster que vous avez créé, cliquez sur Ouvrir dans Colab Enterprise.

  3. Le notebook Colab Enterprise s'ouvre. Suivez les instructions d'utilisation du SDK Vertex AI pour Python pour vous connecter au cluster Ray sur Vertex AI.

    • Si une boîte de dialogue vous invite à activer des API, cliquez sur Activer.

    • Cliquez sur Se connecter si vous vous connectez au cluster pour la première fois ou sur Se reconnecter si vous vous reconnectez au cluster. La connexion du notebook à l'environnement d'exécution prend quelques minutes.

    • Exécutez la cellule de code Premiers pas pour importer le SDK Vertex AI pour Python et vous connecter au cluster Ray sur Vertex AI.

Python

Depuis un environnement Python interactif :

import ray

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

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

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

Où :

  • REGION : région que vous avez spécifiée pour votre cluster Ray sur Vertex AI.

  • PROJECT_ID : ID de votre projet Google Cloud. Vous pouvez trouver l'ID de projet sur la page Accueil de la console Google Cloud.

  • CLUSTER_NAME : nom de votre cluster Ray sur Vertex AI, spécifié lors de la création du cluster.

Des résultats semblables aux lignes suivantes devraient s'afficher :

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

Vous pouvez utiliser l'URL Dashboard pour accéder au tableau de bord Ray à partir d'un navigateur. L'URI est au format https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. Le tableau de bord affiche les tâches envoyées, le nombre de GPU ou de processeurs, ainsi que l'espace disque de chaque machine du cluster.

Une fois que vous êtes connecté au cluster Ray sur Vertex AI, vous pouvez développer un programme Ray de la même manière que pour un backend OSS Ray normal.

@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]

Développer une application à l'aide de l'API Ray Jobs

Cette section explique comment envoyer un programme Python au cluster Ray sur Vertex AI à l'aide de l'API Ray Jobs.

Écrire un script Python

Développez votre application en tant que script Python dans n'importe quel éditeur de texte. Par exemple, placez le script suivant dans un fichier 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)]))

Envoyer un job Ray à l'aide de l'API Ray Jobs

Vous pouvez envoyer un job Ray à l'aide de Python, de la CLI Ray Jobs ou de l'adresse publique du tableau de bord Ray.

Python – Nom de la ressource de cluster

Dans le réseau appairé VPC, envoyez un job Ray à l'aide d'un environnement 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",
            "xgboost",
            "ray==2.9.3", # pin the Ray version to prevent it from being overwritten
           ]
  }
)

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

Où :

  • REGION : région que vous avez spécifiée pour votre cluster Ray sur Vertex AI.

  • PROJECT_ID : numéro de votre projet Google Cloud. Vous pouvez trouver l'ID de projet sur la page Accueil de la console Google Cloud.

  • CLUSTER_NAME : nom de votre cluster Ray sur Vertex AI, spécifié lors de la création du cluster.

Python - Tableau de bord Ray

L'adresse du tableau de bord Ray est accessible depuis l'extérieur du VPC, y compris l'Internet public. Notez que vertex_ray est requis pour obtenir une authentification automatiquement.

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",
            "xgboost",
            "ray==2.9.3", # pin the Ray version to prevent it from being overwritten
           ]
  }
)
print(job_id)

Où :

DASHBOARD_ADDRESS : adresse du tableau de bord Ray pour votre cluster. Vous pouvez trouver l'adresse du tableau de bord à l'aide du SDK Vertex AI pour Python.

CLI Ray  Jobs

Notez que vous ne pouvez utiliser que les commandes de la CLI Ray Jobs dans le réseau VPC appairé.

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

Étapes suivantes