Desenvolva uma aplicação no cluster do Ray no Vertex AI

Ligue-se a um cluster do Ray no Vertex AI e desenvolva uma aplicação através dos seguintes métodos:

  • Estabeleça ligação ao cluster do Ray no Vertex AI através do cliente do Ray usando a versão do SDK do Vertex AI para Python que inclui a funcionalidade do cliente do Ray. Use esta opção se preferir um ambiente de desenvolvimento Python interativo.

    • Use o SDK do Vertex AI para Python no bloco de notas do Colab Enterprise na Google Cloud consola.

    • Use o SDK Vertex AI para Python numa sessão, shell ou bloco de notas Jupyter do Python.

  • Escreva um script Python e envie-o para o cluster do Ray no Vertex AI através da API Ray Jobs. Se preferir enviar tarefas de forma programática, use esta opção.

Antes de começar, certifique-se de que lê a vista geral do Ray no Vertex AI e configura todas as ferramentas necessárias.

Ligue-se a um cluster do Ray através do cliente do Ray

Para usar o cliente Ray interativo, ligue-se ao seu cluster Ray no Vertex AI. A rede do ambiente de ligação depende da configuração de rede do cluster. Não se aplicam restrições ao ambiente de ligação, desde que o cluster tenha acesso público à Internet. Ou seja, não especificou uma rede de VPC durante a criação do cluster. No entanto, se o cluster estiver numa rede VPC privada que interage com a Vertex AI, o ambiente de ligação tem de estar na mesma rede VPC que o cluster.

A versão do Ray do lado do cliente tem de corresponder à versão do Ray do cluster. pip install "google-cloud-aiplatform[ray]" instala a versão 2.47 do Ray no lado do cliente por predefinição. Se a versão do Ray do cluster for anterior a 2.42, por exemplo, use pip install ray==2.42.0 para fazer corresponder a versão do Ray do lado do cliente à versão do Ray do cluster.

Consola

De acordo com a recomendação da prática recomendada da OSS Ray, a definição da contagem de CPUs lógicas para 0 no nó principal do Ray é aplicada para evitar a execução de qualquer carga de trabalho no nó principal.

  1. Na Google Cloud consola, aceda à página Ray no Vertex AI.

    Aceda à página do Ray no Vertex AI

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

  3. O bloco de notas do Colab Enterprise é aberto. Siga as instruções sobre como usar o SDK do Vertex AI para Python para estabelecer ligação ao cluster do Ray no Vertex AI.

    • Se for apresentado um ecrã de diálogo a pedir-lhe para ativar APIs, clique em Ativar.

    • Se estiver a estabelecer ligação ao cluster pela primeira vez, clique em Ligar. Se estiver a voltar a ligar-se ao cluster, toque em Voltar a ligar. O bloco de notas demora alguns minutos a estabelecer ligação ao tempo de execução.

    • Clique em +CRIAR para criar um novo bloco de notas.

    • Clique em Painel do Ray no Vertex AI para abrir o painel do Ray no Vertex AI.
      Os clusters existentes são apresentados.

    • Selecione um cluster e clique em ASSOCIAR.
      O código aparece no bloco de notas aberto que se liga ao cluster escolhido.

    • Outras ações (opcional): para abrir a página da lista de clusters do Ray on Vertex AI, clique em Gerir clusters no painel do Ray on Vertex AI.

      • Selecione um cluster e clique no menu mais ações.
        São apresentadas mais opções:
        mais opções
    • Execute a célula de código Introdução para importar o SDK do Vertex AI para Python e estabelecer ligação ao cluster do Ray no Vertex AI.

Python

De acordo com a recomendação da prática recomendada da OSS Ray, a definição da contagem de CPUs lógicas para 0 no nó principal do Ray é aplicada para evitar a execução de qualquer carga de trabalho no nó principal.

A partir de 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))

