Desenvolver um aplicativo no cluster do Ray na Vertex AI

É possível se conectar a um cluster do Ray na Vertex AI e desenvolver um aplicativo usando os seguintes métodos:

  • Conecte-se ao cluster do Ray na Vertex AI usando a versão do SDK da Vertex AI para Python que inclui a funcionalidade do Ray Client. Use essa opção se preferir um ambiente de desenvolvimento em Python interativo.

    • Use o SDK da Vertex AI para Python dentro do notebook do Colab Enterprise no console do Google Cloud.

    • Use o SDK da Vertex AI para Python dentro de uma sessão do Python, do shell ou do notebook do Jupyter.

  • Escreva um script em Python e envie-o para o cluster do Ray na Vertex AI usando a API Ray Jobs. Use essa opção se preferir enviar jobs de maneira programática.

Before you begin, make sure to read the Ray on Vertex AI overview and set up all the prerequisite tools you need.

Desenvolver um aplicativo usando o SDK da Vertex AI para Python

Para se conectar ao cluster do Ray na Vertex AI usando o SDK da Vertex AI para Python, o ambiente de conexão precisa estar na mesma rede VPC com peering.

Console

  1. No console do Google Cloud, acesse a página do Ray na Vertex AI.

    Acessar a página do Ray na Vertex AI

  2. Na linha do cluster que você criou, clique em Abrir no Colab Enterprise.

  3. O bloco do Colab Enterprise abre. Siga as instruções sobre como usar o SDK da Vertex AI para Python para se conectar ao cluster do Ray na Vertex AI.

    • Se uma caixa de diálogo solicitar a ativação de APIs, clique em Ativar.

    • Clique em Conectar, caso esteja se conectando ao cluster pela primeira vez, ou em Reconectar, caso esteja se reconectando ao cluster. O notebook leva alguns minutos para se conectar ao ambiente de execução.

    • Execute a célula de código Introdução para importar o SDK da Vertex AI para Python e se conectar ao cluster do Ray na Vertex AI.

Python

Em um ambiente Python interativo:

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

Em que:

  • REGION: a região especificada para o cluster do Ray na Vertex AI.

  • PROJECT_ID pelo ID do projeto do Google Cloud. Encontre o ID do projeto na página de boas-vindas do Console do Google Cloud.

  • CLUSTER_NAME: o nome do cluster do Ray na Vertex AI, especificado ao criar o cluster.

Você verá uma saída semelhante a esta:

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

É possível usar o URL Dashboard para acessar o painel do Ray por um navegador. O URI está no formato http://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. O painel mostra os jobs enviados, o número de GPUs ou CPUs e o espaço em disco de cada máquina no cluster.

Depois de se conectar ao cluster do Ray na Vertex AI, é possível desenvolver um programa do Ray da mesma maneira que você faria por um back-end 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]

Desenvolver um aplicativo usando a API Ray Jobs

Nesta seção, descrevemos como enviar um programa em Python para o cluster do Ray na Vertex AI usando a API Ray Jobs.

Escrever um script em Python

Desenvolva seu aplicativo como um script em Python por qualquer editor de texto. Por exemplo, coloque o script a seguir em um arquivo 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)]))

Enviar um job do Ray usando a API Ray Jobs

É possível enviar um job do Ray usando Python, a CLI da Ray Jobs ou o endereço público do painel do Ray.

Python: nome do recurso do cluster

Na rede VPC com peering, envie um job do Ray usando um 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",
            "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)

Em que:

  • REGION: a região especificada para o cluster do Ray na Vertex AI.

  • PROJECT_ID: o número do seu projeto do Google Cloud. Encontre o ID do projeto na página de boas-vindas do Console do Google Cloud.

  • CLUSTER_NAME: o nome do cluster do Ray na Vertex AI, especificado ao criar o cluster.

Python: painel do Ray

O endereço do painel do Ray pode ser acessado por fora da VPC, inclusive pela Internet pública. Lembre-se que vertex_ray é necessário para receber a autenticação 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",
            "xgboost",
            "ray==2.9.3", # pin the Ray version to prevent it from being overwritten
           ]
  }
)
print(job_id)

Em que:

DASHBOARD_ADDRESS: o endereço do painel do Ray do seu cluster. É possível encontrar o endereço do painel usando o SDK da Vertex AI para Python.

CLI da Ray Jobs

Lembre-se que só é possível usar os comandos da CLI da Ray Jobs na rede VPC com peering.

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

A seguir