Usar a interface do Private Service Connect para o treinamento da Vertex AI

A interface do Private Service Connect é recomendada para conectividade privada, porque reduz a chance de esgotamento de IP e permite o peering transitivo.

A interface do Private Service Connect é compatível com jobs personalizados e recursos permanentes da Vertex AI.

Visão geral

A interface do Private Service Connect é compatível com jobs personalizados e recursos permanentes do Vertex AI Training. Para usar a interface do Private Service Connect, configure uma rede VPC, uma sub-rede e um anexo de rede no projeto do usuário. Consulte Configurar uma interface do Private Service Connect. O nome do anexo de rede precisa ser incluído na solicitação para criar um job personalizado ou um recurso persistente para ativar a interface do Private Service Connect.

Conectividade de saída do Private Service Connect da Vertex AI com outras redes

A Vertex AI integrou as conectividades de rede de saída compatíveis com o Private Service Connect (consulte Conexão com cargas de trabalho em outras redes) com os seguintes comportamentos de arquitetura.

Acessar APIs do Google e serviços somente internos

Quando a Vertex AI envia tráfego para as APIs do Google, ele é resolvido localmente no ambiente do produtor e não usa as configurações de Acesso privado do Google nem o roteamento da sua rede VPC de consumidor.

Observação:

  • Requisito de identidade da VPC: como a resolução local ignora o caminho da rede VPC do consumidor, o tráfego não carrega a identidade da sua rede VPC. Isso vai fazer com que as solicitações para serviços internos do Google, como serviços do Cloud Run configurados com entrada interna, falhem com um erro 404 ou 403.
  • Solução de endpoint do Private Service Connect: para acessar esses serviços internos de forma particular, configure um endpoint do Private Service Connect para APIs do Google na sua rede VPC.
  • Configuração de DNS: verifique se o domínio do serviço (por exemplo, *.run.app) é resolvido para o endereço IP interno do endpoint do Private Service Connect para garantir que o tráfego permaneça em um caminho puramente particular.

Saída da Internet e Cloud NAT

Por padrão, a Vertex AI usa gateways de Internet gerenciados pelo Google para o tráfego de saída em vez das rotas da sua rede VPC. A saída usando um gateway do Cloud NAT do consumidor só é utilizada quando o projeto faz parte de um perímetro do VPC Service Controls.

Esse perímetro bloqueia o acesso padrão à Internet, forçando o tráfego pela interface do Private Service Connect e pelas regras de roteamento da sua rede VPC. Se você não estiver usando o VPC Service Controls, o tráfego de saída da Internet vai ignorar completamente a rede VPC e o gateway do Cloud NAT.

Limitações

Para conferir recursos e limitações das interfaces do Private Service Connect, consulte Sobre o acesso aos serviços da Vertex AI usando interfaces do Private Service Connect.

Preços

Os preços das interfaces do Private Service Connect são descritos na seção "Usar uma interface do Private Service Connect para acessar uma rede VPC de produtor ou consumidor" na página Todos os preços de rede.

Antes de começar

Configure os recursos para a interface do Private Service Connect no projeto do usuário.

Criar um job de treinamento sem servidor da Vertex AI com uma interface do Private Service Connect

É possível criar um job de treinamento sem servidor com a interface do Private Service Connect usando o SDK da Vertex AI para Python ou a API REST.

Python

Para criar um job de treinamento sem servidor com PSC-I usando o SDK da Vertex AI para Python, configure o job usando a definição aiplatform_v1/services/job_service.

Python

from google.cloud import aiplatform


def create_custom_job_psci_sample(
    project: str,
    location: str,
    bucket: str,
    display_name: str,
    machine_type: str,
    replica_count: int,
    image_uri: str,
    network_attachment: str,
    domain: str,
    target_project: str,
    target_network: str,
):
    """Custom training job sample with PSC Interface Config."""
    aiplatform.init(project=project, location=location, staging_bucket=bucket)

    worker_pool_specs = [{
        "machine_spec": {
            "machine_type": machine_type,
        },
        "replica_count": replica_count,
        "container_spec": {
            "image_uri": image_uri,
            "command": [],
            "args": [],
        },
    }]
    psc_interface_config = {
        "network_attachment": network_attachment,
        "dns_peering_configs": [
            {
                "domain": domain,
                "target_project": target_project,
                "target_network": target_network,
            },
        ],
    }
    job = aiplatform.CustomJob(
        display_name=display_name,
        worker_pool_specs=worker_pool_specs,
    )

    job.run(psc_interface_config=psc_interface_config)

  • project: . Esses IDs estão na página de boas-vindas do console Google Cloud .
  • location: consulte a lista de locais disponíveis.
  • bucket: substitua bucket pelo nome de um bucket ao qual você tem acesso.
  • display_name: o nome de exibição do recurso permanente.
  • machine_type: especifique os recursos de computação.
  • replica_count: o número de réplicas de worker a serem usadas em cada teste.
  • service_attachment: o nome do recurso de anexo de serviço. Preenchido se o Private Service Connect estiver ativado.
  • image_uri: o URI de uma imagem de contêiner do Docker com o código de treinamento. Saiba como criar uma imagem de contêiner personalizada.
  • network_attachment: o nome ou caminho completo do anexo de rede que você criou ao configurar seus recursos para o Private Service Connect.
  • domain: o nome DNS da zona privada do Cloud DNS criada ao configurar o peering de DNS particular.
  • target_project: o projeto que hospeda a rede VPC.
  • target_network: o nome da rede VPC.

REST

Para criar um job de treinamento sem servidor, envie uma solicitação POST usando o método customJobs.create.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: a região em que o contêiner ou o pacote Python será executado.
  • PROJECT_ID: o ID do projeto.
  • JOB_NAME: um nome de exibição para CustomJob.
  • REPLICA_COUNT: o número de réplicas de worker a serem usadas. Na maioria dos casos, defina esse valor como 1 para o primeiro pool de workers.
  • Se o aplicativo de treinamento for executado em um contêiner personalizado, especifique o seguinte:
    • IMAGE_URI: o URI de uma imagem de contêiner do Docker com o código de treinamento. Saiba como criar uma imagem de contêiner personalizada.
    • NETWORK_ATTACHMENT: o nome ou caminho completo do anexo de rede que você criou ao configurar a interface do Private Service Connect.
    • Se você precisar de peering de DNS particular, o campo dns_peering_configs será obrigatório. Para essa lista, cada item contém:
      • DOMAIN_SUFFIX: o nome DNS da zona privada do Cloud DNS que você criou ao configurar o peering de DNS particular.
      • TARGET_PROJECT: o projeto que hospeda a rede VPC.
      • TARGET_NETWORK: o nome da rede VPC.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corpo JSON da solicitação:

"display_name": JOB_NAME,
"job_spec": {
    "worker_pool_specs": [
      {
        "machine_spec": {
          "machine_type": "n2-standard-4",
        },
        "replica_count": REPLICA_COUNT,
        "container_spec": {
          "image_uri": IMAGE_URI,
        },
      },
    ],
    "psc_interface_config": {
      "network_attachment": NETWORK_ATTACHMENT,
      "dns_peering_configs": [
         {
          "domain": DOMAIN_SUFFIX,
          "target_project": TARGET_PROJECT,
          "target_network": TARGET_NETWORK
         }
      ],
    },
    "enable_web_access": 1
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando abaixo:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

Você vai receber uma resposta JSON semelhante a esta: