Configurar a interface do Private Service Connect para um pipeline

É possível configurar a conectividade privada para a execução do pipeline usando uma interface do Private Service Connect. O Google recomenda usar o Private Service Connect da Vertex AI para conectividade particular, já que ele reduz as chances de esgotamento de IP e oferece suporte ao peering transitivo.

O Vertex AI Pipelines usa a infraestrutura da interface do Private Service Connect para treinamento e transmite os detalhes da conexão ao job de treinamento personalizado. Para saber mais sobre as limitações e os preços do uso de interfaces do Private Service Connect com treinamento personalizado, consulte Usar a interface do Private Service Connect para o Vertex AI Training.

Limitações

As interfaces do Private Service Connect não aceitam endereços IP externos.

Preços

Os preços das interfaces do Private Service Connect são descritos na página Preços de toda a rede.

Antes de começar

Para usar uma interface do Private Service Connect com o Vertex AI Pipelines, primeiro configure uma interface do Private Service Connect para recursos da Vertex AI.

Criar uma execução de pipeline com interfaces do Private Service Connect

Para criar uma execução de pipeline, primeiro crie uma especificação de pipeline. Uma especificação de pipeline é um objeto na memória criado pela conversão de uma definição de pipeline compilado.

Criar uma especificação de pipeline

Siga estas instruções para criar uma especificação de pipeline na memória que pode ser usada para criar a execução do pipeline:

  1. Defina um pipeline e compile-o em um arquivo YAML. Para mais informações sobre como definir e compilar um pipeline, consulte Criar um pipeline.

  2. Use o exemplo de código a seguir para converter o arquivo YAML do pipeline compilado em uma especificação de pipeline na memória.

    import yaml
    with open("COMPILED_PIPELINE_PATH", "r") as stream:
      try:
        pipeline_spec = yaml.safe_load(stream)
        print(pipeline_spec)
      except yaml.YAMLError as exc:
        print(exc)
    

    Substitua COMPILED_PIPELINE_PATH pelo caminho local do arquivo YAML do pipeline compilado.

Criar a execução do pipeline

Use os exemplos a seguir para criar uma execução de pipeline usando interfaces do Private Service Connect:

Python

Para criar uma execução de pipeline com interfaces do Private Service Connect usando o SDK da Vertex AI para Python, configure a execução usando a definição aiplatform_v1/services/pipeline_service.

# Import aiplatform and the appropriate API version v1
from google.cloud import aiplatform, aiplatform_v1

# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project="PROJECT_ID", location="LOCATION")

# Create the API endpoint
client_options = {
"api_endpoint": f"LOCATION-aiplatform.googleapis.com"
}

# Initialize the PipelineServiceClient
client = aiplatform_v1.PipelineServiceClient(client_options=client_options)

PSCI_INTERFACE_CONFIG = {
    "network_attachment": "NETWORK_ATTACHMENT_NAME",
    "dns_peering_configs": [
      {
        "domain": "DNS_DOMAIN",
        "target_project": "TARGET_PROJECT",
        "target_network": "TARGET_NETWORK"
      }
    ]
}

