Usa reservas con la predicción

Para asegurarte de que los recursos de VM estén disponibles cuando tus trabajos de Dataflow los necesiten, puedes usar las reservas de Compute Engine. Las reservas proporcionan un nivel de seguridad alto a fin de obtener capacidad para los recursos zonales de Compute Engine. Para obtener más información, consulta Reservas de recursos zonales de Compute Engine.

Descripción general

Tus trabajos de entrenamiento y predicción personalizados de Vertex AI pueden consumir reservas de Compute Engine. Tu reserva debe especificar un tipo de máquina A2 o A3. Si los recursos de esas reservas son aptos para descuentos por compromiso de uso (CUD), cuando tus VMs consuman esas reservas, obtendrás esos recursos a precios con descuento. Consulta CUDs para tus recursos reservados.

Limitaciones y requisitos

Ten en cuenta las siguientes limitaciones y requisitos cuando uses las reservas de Compute Engine con Vertex AI:

  • Vertex AI solo puede consumir reservas con las siguientes series de máquinas:

    • A2
    • A3
  • El uso de reservas de Compute Engine con Vertex AI solo se admite para el entrenamiento y la predicción personalizados.
  • Asegúrate de que haya suficiente cuota disponible para tus trabajos de Vertex AI. Consulta Requisitos de cuota adicionales para las reservas compartidas.
  • Para admitir actualizaciones periódicas de tus implementaciones de Vertex AI, te recomendamos que aumentes el recuento de VMs en al menos 1 VM adicional para cada implementación simultánea.
  • Asegúrate de que las restricciones de la política de tu organización permitan reservas compartidas. Consulta Permite y restringe la creación y la modificación de reservas compartidas para los proyectos.
  • Para usar la reserva, las propiedades de la instancia de VM de la reserva deben coincidir exactamente con tu carga de trabajo de Vertex AI. Por ejemplo, si una carga de trabajo de Vertex AI tiene un tipo de máquina a2-megagpu-16g, el tipo de máquina de la reserva debe coincidir. Consulta Requisitos.
  • Los siguientes servicios y funciones no son compatibles cuando se usan reservas de Compute Engine con la predicción de Vertex AI:

    • Claves de encriptación administradas por el cliente (CMEK)
    • Cumplimiento del Programa Federal de Administración de Autorizaciones y Riesgo (FedRAMP)

Facturación

Cuando usas las reservas de Compute Engine, se te factura lo siguiente:

  • Precios de Compute Engine para los recursos de Compute Engine, incluidos los descuentos por uso comprometido (CUD) aplicables. Consulta los precios de Compute Engine.
  • Tarifas de administración de predicciones de Vertex AI, además del uso de tu infraestructura. Consulta Precios de las predicciones.

Antes de comenzar

Permite que se consuma una reserva

Antes de consumir una reserva de VMs A2 o A3, debes configurar su política de uso compartido para permitir que Vertex AI consuma la reserva. Para ello, usa uno de los siguientes métodos:

Cómo permitir el consumo mientras se crea una reserva

Cuando creas una reserva de un solo proyecto o compartida de VMs A2 o A3, puedes especificar que Vertex AI consuma la reserva de la siguiente manera:

  • Si usas la consola de Google Cloud, en la sección Servicios de Google Cloud, selecciona Compartir reserva
  • Si usas Google Cloud CLI, incluye la marca --reservation-sharing-policy establecida en ALLOW_ALL.
  • Si usas la API de REST, incluye el campo serviceShareType configurado en ALLOW_ALL.

Cómo permitir el consumo en una reserva existente

Para permitir que Vertex AI consuma una reserva existente de VMs A2 o A3, consulta Cómo modificar la política de uso compartido de una reserva.

Obtén predicciones con una reserva

Para consumir una reserva de Compute Engine cuando implementas un modelo para obtener predicciones, puedes usar la API de REST o el SDK de Vertex AI para Python.

REST

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

  • LOCATION_ID: la región en la que usas Vertex AI.
  • PROJECT_ID: El ID del proyecto.
  • ENDPOINT_ID: Es el ID del extremo.
  • MODEL_ID: El ID del modelo que se implementará.
  • DEPLOYED_MODEL_NAME: Un nombre para DeployedModel También puedes usar el nombre comercial de Model para DeployedModel.
  • MACHINE_TYPE: Opcional Los recursos de máquina que se usan para cada nodo de esta implementación. Su configuración predeterminada es n1-standard-2. Obtén más información sobre los tipos de máquinas.
  • RESERVATION_AFFINITY_TYPE: debe ser ANY, SPECIFIC_RESERVATION o NONE.
    • ANY significa que las VMs de tu customJob pueden consumir automáticamente cualquier reserva con propiedades coincidentes.
    • SPECIFIC_RESERVATION significa que las VMs de tu customJob solo pueden consumir una reserva a la que las VMs se orienten de forma específica por nombre.
    • NONE significa que las VMs de customJob no pueden consumir ninguna reserva. Especificar NONE tiene el mismo efecto que omitir una especificación de afinidad de reserva.
  • RESERVATION_NAME: el nombre de tu reserva
  • MIN_REPLICA_COUNT: La cantidad mínima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir según lo requiera la carga de predicción, hasta la cantidad máxima de nodos y nunca menos que esta cantidad. Este valor debe ser mayor o igual que 1%
  • MAX_REPLICA_COUNT: La cantidad máxima de nodos para esta implementación. El recuento de nodos se puede aumentar o disminuir, según lo requiera la carga de predicción, hasta esta cantidad de nodos y nunca menos que la cantidad mínima de nodos.
  • TRAFFIC_SPLIT_THIS_MODEL: El porcentaje del tráfico de predicción a este extremo para enrutar al modelo que se implementa con esta operación. La configuración predeterminada es 100. Todos los porcentajes de tráfico deben sumar hasta 100. Obtén más información sobre las divisiones del tráfico.
  • DEPLOYED_MODEL_ID_N: Opcional Si se implementan otros modelos en este extremo, debes actualizar sus porcentajes de división del tráfico para que todos los porcentajes sumen hasta 100.
  • TRAFFIC_SPLIT_MODEL_N: El valor de porcentaje de división del tráfico para la clave del ID del modelo implementado
  • PROJECT_NUMBER: el número de proyecto de tu proyecto generado de forma automática.

Método HTTP y URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Cuerpo JSON de la solicitud:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/reservations/RESERVATION_NAME"
          ]
        }
      },
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

Para enviar tu solicitud, expande una de estas opciones:

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API del SDK de Vertex AI para Python.

Para usar una reserva específica, haz lo siguiente:

endpoint5.deploy(
    model = model,
    deployed_model_display_name=DEPLOYED_NAME,
    traffic_split=TRAFFIC_SPLIT,
    machine_type="MACHINE_TYPE",
    accelerator_type="ACCELERATOR_TYPE",
    accelerator_count=ACCELERATOR_COUNT,
    reservation_affinity_type="SPECIFIC_RESERVATION",
    reservation_affinity_key="compute.googleapis.com/reservation-name",
    reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"],
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    sync=True
)

Para usar cualquier reserva, haz lo siguiente:

endpoint5.deploy(
    model = model,
    deployed_model_display_name=DEPLOYED_NAME,
    traffic_split=TRAFFIC_SPLIT,
    machine_type="MACHINE_TYPE",
    accelerator_type="ACCELERATOR_TYPE",
    accelerator_count=ACCELERATOR_COUNT,
    reservation_affinity_type="ANY_RESERVATION",
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    sync=True
)

¿Qué sigue?