Usa la interfaz de Private Service Connect para el entrenamiento de Vertex AI

Se recomienda la interfaz de Private Service Connect para la conectividad privada, ya que reduce la posibilidad de agotamiento de IP y permite el intercambio de tráfico transitivo.

La interfaz de Private Service Connect es compatible con los trabajos personalizados y los recursos persistentes de Vertex AI.

Descripción general

La interfaz de Private Service Connect es compatible con los trabajos personalizados y los recursos persistentes de Vertex AI Training. Para usar la interfaz de Private Service Connect, debes configurar una red de VPC, una subred y un adjunto de red en tu proyecto de usuario. Consulta Cómo configurar una interfaz de Private Service Connect. El nombre del adjunto de red debe incluirse en la solicitud para crear un trabajo personalizado o un recurso persistente para habilitar la interfaz de Private Service Connect.

Conectividad de salida de Private Service Connect de Vertex AI a otras redes

Vertex AI integró las conectividades de red de salida compatibles con Private Service Connect (consulta Conexión a cargas de trabajo en otras redes) con los siguientes comportamientos de arquitectura.

Cómo acceder a las APIs de Google y a los servicios solo internos

Cuando Vertex AI envía tráfico a las APIs de Google, se resuelve de forma local dentro del entorno del productor y no usa la configuración ni el enrutamiento del Acceso privado a Google de tu red de VPC del consumidor.

Nota:

  • Requisito de identidad de la VPC: Debido a que la resolución local omite la ruta de la red de VPC del consumidor, el tráfico no lleva la identidad de tu red de VPC. Esto provocará que las solicitudes a los servicios internos de Google, como los servicios de Cloud Run configurados con entrada interna, fallen con un error 404 o 403.
  • Solución de extremo de Private Service Connect: Para acceder a estos servicios internos de forma privada, debes configurar un extremo de Private Service Connect para las APIs de Google en tu red de VPC.
  • Configuración de DNS: Debes asegurarte de que el dominio del servicio (p.ej., *.run.app) se resuelve en la dirección IP interna de tu extremo de Private Service Connect para garantizar que el tráfico permanezca en una ruta puramente privada.

Salida de Internet y Cloud NAT

De forma predeterminada, Vertex AI usa puertas de enlace de Internet administradas por Google para el tráfico saliente en lugar de las rutas de tu red de VPC. El tráfico de salida que usa una puerta de enlace de Cloud NAT del consumidor solo se utiliza cuando el proyecto forma parte de un perímetro de Control del servicio de VPC.

Este perímetro bloquea el acceso predeterminado a Internet y fuerza el tráfico a través de la interfaz de Private Service Connect y las reglas de enrutamiento de tu red de VPC. Si no usas los Controles del servicio de VPC, el tráfico de Internet saliente omitirá por completo tu red de VPC y la puerta de enlace de Cloud NAT.

Limitaciones

Para conocer las funciones y limitaciones de las interfaces de Private Service Connect, consulta Acerca del acceso a los servicios de Vertex AI a través de las interfaces de Private Service Connect.

Precios

Los precios de las interfaces de Private Service Connect se describen en la sección "Usa una interfaz de Private Service Connect para acceder a una red de VPC del productor o del consumidor" en la página Todos los precios de redes.

Antes de comenzar

Configura tus recursos para la interfaz de Private Service Connect en tu proyecto de usuario.

Crea un trabajo de entrenamiento sin servidores de Vertex AI con una interfaz de Private Service Connect

Puedes crear un trabajo de entrenamiento sin servidores con la interfaz de Private Service Connect a través del SDK de Vertex AI para Python o la API de REST.

Python

Para crear un trabajo de entrenamiento sin servidores con PSC-I usando el SDK de Vertex AI para Python, configura el trabajo con la definición de 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: . Puedes encontrar estos IDs en la página de bienvenida de la consola de Google Cloud .
  • location: Consulta la lista de ubicaciones disponibles.
  • bucket: Reemplaza bucket por el nombre de un bucket al que tienes acceso.
  • display_name: Es el nombre visible del recurso persistente.
  • machine_type: Especifica los recursos de procesamiento.
  • replica_count: La cantidad de réplicas de trabajadores que se deben usar para cada prueba.
  • service_attachment: Es el nombre del recurso de adjunto de servicio. Se propaga si Private Service Connect está habilitado.
  • image_uri: Es el URI de una imagen de contenedor de Docker con el código de entrenamiento. Obtén más información para crear una imagen de contenedor personalizada.
  • network_attachment: Es el nombre o la ruta de acceso completa del adjunto de red que creaste cuando configuraste tus recursos para Private Service Connect.
  • domain: Es el nombre de DNS de la zona privada de Cloud DNS 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 un trabajo de entrenamiento sin servidores, envía una solicitud POST con el método customJobs.create.

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

  • LOCATION: es la región en la que se ejecutará el contenedor o el paquete de Python.
  • PROJECT_ID: El ID del proyecto.
  • JOB_NAME: Un nombre visible para CustomJob.
  • REPLICA_COUNT: La cantidad de réplicas de trabajadores que se deben usar. En la mayoría de los casos, debes configurar esta opción como 1 para el primer grupo de trabajadores.
  • Si tu aplicación de entrenamiento se ejecuta en un contenedor personalizado, especifica lo siguiente:
    • IMAGE_URI: Es el URI de una imagen de contenedor de Docker con el código de entrenamiento. Obtén más información sobre cómo crear una imagen de contenedor personalizada.
    • NETWORK_ATTACHMENT: Es el nombre o la ruta de acceso completa del adjunto de red que creaste cuando configuraste la interfaz de Private Service Connect.
    • Si necesitas intercambio de tráfico de DNS privado, el campo dns_peering_configs es obligatorio. En esta lista, cada elemento contiene lo siguiente:
      • DOMAIN_SUFFIX: Es el nombre de DNS de la zona privada de Cloud DNS 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/customJobs

Cuerpo JSON de la solicitud:

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

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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación: