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

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

Vertex AI Pipelines usa la infraestructura de la interfaz de Private Service Connect subyacente para el entrenamiento con el fin de transferir los detalles de la conexión al trabajo de entrenamiento personalizado. Para obtener más información sobre las limitaciones y los precios de las interfaces de Private Service Connect con el entrenamiento personalizado, consulta Usar 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 empezar

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.

Crear una ejecución de flujo de trabajo con interfaces Private Service Connect

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

Crear una especificación de flujo de procesamiento

Sigue estas instrucciones para crear una especificación de canalización en 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 Crear una canalización.

  2. Usa el siguiente código de ejemplo 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)
    

    Sustituye COMPILED_PIPELINE_PATH por la ruta local al archivo YAML de la canalización compilada.

Crear la ejecución del flujo de procesamiento

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

Python

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la ejecución de la canalización.
  • LOCATION: la región en la que quieres crear la ejecución del flujo de procesamiento.
  • DISPLAY_NAME: nombre del trabajo de la canalización. La longitud máxima de un nombre visible es de 128 caracteres UTF-8.
  • PIPELINE_SPEC: la especificación de flujo de procesamiento que has creado en Crear una especificación de flujo de procesamiento.
  • OUTPUT_DIRECTORY: el URI del segmento de Cloud Storage para almacenar los artefactos de salida. Esta ruta es el directorio de salida raíz de la pipeline y se usa para generar las rutas de los artefactos de salida.
  • NETWORK_ATTACHMENT_NAME: nombre de la conexión de red de Compute Engine que se va a asociar al recurso PipelineJob. Para obtener el archivo adjunto de red, debes haber completado los pasos de la sección Antes de empezar. Para obtener más información sobre la conexión de red, consulta el artículo Configurar una red VPC, una subred y una conexión de red.
  • DNS_DOMAIN: el nombre de DNS de la zona de DNS de nube privada que has creado al configurar el emparejamiento de DNS privado.
  • TARGET_PROJECT: el proyecto que aloja la red de VPC.
  • TARGET_NETWORK: nombre de la red de VPC.

REST

Para crear una ejecución de un flujo de procesamiento, envía una solicitud POST mediante el método pipelineJobs.create.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el ID del proyecto en el que quieres crear la ejecución de la canalización.
  • LOCATION: la región en la que quieres crear la ejecución del flujo de procesamiento.
  • DISPLAY_NAME: nombre del trabajo de la canalización. La longitud máxima de un nombre visible es de 128 caracteres UTF-8.
  • PIPELINE_SPEC: la especificación de flujo de procesamiento que has creado en Crear una especificación de flujo de procesamiento.
  • OUTPUT_DIRECTORY: el URI del segmento de Cloud Storage para almacenar los artefactos de salida. Esta ruta es el directorio de salida raíz de la pipeline y se usa para generar las rutas de los artefactos de salida.
  • NETWORK_ATTACHMENT_NAME: nombre de la conexión de red de Compute Engine que se va a asociar al recurso PipelineJob. Para obtener el archivo adjunto de red, debes haber completado los pasos de la sección Antes de empezar. Para obtener más información sobre la conexión de red, consulta el artículo Configurar una red VPC, una subred y una conexión de red.
  • DNS_DOMAIN: el nombre de DNS de la zona de DNS de nube privada que has creado al configurar el emparejamiento de DNS privado.
  • TARGET_PROJECT: el proyecto que aloja la red de VPC.
  • TARGET_NETWORK: 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ía 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 usada 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"
      }
    ]
  }
}