Usa reservas con la predicción

En este documento, se explica cómo usar las reservas de Compute Engine para obtener un alto nivel de seguridad de que tus trabajos de predicción tengan los recursos necesarios para ejecutarse.

Para asegurarte de que tus trabajos de predicción tengan los recursos de instancias de máquina virtual (VM) disponibles cuando los necesiten, usa las reservas de Compute Engine. Las reservas proporcionan un nivel de seguridad alto a fin de obtener capacidad para una o más VMs con la configuración de hardware especificada. Una reserva de una VM genera los costos de esa VM desde el momento en que la creas hasta que la borras. Sin embargo, mientras consumes esa VM, el costo total equivale al de una VM sin reserva. Para obtener más información, consulta Reservas de recursos zonales de Compute Engine.

Limitaciones y requisitos

Cuando uses las reservas de Compute Engine con Vertex AI, ten en cuenta las siguientes limitaciones y requisitos:

  • Vertex AI solo puede consumir reservas de VMs que tengan GPUs conectadas.
  • El uso de reservas de Compute Engine con Vertex AI solo se admite para el entrenamiento y la predicción personalizados.
  • Para consumir la reserva, las propiedades de la VM de la reserva deben coincidir exactamente con tu carga de trabajo de Vertex AI. Por ejemplo, si una reserva especifica un tipo de máquina a2-ultragpu-8g, la carga de trabajo de Vertex AI solo puede consumir la reserva si también usa un tipo de máquina a2-ultragpu-8g. Consulta Requisitos.
  • Para consumir una reserva compartida de VMs de GPU, debes consumirla con su proyecto propietario o un proyecto consumidor con el que se comparte la reserva. Consulta Cómo funcionan 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.
  • Los siguientes servicios y funciones no son compatibles cuando se usan reservas de Compute Engine con la predicción de Vertex AI:

    • 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 de GPU, 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 de GPU, puedes permitir 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, en el cuerpo de la solicitud, 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 de GPU, consulta Cómo modificar la política de uso compartido de una reserva.

Obtén predicciones con una reserva

Para crear una implementación de modelo que consuma una reserva de Compute Engine de VMs con GPU, usa 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: Es el proyecto en el que se creó la reserva. Para consumir una reserva compartida desde otro proyecto, debes compartirla con ese proyecto. Para obtener más información, consulta Modifica los proyectos de consumidor en una reserva compartida.
  • 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: Es el tipo de máquina que se usará para cada nodo en esta implementación. Su configuración predeterminada es n1-standard-2. Para obtener más información sobre los tipos de máquinas compatibles, consulta Cómo configurar recursos de procesamiento para la predicción.
  • ACCELERATOR_TYPE: Es el tipo de acelerador que se conectará a la máquina. Para obtener más información sobre el tipo de GPU que admite cada tipo de máquina, consulta GPU para cargas de trabajo de procesamiento.
  • ACCELERATOR_COUNT: Es la cantidad de aceleradores que se deben conectar a la máquina.
  • 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 que se 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.

HTTP method and 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",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT,
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/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.

Antes de ejecutar cualquiera de las siguientes secuencias de comandos, realiza los siguientes reemplazos:

  • DEPLOYED_NAME: Un nombre para el modelo implementado.
  • TRAFFIC_SPLIT: El valor de porcentaje de división del tráfico para la clave del ID del modelo implementado
  • MACHINE_TYPE: Es la máquina que se usa 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.
  • ACCELERATOR_TYPE: Es el tipo de acelerador que se conectará a la máquina. Para obtener más información sobre el tipo de GPU que admite cada tipo de máquina, consulta GPU para cargas de trabajo de procesamiento.
  • ACCELERATOR_COUNT: Es la cantidad de aceleradores que se deben conectar a la máquina.
  • PROJECT_ID: Es el proyecto en el que se creó la reserva. Para consumir una reserva compartida desde otro proyecto, debes compartirla con ese proyecto. Para obtener más información, consulta Modifica los proyectos de consumidor en una reserva compartida.
  • ZONE: Es la zona en la que se encuentra la 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.

Según el tipo de reserva que quieras consumir, realiza una de las siguientes acciones:

  • Para consumir 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 consumir una reserva que se consume automáticamente, 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?