Onde:

  • LOCATION: a localização que especifica para o cluster do Ray no Vertex AI.

  • PROJECT_ID: o ID do seu Google Cloud projeto. Encontre o ID do projeto na página de boas-vindas da Google Cloud consola.

  • CLUSTER_NAME: o nome do cluster do Ray na Vertex AI, especificado quando cria o cluster. Aceda à Google Cloud consola para ver a lista de nomes de clusters de um projeto.

Recebe um resultado semelhante ao seguinte:

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

Use o URL Dashboard para aceder ao painel de controlo do Ray a partir de um navegador. O URI está no formato https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. O painel de controlo mostra as tarefas enviadas, o número de GPUs ou CPUs e o espaço em disco de cada máquina no cluster.

Depois de se ligar ao cluster do Ray na Vertex AI, desenvolva um programa do Ray da mesma forma que o faz para um back-end do Ray de OSS 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]

Desenvolva uma aplicação com a API Ray Jobs

Esta secção descreve como enviar um programa Python para o cluster do Ray no Vertex AI através da API Ray Jobs.

Escrever um script Python

Desenvolva a sua aplicação como um script Python em qualquer editor de texto. Por exemplo, coloque o seguinte script num ficheiro 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)]))

Envie uma tarefa do Ray através da API Ray Jobs

Envie uma tarefa do Ray através do Python, da CLI de tarefas do Ray ou do endereço público do painel de controlo do Ray.

Python: nome do recurso do cluster

Envie uma tarefa do Ray através de 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)

Onde:

  • REGION: a região que especifica para o cluster do Ray no Vertex AI.

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

  • CLUSTER_NAME: o nome do cluster do Ray no Vertex AI, especificado quando criou o cluster. Aceda à Google Cloud consola para ver a lista de nomes de clusters de um projeto.

  • CLUSTER_RAY_VERSION: fixe a versão do Ray à mesma versão do cluster. Por exemplo, 2.47.1.

Python – Painel de controlo do Ray

O endereço do painel de controlo do Ray é acessível a partir do exterior da VPC, incluindo a Internet pública. Tenha em atenção que o vertex_ray é necessário para obter 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)

Onde:

DASHBOARD_ADDRESS: o endereço do painel de controlo do Ray para o seu cluster. Encontre o endereço do painel de controlo através do SDK Vertex AI para Python.

CLI Ray Jobs

Use os comandos da CLI do Ray Jobs apenas na rede VPC com peering.

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

Depois de enviar uma tarefa Ray de execução prolongada, se quiser monitorizar o estado da tarefa com client.get_job_status(job_id), reponha JobSubmissionClient(client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME)) ) para atualizar o token de autenticação.

Apoio técnico para interligação de VPCs e conta de serviço personalizada

O Ray na Vertex AI suporta a API Ray Client e Ray Jobs (JobSubmissionClient) numa rede pública para o agente de serviço predefinido e contas de serviço personalizadas.

A tabela seguinte mostra o suporte do Ray na Vertex AI para o intercâmbio da VPC quando cria o cluster do Ray com a rede da VPC:

Intercâmbio de VPCs Agente de serviço predefinido Conta de serviço personalizada
Ray Client (modo interativo) Sim Não
Ray JobSubmissionClient Sim Sim

Os VPC Service Controls (VPC-SC) requerem configurações adicionais. Consulte o artigo Conetividade privada e pública para mais detalhes.

Use o sistema de arquivos de rede (NFS) no seu código Ray

Se definir uma montagem NFS quando criar o cluster Ray, leia e escreva nesses volumes NFS no código da aplicação.

RayClient

Esta secção mostra como usar o sistema de arquivos de rede (NFS) no seu código Ray.

  1. Inicialize o RayClient num 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))
  2. Executar script de tarefa

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

Envie uma tarefa do Ray através do Python, da CLI de tarefas do Ray ou do endereço público do painel de controlo do Ray. Para mais informações, consulte o artigo Desenvolva uma aplicação no cluster Ray na Vertex AI).

O que se segue?