É 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 pelo Ray Client 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.
Conectar-se a um cluster do Ray pelo Ray Client
Para usar o Ray Client interativo, conecte-se ao cluster do Ray na Vertex AI. A rede do ambiente de conexão depende da configuração de rede do cluster. Não há restrições no ambiente de conexão, desde que o cluster tenha acesso público à Internet. Ou seja, nenhuma rede VPC foi especificada durante a criação do cluster. No entanto, se o cluster estiver em uma rede VPC particular com peering com a Vertex AI, o ambiente de conexão precisará estar na mesma rede VPC que o cluster.
A versão do Ray no lado do cliente precisa corresponder à versão do Ray do cluster.
pip install "google-cloud-aiplatform[ray]"
instala a versão 2.33 do Ray no lado do cliente por padrão. Se a versão do Ray do cluster for 2.9, use pip install ray==2.9.3
para que a versão do Ray do lado do cliente corresponda à versão do Ray do cluster.
Console
De acordo com as Práticas recomendadas do OSS Ray a configuração da contagem lógica de CPU como 0 no nó principal do Ray é aplicada para para evitar a execução de cargas de trabalho no nó principal.
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.
Clique em +CRIAR para criar um notebook.
Clique em para abrir o Ray no painel da Vertex AI.
A exibição dos clusters existentes é exibida.Selecione um cluster e clique em CONECTAR.
No notebook aberto, há um código que se conecta ao cluster escolhido.Outras ações (opcional): para abrir o Ray na página da lista de clusters da Vertex AI, clique em Gerenciar clusters no painel do Ray na Vertex AI.
- Selecione um cluster e clique no menu
Mais opções vão aparecer:
mais ações.
- Selecione um cluster e clique no menu
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
De acordo com as Práticas recomendadas do OSS Ray a configuração da contagem lógica de CPU como 0 no nó principal do Ray é aplicada para para evitar a execução de cargas de trabalho no nó principal.
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 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))
Em que:
LOCATION: 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. Acesse o console do Google Cloud para visualizar a lista de nomes de clusters de um projeto.
Você verá uma saída semelhante a esta:
Python version: 3.10.12 Ray version: 2.33 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 https://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
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", "setuptools<70.0.0", "xgboost", "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster ] } ) # 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. Acesse o console do Google Cloud para visualizar a lista de nomes de clusters de um projeto.
CLUSTER_RAY_VERSION: fixa a versão do Ray na mesma versão do cluster Por exemplo, 2.33.0.
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", "setuptools<70.0.0", "xgboost", "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster ] } ) 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
Depois de enviar um job de longa duração do Ray, se você quiser monitorar o status do job
usando client.get_job_status(job_id)
, talvez seja necessário instanciar novamente
JobSubmissionClient(client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME))
)
para atualizar o token de autenticação.
Compatibilidade com peering de VPC e conta de serviço personalizada
O Ray na Vertex AI tem compatibilidade com o Ray Client e à API Ray Jobs (JobSubmissionClient) em uma rede pública para agentes de serviço padrão e contas de serviço personalizadas.
Compatibilidade do Ray na Vertex AI com peering de VPC, quando o cluster do Ray é criado com a rede VPC, é mostrada nesta tabela:
Peering de VPC | Agente de serviço padrão | Conta de serviço personalizada |
---|---|---|
Ray Client (modo interativo) | Sim | Não |
JobSubmissionClient do Ray | Sim | Sim |
O VPC Service Controls (VPC-SC) exige mais configurações. Consulte Conectividade particular e pública para mais detalhes.
Usar o sistema de arquivos de rede (NFS) no código do Ray
Se você definir uma montagem NFS ao criar o cluster do Ray, poderá ler e gravar esses volumes NFS no código do aplicativo.
RayClient
Esta seção mostra como usar o Network File System (NFS) no seu código do Ray.
Inicializar o RayClient em um ambiente Python
import ray from google.cloud import aiplatform import vertex_ray aiplatform.init(project=PROJECT_ID, location=REGION) ray.init(address='vertex_ray://projects/{}/locations/us-central1/persistentResources/{}'.format(PROJECT_NUMBER, PERSISTENT_RESOURCE_ID))
Executar o script do job
import ray import logging import os import sys @ray.remote def main(): logging.info("list all files in mounted folder") return os.listdir("/mnt/nfs/test") print(''.join(ray.get(main.remote())))
É possível enviar um job do Ray usando Python, a CLI da Ray Jobs ou o endereço público do painel do Ray. Para mais informações, consulte Desenvolver um aplicativo no cluster do Ray na Vertex AI.