É 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.
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
No console do Google Cloud, acesse a página do Ray na Vertex AI.
Na linha do cluster que você criou, clique em Abrir no Colab Enterprise.
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