Desarrolla una aplicación en el clúster de Ray en Vertex AI

Puedes conectarte a un clúster de Ray en Vertex AI y desarrollar una aplicación con los siguientes métodos:

  • Conéctate al clúster de Ray en Vertex AI con la versión del SDK de Vertex AI para Python que incluye la funcionalidad del cliente de Ray. Usa esta opción si prefieres un entorno de desarrollo interactivo de Python.

    • Usa el SDK de Vertex AI para Python dentro del notebook de Colab Enterprise en la consola de Google Cloud.

    • Usa el SDK de Vertex AI para Python dentro de una sesión de Python, una shell o un notebook de Jupyter.

  • Escribe una secuencia de comandos de Python y envía la secuencia de comandos al clúster de Ray en Vertex AI mediante la API de trabajos de Ray. Usa esta opción si prefieres enviar trabajos de manera programática.

Antes de comenzar, asegúrate de leer la descripción general de Ray en Vertex AI y configurar todas las herramientas de requisitos que necesitas.

Desarrolla una aplicación con el SDK de Vertex AI para Python

Si deseas conectarse al clúster de Ray en Vertex AI mediante el SDK de Vertex AI para Python, el entorno de conexión debe estar en la misma red de VPC con intercambio de tráfico.

Console

  1. En la consola de Google Cloud, ve a la página Ray en Vertex AI.

    Ir a la página de Ray en Vertex AI

  2. En la fila del clúster que creaste, haz clic en Abrir en Colab Enterprise.

  3. Se abrirá el notebook de Colab Enterprise. Sigue las instrucciones sobre cómo usar el SDK de Vertex AI para Python a fin de conectarte al clúster de Ray en Vertex AI.

    • Si una pantalla de cuadro de diálogo te solicita que habilites las APIs, haz clic en Habilitar.

    • Haz clic en Conectar si te conectas al clúster por primera vez o Vuelve a conectarte si te vuelves a conectar al clúster. El notebook toma unos minutos en conectarse al entorno de ejecución.

    • Ejecuta la celda de código Comienza ahora a fin de importar el SDK de Vertex AI para Python y conectarte al clúster de Ray en Vertex AI.

Python

Desde un entorno interactivo de Python:

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

Aquí:

  • REGION: Es la región que especificaste para el clúster de Ray en Vertex AI.

  • PROJECT_ID es el ID del proyecto de Google Cloud. Puedes encontrar el ID del proyecto en la página de bienvenida de la consola de Google Cloud.

  • CLUSTER_NAME: Es el nombre de tu clúster de Ray en Vertex AI, especificado cuando creaste el clúster.

Deberías obtener un resultado similar al siguiente.

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

Puedes usar la URL Dashboard para acceder al panel de Ray desde un navegador. El URI tiene el formato https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. En el panel, se muestran los trabajos enviados, la cantidad de GPU o CPU, y el espacio en disco de cada máquina en el clúster.

Una vez que te conectes al clúster de Ray en Vertex AI, puedes desarrollar un programa de Ray de la misma manera que lo harías para un backend normal de OSS Ray.

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

Desarrolla una aplicación con la API de Ray Jobs

En esta sección, se describe cómo enviar un programa de Python al clúster de Ray en Vertex AI mediante la API de Ray Jobs.

Escribe una secuencia de comandos de Python

Desarrolla tu aplicación como una secuencia de comandos de Python en cualquier editor de texto. Por ejemplo, coloca la siguiente secuencia de comandos en un archivo 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)]))

Envía un trabajo de Ray con la API de Ray Jobs

Puedes enviar un trabajo de Ray con Python, la CLI de Ray Jobs o la dirección pública del panel de Ray.

Python: Nombre del recurso del clúster

Dentro de la red de intercambio de tráfico de VPC, envía un trabajo de Ray con un entorno de 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)

Aquí:

  • REGION: Es la región que especificaste para el clúster de Ray en Vertex AI.

  • PROJECT_ID: Es el número de tu proyecto de Google Cloud. Puedes encontrar el ID del proyecto en la página de bienvenida de la consola de Google Cloud.

  • CLUSTER_NAME: Es el nombre de tu clúster de Ray en Vertex AI, especificado cuando creaste el clúster.

Python: Panel de Ray

Se puede acceder a la dirección del panel de Ray desde fuera de la VPC, incluida la Internet pública. Ten en cuenta que se requiere vertex_ray para obtener la autenticación de forma automática.

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)

Aquí:

DASHBOARD_ADDRESS: Es la dirección del panel de Ray para tu clúster. Puedes encontrar la dirección del panel mediante el SDK de Vertex AI para Python.

CLI de Ray Jobs

Ten en cuenta que solo puedes usar los comandos de la CLI de Ray Jobs dentro de la red de VPC con intercambio de tráfico.

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

¿Qué sigue?