Configura la interfaz de Private Service Connect para una canalización

Puedes configurar la conectividad privada para la ejecución de tu canalización con una interfaz de Private Service Connect. Google recomienda usar Vertex AI Private Service Connect para la conectividad privada, ya que reduce las probabilidades de agotamiento de IP y admite el intercambio de tráfico transitivo.

Vertex AI Pipelines usa la infraestructura subyacente de la interfaz de Private Service Connect para el entrenamiento, de modo que se pasen los detalles de la conexión al trabajo de entrenamiento personalizado. Para obtener más información sobre las limitaciones y los precios del uso de interfaces de Private Service Connect con el entrenamiento personalizado, consulta Usa la interfaz de Private Service Connect para Vertex AI Training.

Limitaciones

Las interfaces de Private Service Connect no admiten direcciones IP externas.

Precios

Los precios de las interfaces de Private Service Connect se describen en la página Todos los precios de redes.

Antes de comenzar

Para usar una interfaz de Private Service Connect con Vertex AI Pipelines, primero debes configurar una interfaz de Private Service Connect para los recursos de Vertex AI.

Crea una ejecución de canalización con interfaces de Private Service Connect

Para crear una ejecución de canalización, primero debes crear una especificación de canalización. Una especificación de canalización es un objeto en memoria que se crea convirtiendo una definición de canalización compilada.

Crea una especificación de canalización

Sigue estas instrucciones para crear una especificación de canalización en la memoria que puedas usar para crear la ejecución de la canalización:

  1. Define una canalización y compílala en un archivo YAML. Para obtener más información sobre cómo definir y compilar una canalización, consulta Crea una canalización.

  2. Usa la siguiente muestra de código para convertir el archivo YAML de la canalización compilada en una especificación de canalización en memoria.

    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)
    

    Reemplaza COMPILED_PIPELINE_PATH por la ruta de acceso local a tu archivo YAML de la canalización compilada.

Crea la ejecución de la canalización

Usa los siguientes ejemplos para crear una ejecución de canalización con interfaces de Private Service Connect:

Python

Para crear una ejecución de canalización con interfaces de Private Service Connect usando el SDK de Vertex AI para Python, configura la ejecución con la definición de 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)

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto en el que deseas crear la ejecución de la canalización.
  • LOCATION: Es la región en la que deseas crear la ejecución de la canalización.
  • DISPLAY_NAME: Es el nombre del trabajo de canalización. La longitud máxima de un nombre comercial es de 128 caracteres UTF-8.
  • PIPELINE_SPEC: Es la especificación de la canalización que creaste en Crea una especificación de canalización.
  • OUTPUT_DIRECTORY: Es el URI del bucket de Cloud Storage para almacenar artefactos de salida. Esta ruta de acceso es el directorio raíz de salida de la canalización y se usa para generar las rutas de acceso de los artefactos de salida.
  • NETWORK_ATTACHMENT_NAME: Es el nombre de la conexión de red de Compute Engine que se adjuntará al recurso PipelineJob. Para obtener la vinculación de red, debes completar los pasos de la sección Antes de comenzar. Para obtener más información sobre el adjunto de red, consulta Configura una red de VPC, una subred y un adjunto de red.
  • DNS_DOMAIN: Es el nombre de DNS de la zona de DNS de Cloud privada que creaste cuando configuraste el intercambio de tráfico de DNS privado.
  • TARGET_PROJECT: Es el proyecto que aloja la red de VPC.
  • TARGET_NETWORK: el nombre de la red de VPC

REST

Para crear una ejecución de canalización, envía una solicitud POST con el método pipelineJobs.create.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el ID del proyecto en el que deseas crear la ejecución de la canalización.
  • LOCATION: Es la región en la que deseas crear la ejecución de la canalización.
  • DISPLAY_NAME: Es el nombre del trabajo de canalización. La longitud máxima de un nombre comercial es de 128 caracteres UTF-8.
  • PIPELINE_SPEC: Es la especificación de la canalización que creaste en Crea una especificación de canalización.
  • OUTPUT_DIRECTORY: Es el URI del bucket de Cloud Storage para almacenar artefactos de salida. Esta ruta de acceso es el directorio raíz de salida de la canalización y se usa para generar las rutas de acceso de los artefactos de salida.
  • NETWORK_ATTACHMENT_NAME: Es el nombre de la conexión de red de Compute Engine que se adjuntará al recurso PipelineJob. Para obtener la vinculación de red, debes completar los pasos de la sección Antes de comenzar. Para obtener más información sobre el adjunto de red, consulta Configura una red de VPC, una subred y un adjunto de red.
  • DNS_DOMAIN: Es el nombre de DNS de la zona de DNS de Cloud privada que creaste cuando configuraste el intercambio de tráfico de DNS privado.
  • TARGET_PROJECT: Es el proyecto que aloja la red de VPC.
  • TARGET_NETWORK: el nombre de la red de VPC

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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 tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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

Deberías ver un resultado similar al siguiente. PIPELINE_JOB_ID representa el ID de la ejecución de la canalización y SERVICE_ACCOUNT_NAME representa la cuenta de servicio que se usó para ejecutar la canalización.

{
  "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"
      }
    ]
  }
}