Criar um cluster do Ray na Vertex AI

Este documento fornece instruções para configurar um cluster do Ray na Vertex AI para atender a várias necessidades. Por exemplo, se você quiser criar sua própria imagem, consulte Imagem personalizada. Algumas empresas podem precisar usar redes particulares. Isso é abordado em Interface do Private Service Connect para Ray na Vertex AI. Outro caso de uso envolve o acesso a arquivos remotos como se fossem locais. Consulte Ray no sistema de arquivos de rede da Vertex AI.

Visão geral

Os tópicos abordados aqui envolvem:

Criar um cluster do Ray

É possível usar o console do Google Cloud ou o SDK da Vertex AI para Python para criar um cluster do Ray. Um cluster pode ter até 2.000 nós. Há um limite superior de 1.000 nós em um pool de workers. Não há limite para o número de pools de workers, mas ter um grande número de pools de workers, como 1.000 pools de workers com um nó cada, pode afetar negativamente o desempenho do cluster.

Antes de começar, leia a Visão geral do Ray na Vertex AI e configure todas as ferramentas necessárias como pré-requisito.

Depois de criado, um cluster Ray na Vertex AI pode levar de 10 a 20 minutos para ser iniciado.

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.

  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. Clique em Criar cluster para abrir o painel Criar cluster.

  3. Para cada etapa no painel Criar cluster, revise ou substitua as informações do cluster padrão. Clique em Continuar para concluir cada etapa:

    1. Em Nome e região, especifique um Nome e escolha um Local para o cluster.

    2. Em Configurações de computação, especifique a configuração do cluster do Ray no nó principal da Vertex AI, incluindo tipo de máquina, tipo e contagem do acelerador, tipo e tamanho de disco e contagem de réplicas. Também é possível adicionar um URI de imagem personalizada para especificar uma imagem de contêiner personalizada e adicionar dependências do Python não fornecidas pela imagem de contêiner padrão. Consulte Imagem personalizada.

      Em Opções avançadas, é possível fazer o seguinte:

      • Especifique sua própria chave de criptografia.
      • Especifique uma conta de serviço personalizada.
      • Desative a coleta de métricas se você não precisar monitorar as estatísticas de recursos da sua carga de trabalho durante o treinamento.
    3. Opcional: para definir um endpoint particular em vez de um público para o cluster, especifique uma rede VPC para usar com o Ray na Vertex AI. Para mais informações, consulte Conectividade particular e pública.

      Se você não tiver configurado uma conexão para sua rede VPC, clique em Configurar conexão. No painel Criar uma conexão de acesso a serviços particulares, conclua e clique em Continuar para cada uma das etapas a seguir:

      1. Ative a API Service Networking.

      2. Em Alocar um intervalo de IP, é possível selecionar, criar ou permitir que o Google aloque automaticamente um intervalo de IP.

      3. Em Criar uma conexão, revise as informações de Rede e Intervalo de IP alocado.

      4. Clique em Criar conexão.

  4. Clique em Criar.

SDK do Ray na Vertex AI

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, use o comando a seguir para criar o cluster do Ray na Vertex AI:

import ray
import vertex_ray
from google.cloud import aiplatform
from vertex_ray import Resources
from vertex_ray.util.resources import NfsMount

# Define a default CPU cluster, machine_type is n1-standard-16, 1 head node and 1 worker node
head_node_type = Resources()
worker_node_types = [Resources()]

# Or define a GPU cluster.
head_node_type = Resources(
  machine_type="n1-standard-16",
  node_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # Optional. When not specified, a prebuilt image is used.
)

