Usar máquinas virtuales de Spot con la inferencia

Información general

Puedes reducir el coste de ejecutar tus trabajos de predicción usando máquinas virtuales de acceso puntual. Las VMs de aprovisionamiento esporádico son instancias de máquina virtual (VM) que representan el exceso de capacidad de Compute Engine. Las Spot VMs tienen descuentos significativos, pero Compute Engine puede detener o eliminar (interrumpir) de forma preventiva las Spot VMs para recuperar la capacidad en cualquier momento.

Para obtener más información, consulta Máquinas virtuales de acceso puntual.

Limitaciones y requisitos

Ten en cuenta las siguientes limitaciones y requisitos al usar máquinas virtuales de Spot con Vertex AI:

  • Todas las limitaciones de las VMs de Spot se aplican al usar VMs de Spot con Vertex AI.
  • Las VMs de Spot solo se pueden usar con Vertex AI para el entrenamiento y la inferencia personalizados.
  • No se pueden usar máquinas virtuales de acceso puntual con pods de TPU.
  • No se admite el envío de trabajos a través de la consola Google Cloud .

Facturación

Si tus cargas de trabajo son tolerantes a fallos y pueden soportar posibles interrupciones de las VMs, las VMs de acceso puntual pueden reducir significativamente tus costes de computación. Si algunas de tus máquinas virtuales se detienen durante el procesamiento, el trabajo se ralentizará, pero no se detendrá por completo. Las VMs de acceso puntual completan tus tareas de procesamiento por lotes sin añadir carga adicional a tus VMs y sin que tengas que pagar el precio completo de las VMs estándar adicionales. Consulta Gestión de la preferencia.

Cuando usas máquinas virtuales de acceso puntual, se te factura según la duración de la tarea y el tipo de máquina. No se te cobra por el tiempo que la tarea esté en una cola o se haya adelantado.

Gestión de interrupciones

Compute Engine puede reclamar las máquinas virtuales de acceso puntual en cualquier momento. Cuando se interrumpen las máquinas virtuales Spot, la tarea de predicción falla con un error STOCKOUT y Compute Engine intenta reiniciar la tarea hasta seis veces. Para saber cómo sacar el máximo partido a tus VMs de acceso puntual, consulta las prácticas recomendadas para VMs de acceso puntual.

Obtener inferencias mediante máquinas virtuales de Spot

Para usar VMs esporádicas al desplegar un modelo para obtener inferencias, puedes usar la API REST o el SDK de Vertex AI para Python.

REST

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

  • LOCATION_ID: la región en la que usas Vertex AI.
  • PROJECT_ID: tu ID de proyecto.
  • ENDPOINT_ID: ID del endpoint.
  • MODEL_ID: ID del modelo que se va a implementar.
  • DEPLOYED_MODEL_NAME: nombre del DeployedModel. También puedes usar el nombre visible de la Model para la DeployedModel.
  • MACHINE_TYPE: opcional. Los recursos de la máquina que se usan en cada nodo de esta implementación. Su ajuste predeterminado es n1-standard-2. Más información sobre los tipos de máquinas
  • ACCELERATOR_TYPE: opcional. Tipo de acelerador que se va a conectar a la máquina. Más información
  • ACCELERATOR_COUNT: opcional. Número de aceleradores que se deben usar en cada réplica.
  • MIN_REPLICA_COUNT: número mínimo de nodos de esta implementación. El número de nodos se puede aumentar o reducir según lo requiera la carga de inferencia, hasta el número máximo de nodos y nunca por debajo de este número. Este valor debe ser superior o igual a 1.
  • MAX_REPLICA_COUNT: número máximo de nodos de este despliegue. El número de nodos se puede aumentar o reducir según lo requiera la carga de inferencia, hasta este número de nodos y nunca por debajo del número mínimo de nodos.
  • TRAFFIC_SPLIT_THIS_MODEL: porcentaje del tráfico de predicción de este punto final que se va a dirigir al modelo que se está desplegando con esta operación. El valor predeterminado es 100. Todos los porcentajes de tráfico deben sumar 100. Más información sobre las divisiones de tráfico
  • DEPLOYED_MODEL_ID_N: opcional. Si se implementan otros modelos en este endpoint, debes actualizar los porcentajes de división del tráfico para que todos los porcentajes sumen 100.
  • TRAFFIC_SPLIT_MODEL_N: valor del porcentaje de división del tráfico de la clave del ID del modelo implementado.
  • PROJECT_NUMBER: el número de proyecto que se genera automáticamente.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{


"acceleratorCount": 1}, "spot": true, "minReplicaCount": 1, "maxReplicaCount": 1}}, "trafficSplit": {"0": 100}}' \
  "https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel"

  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "enableContainerLogging": true,
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT
      },
      "spot": true,
      "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, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/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

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta el artículo Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API del SDK de Vertex AI para Python.

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,
    min_replica_count=MIN_REPLICA_COUNT,
    max_replica_count=MAX_REPLICA_COUNT,
    spot=True,
    sync=True
)

Siguientes pasos