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 via le client Ray à 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.

Se connecter à un cluster Ray via le client Ray

Pour utiliser le client Ray interactif, connectez-vous à votre cluster Ray sur Vertex AI. Le réseau de l'environnement de connexion dépend de la configuration réseau du cluster. Il n'existe aucune restriction concernant l'environnement de connexion tant que le cluster dispose d'un accès Internet public. Autrement dit, aucun réseau VPC n'a été spécifié lors de la création du cluster. Toutefois, si le cluster se trouve sur un réseau VPC privé appairé avec Vertex AI, l'environnement de connexion doit se trouver sur le même réseau VPC que le cluster.

Console

Conformément aux bonnes pratiques OSS Ray, le nombre de processeurs logiques est défini sur 0 sur le nœud principal de Ray afin d'éviter toute exécution de charge de travail sur ce nœud.

  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.

    • Cliquez sur + CRÉER pour créer un notebook.

    • Cliquez sur Panneau Ray sur Vertex AI pour ouvrir le panneau Ray sur Vertex AI.
      L'affichage des clusters existants s'affiche.

    • Sélectionnez un cluster, puis cliquez sur SE CONNECTER.
      Le code apparaît dans le notebook ouvert qui se connecte au cluster choisi.

    • Autres actions (facultatif) : Pour ouvrir la page de la liste des clusters Ray sur Vertex AI, cliquez sur Gérer les clusters dans le panneau Ray sur Vertex AI.

      • Sélectionnez un cluster, puis cliquez sur le menu Autres actions.
        D'autres options s'affichent :
        d'autres options s'affichent
    • 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

Conformément aux bonnes pratiques OSS Ray, le nombre de processeurs logiques est défini sur 0 sur le nœud principal de Ray afin d'éviter toute exécution de charge de travail sur ce nœud.

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

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))

Où :

  • LOCATION : emplacement que vous avez spécifié 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. Accédez à la console Google Cloud pour afficher la liste des noms de clusters d'un projet.

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

Python version:  3.10.12
Ray version: 2.33
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

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.33.0", # 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. Accédez à la console Google Cloud pour afficher la liste des noms de clusters d'un projet.

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.33.0", # 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

Prise en charge de l'appairage de VPC et du compte de service personnalisé

Ray sur Vertex AI est compatible avec Ray Client et l'API Ray Jobs (JobSubmissionClient) dans un réseau public pour l'agent de service par défaut et les comptes de service personnalisés.

La compatibilité de Ray sur Vertex AI avec l'appairage de réseaux VPC, lorsque le cluster Ray est créé avec le réseau VPC, est présentée dans le tableau suivant :

Appairage de VPC Agent de service par défaut Compte de service personnalisé
Client Ray (mode interactif) Oui Non
Ray JobSubmissionClient Oui Oui

VPC Service Controls (VPC-SC) nécessite des configurations supplémentaires. Pour en savoir plus, consultez la section Connectivité privée et publique.

Étape suivante