worker_node_types = [Resources(
  machine_type="n1-standard-16",
  node_count=2,  # Must be >= 1
  accelerator_type="NVIDIA_TESLA_T4",
  accelerator_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # When not specified, a prebuilt image is used.
)]
# Optional. Create cluster with Network File System (NFS) setup.
nfs_mount = NfsMount(
    server="10.10.10.10",
    path="nfs_path",
    mount_point="nfs_mount_point",
)
aiplatform.init()
# Initialize Vertex AI to retrieve projects for downstream operations.
# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
  head_node_type=head_node_type,
  network=NETWORK, #Optional
  worker_node_types=worker_node_types,
  python_version="3.10",  # Optional
  ray_version="2.33",  # Optional
  cluster_name=CLUSTER_NAME, # Optional
  service_account=SERVICE_ACCOUNT,  # Optional
  enable_metrics_collection=True,  # Optional. Enable metrics collection for monitoring.
  labels=LABELS,  # Optional.
  nfs_mounts=[nfs_mount],  # Optional.

)

Em que:

  • CLUSTER_NAME: um nome para o cluster do Ray na Vertex AI que precisa ser exclusivo em todo o projeto.

  • NETWORK: (opcional) o nome completo da rede VPC, no formato projects/PROJECT_ID/global/networks/VPC_NAME. Para definir um endpoint particular em vez de um endpoint público para o cluster, especifique uma rede VPC para usar com o Ray na Vertex AI. Para mais informações, consulte Conectividade particular e pública.

  • VPC_NAME: (opcional) a VPC em que a VM está operando.

  • PROJECT_ID pelo ID do projeto do Google Cloud. Você encontra o ID do projeto na página de boas-vindas do console do Google Cloud.

  • SERVICE_ACCOUNT: (opcional) a conta de serviço para executar aplicativos do Ray no cluster. É preciso conceder papéis obrigatórios.

  • LABELS: (opcional) os rótulos com metadados definidos pelo usuário usados para organizar clusters do Ray. As chaves e os valores de rótulo não podem ter mais de 64 caracteres (pontos de código Unicode) e podem conter apenas letras minúsculas, caracteres numéricos, sublinhados e traços. Caracteres internacionais são permitidos. Consulte https://goo.gl/xmQnxf para mais informações e exemplos de rótulos.

Você verá a seguinte saída até que o status mude para RUNNING:

[Ray on Vertex AI]: Cluster State = State.PROVISIONING
Waiting for cluster provisioning; attempt 1; sleeping for 0:02:30 seconds
...
[Ray on Vertex AI]: Cluster State = State.RUNNING

Observações:

  • O primeiro nó é usado como o nó principal.

  • Os tipos de máquina da TPU não são compatíveis.

Gerenciamento do ciclo de vida

Durante o ciclo de vida de um cluster do Ray na Vertex AI, cada ação é associada a um estado. O status de faturamento e a opção de gerenciamento para cada estado estão resumidos na tabela abaixo. A documentação de referência oferece uma definição para cada um desses estados.

Ação Estado Faturado? Ação de exclusão disponível? Ação de cancelamento disponível?
O usuário está criando um cluster PROVISIONANDO Não Não Não
O usuário está aumentando ou diminuindo o escalonamento manualmente ATUALIZANDO Sim, de acordo com o tamanho em tempo real Sim Não
O cluster está em execução EM EXECUÇÃO Sim Sim Não se aplica. Você pode excluir
O cluster está aumentando ou reduzindo a escala automática ATUALIZANDO Sim, de acordo com o tamanho em tempo real Sim Não
O usuário está excluindo o cluster INTERROMPENDO Não Não Não aplicável: já está parando
O cluster entra no estado de erro ERRO Não Sim Não se aplica. Você pode excluir
Não relevante STATE_UNSPECIFIED Não Sim Não relevante

Imagem personalizada (opcional)

As imagens pré-criadas se alinham com a maioria dos casos de uso. Para criar sua própria imagem, recomendamos que você use as imagens pré-criadas Ray na Vertex como imagem de base. Consulte a documentação do Docker para saber como criar imagens a partir de uma imagem base.

Essas imagens de base incluem uma instalação do Python, Ubuntu e Ray. Elas também incluem dependências como:

  • python-json-logger
  • google-cloud-resource-manager
  • ca-certificates-java
  • libatlas-base-dev
  • liblapack-dev
  • g++, libio-all-perl
  • libyaml-0-2.