# Construct the request
request = aiplatform_v1.CreatePipelineJobRequest(
parent=f"projects/PROJECT_ID/locations/LOCATION",
pipeline_job=aiplatform_v1.PipelineJob(
    display_name="DISPLAY_NAME",
    pipeline_spec=PIPELINE_SPEC,
    runtime_config=aiplatform_v1.PipelineJob.RuntimeConfig(
        gcs_output_directory="OUTPUT_DIRECTORY",
    ),
    psc_interface_config=aiplatform_v1.PscInterfaceConfig(
        PSCI_INTERFACE_CONFIG
    ),
)

# Make the API call
response = client.create_pipeline_job(request=request)

# Print the response
print(response)

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar a execução do pipeline.
  • LOCATION: a região em que você quer criar a execução do pipeline.
  • DISPLAY_NAME: o nome do job do pipeline. O comprimento máximo de um nome de exibição é de 128 caracteres UTF-8.
  • PIPELINE_SPEC: a especificação de pipeline criada em Criar uma especificação de pipeline.
  • OUTPUT_DIRECTORY: o URI do bucket do Cloud Storage para armazenar artefatos de saída. Esse caminho é o diretório raiz de saída do pipeline e é usado para gerar os caminhos dos artefatos de saída.
  • NETWORK_ATTACHMENT_NAME: o nome do anexo de rede do Compute Engine a ser anexado ao recurso PipelineJob. Para conseguir o anexo de rede, você precisa concluir as etapas na seção Antes de começar. Para mais informações sobre o anexo de rede, consulte Configurar uma rede VPC, uma sub-rede e um anexo de rede.
  • DNS_DOMAIN: o nome DNS da zona DNS de nuvem privada 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 uma execução de pipeline, envie uma solicitação POST usando o método pipelineJobs.create.

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

  • PROJECT_ID: o ID do projeto em que você quer criar a execução do pipeline.
  • LOCATION: a região em que você quer criar a execução do pipeline.
  • DISPLAY_NAME: o nome do job do pipeline. O comprimento máximo de um nome de exibição é de 128 caracteres UTF-8.
  • PIPELINE_SPEC: a especificação de pipeline criada em Criar uma especificação de pipeline.
  • OUTPUT_DIRECTORY: o URI do bucket do Cloud Storage para armazenar artefatos de saída. Esse caminho é o diretório raiz de saída do pipeline e é usado para gerar os caminhos dos artefatos de saída.
  • NETWORK_ATTACHMENT_NAME: o nome do anexo de rede do Compute Engine a ser anexado ao recurso PipelineJob. Para conseguir o anexo de rede, você precisa concluir as etapas na seção Antes de começar. Para mais informações sobre o anexo de rede, consulte Configurar uma rede VPC, uma sub-rede e um anexo de rede.
  • DNS_DOMAIN: o nome DNS da zona DNS de nuvem privada criada 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/pipelineJobs

Corpo JSON da solicitação:

{
  "display_name": "DISPLAY_NAME",
  "pipeline_spec": "PIPELINE_SPEC",
  "runtime_config": {
       "gcs_output_directory": "OUTPUT_DIRECTORY",
   },
   "psc_interface_config": {
      "network_attachment": "NETWORK_ATTACHMENT_NAME",
      "dns_peering_configs": [
      {
        "domain": "DNS_DOMAIN",
        "target_project": "TARGET_PROJECT",
        "target_network": "TARGET_NETWORK"
      }
    ]
  }
}

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 a seguir:

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/pipelineJobs"

PowerShell

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

$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/pipelineJobs" | Select-Object -Expand Content

Será exibido um código semelhante a este. PIPELINE_JOB_ID representa o ID da execução do pipeline, e SERVICE_ACCOUNT_NAME representa a conta de serviço usada para executar o pipeline.

{
  "name": "projects/PROJECT_ID/locations/LOCATION/pipelineJobs/PIPELINE_JOB_ID",
  "displayName": "DISPLAY_NAME",
  "createTime": "20xx-01-01T00:00:00.000000Z",
  "updateTime": "20xx-01-01T00:00:00.000000Z",
  "pipelineSpec": PIPELINE_SPEC,
  "state": "PIPELINE_STATE_PENDING",
  "labels": {
    "vertex-ai-pipelines-run-billing-id": "VERTEX_AI_PIPELINES_RUN_BILLING_ID"
  },
  "runtimeConfig": {
    "gcsOutputDirectory": "OUTPUT_DIRECTORY"
  },
  "serviceAccount": "SERVICE_ACCOUNT_NAME"
  "pscInterfaceConfig": {
    "networkAttachment": "NETWORK_ATTACHMENT_NAME",
    "dnsPeeringConfigs": [
      {
        "domain": "DNS_DOMAIN",
        "targetProject": "TARGET_PROJECT",
        "targetNetwork": "TARGET_NETWORK"
      }
    ]
  }
}