Conectividade privada e pública

Por padrão, o Ray na Vertex AI cria um endpoint público e seguro para desenvolvimento interativo com o Ray Client nos clusters do Ray na Vertex AI. É recomendável usar a conectividade pública para casos de uso temporários ou de desenvolvimento. Esse endpoint público é acessível pela Internet. Somente usuários autorizados que têm, no mínimo, permissões de papel do usuário da Vertex AI no projeto de usuário do cluster do Ray podem acessar o cluster.

Se você precisar de uma conexão particular com o cluster ou estiver usando o VPC Service Controls, o peering de VPC será compatível com clusters do Ray na Vertex AI. Clusters com um endpoint particular só são acessíveis a partir de um cliente dentro de uma rede VPC que faz peering com a Vertex AI.

Para configurar a conectividade particular com o peering de VPC para Ray na Vertex AI, selecione uma rede VPC ao criar o cluster. A rede VPC requer uma conexão de serviços particulares entre sua rede VPC e a Vertex AI. Se você estiver usando o Ray na Vertex AI no console, é possível configurar a conexão de acesso a serviços particulares ao criar o cluster.

Se você quiser usar o VPC Service Controls e o peering de VPC com clusters do Ray na Vertex AI, será necessário fazer uma configuração extra para usar o painel e o shell interativo do Ray. Siga as instruções em Shell interativo e painel do Ray com VPC-SC + peering de VPC para configurar o shell interativo com VPC-SC e peering de VPC no seu projeto de usuário.

Depois de criar o cluster do Ray na Vertex AI, conecte-se ao nó principal usando o SDK da Vertex AI para Python. O ambiente de conexão, como uma VM do Compute Engine ou uma instância do Vertex AI Workbench, precisa estar na rede VPC que faz peering com a Vertex AI. Uma conexão de serviços particulares tem um número limitado de endereços IP, o que pode resultar no esgotamento dos endereços IP. Portanto, é recomendável usar conexões particulares para clusters de longa duração.

Interface do Private Service Connect para Ray na Vertex AI

A saída da interface do Private Service Connect e a entrada da interface do Private Service Connect são compatíveis com clusters do Ray na Vertex AI.

Para usar a saída da interface do Private Service Connect, siga as instruções fornecidas abaixo. Se o VPC Service Controls não estiver ativado, os clusters com saída de interface do Private Service Connect vão usar o endpoint público seguro para entrada com o Ray Client.

Se o VPC Service Controls estiver ativado, a entrada da interface do Private Service Connect será usada por padrão com a saída da interface do Private Service Connect. Para se conectar ao Ray Client ou enviar trabalhos de um notebook para um cluster com entrada de interface do Private Service Connect, verifique se o notebook está na VPC e na sub-rede do projeto do usuário. Para mais detalhes sobre como configurar o VPC Service Controls, consulte VPC Service Controls com a Vertex AI.

Diagrama de ativação da interface do Private Service Connect

Ativar a interface do Private Service Connect

Siga o guia Como configurar seus recursos para configurar a interface do Private Service Connect. Depois de configurar seus recursos, você pode ativar a interface do Private Service Connect no cluster do Ray na Vertex AI.

Console

  1. Ao criar o cluster e depois de especificar Nome e região e Configurações de computação, a opção Rede vai aparecer.

    console-specify-network

  2. Configure um anexo de rede de uma destas formas:

    • Use o nome NETWORK_ATTACHMENT_NAME que você especificou ao configurar seus recursos para o Private Service Connect.
    • Crie um novo anexo de rede clicando no botão Criar anexo de rede que aparece no menu suspenso.

    console-create-new-network

  3. Clique em Criar anexo de rede.

  4. Na subtarefa que aparece, especifique um nome, uma rede e uma sub-rede para o novo anexo de rede.

    network-attachment

  5. Clique em Criar.

SDK do Ray na Vertex AI

O SDK do Ray na Vertex AI faz parte do SDK da Vertex AI para Python. Para saber como instalar ou atualizar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API SDK da Vertex AI para Python.

from google.cloud import aiplatform
import vertex_ray

# Initialization
aiplatform.init()

# Create a default cluster with network attachment configuration

psc_config = vertex_ray.PscIConfig(network_attachment=NETWORK_ATTACHMENT_NAME)
cluster_resource_name = vertex_ray.create_ray_cluster(
   psc_config=psc_config,
)

Em que:

  • NETWORK_ATTACHMENT_NAME: o nome especificado ao configurar seus recursos para o Private Service Connect no projeto do usuário.

Ray no sistema de arquivos de rede (NFS) da Vertex AI

Para disponibilizar arquivos remotos ao cluster, monte compartilhamentos do sistema de arquivos de rede (NFS). Seus jobs podem acessar arquivos remotos como se fossem locais, o que permite alta capacidade e baixa latência.

Configuração da VPC

Há duas opções para configurar a VPC:

  1. Crie um anexo de rede da interface do Private Service Connect. (Recomendado)
  2. Configurar o peering de rede VPC.

Configurar a instância do NFS

Para mais detalhes sobre como criar uma instância do Filestore, consulte Criar uma instância. Se você estiver usando o método PSC-I, não será necessário selecionar o modo de acesso a serviços particulares ao criar o Filestore.

Usar o sistema de arquivos de rede (NFS)

Para usar o sistema de arquivos de rede, é necessário especificar uma rede ou um anexo de rede (recomendado).

Console

  1. Na etapa "Rede" da página de criação, depois de especificar uma rede ou um anexo de rede. Para fazer isso, clique em Adicionar montagem NFS na seção "Sistema de arquivos de rede (NFS)" e especifique uma montagem NFS (servidor, caminho e ponto de montagem).

    Campo Descrição
    server O endereço IP do servidor NFS. Precisa ser um endereço privado na sua VPC.
    path O caminho de compartilhamento do NFS. Precisa ser um caminho absoluto que comece com /.
    mountPoint O ponto de montagem local. Precisa ser um nome de diretório UNIX válido. Por exemplo, se o ponto de montagem local for sourceData, especifique o caminho /mnt/nfs/ sourceData da instância de VM de treinamento.

    Para mais informações, consulte Onde especificar recursos de computação.

  2. Especifique um servidor, caminho e ponto de montagem. nfs-file-system

  3. Clique em Criar. Isso cria o cluster do Ray.

Shell interativo e painel do Ray com VPC-SC + peering de VPC

  1. Configure peered-dns-domains.

    {
      VPC_NAME=NETWORK_NAME
      REGION=LOCATION
      gcloud services peered-dns-domains create training-cloud \
      --network=$VPC_NAME \
      --dns-suffix=$REGION.aiplatform-training.cloud.google.com.
    
      # Verify
      gcloud beta services peered-dns-domains list --network $VPC_NAME;
    }
        
    • NETWORK_NAME: mudar para a rede com peering.

    • LOCATION: o local desejado (por exemplo, us-central1).

  2. Configure DNS managed zone.

    {
      PROJECT_ID=PROJECT_ID
      ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com
      DNS_NAME=aiplatform-training.cloud.google.com
      DESCRIPTION=aiplatform-training.cloud.google.com
    
      gcloud dns managed-zones create $ZONE_NAME  \
      --visibility=private  \
      --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME  \
      --dns-name=$DNS_NAME  \
      --description="Training $DESCRIPTION"
    }
        
    • PROJECT_ID: o ID do projeto. Esses IDs estão na página de boas-vindas do console do Google Cloud.

  3. Registro de transação DNS.

    {
      gcloud dns record-sets transaction start --zone=$ZONE_NAME
    
      gcloud dns record-sets transaction add \
      --name=$DNS_NAME. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction add \
      --name=*.$DNS_NAME. \
      --type=CNAME $DNS_NAME. \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction execute --zone=$ZONE_NAME
    }
        
  4. Envie um job de treinamento com o shell interativo + VPC-SC + peering de VPC ativado.

A seguir