Comparte recursos en implementaciones

Introducción

Un modelo de Vertex AI se implementa en su propia instancia de máquina virtual (VM) de forma predeterminada. Vertex AI ofrece la capacidad de alojar modelos en la misma VM, lo que permite los siguientes beneficios:

  • Uso compartido de recursos en varias implementaciones
  • Entrega de modelos rentable
  • Uso mejorado de memoria y recursos de procesamiento

En esta guía, se describe cómo compartir recursos en varias implementaciones en Vertex AI.

Descripción general

La compatibilidad con el alojamiento compartido de modelos incluye el concepto de una DeploymentResourcePool, que agrupa las implementaciones de modelos que comparten recursos dentro de una sola VM. Se pueden implementar varios extremos en la misma VM dentro de un DeploymentResourcePool. Cada extremo tiene uno o más modelos implementados. Los modelos implementados para un extremo determinado se pueden agrupar bajo el mismo DeploymentResourcePool o uno diferente.

En el siguiente ejemplo, tienes cuatro modelos y dos extremos:

Modelos de hosting compartido desde varios extremos

Model_A, Model_B y Model_C se implementan en Endpoint_1 con el tráfico enrutado hacia todos ellos. Model_D se implementa en Endpoint_2, que recibe el 100% del tráfico de ese extremo. En lugar de tener cada modelo asignado a una VM independiente, puedes agrupar los modelos de una de las siguientes maneras:

  • Agrupa Model_A y Model_B para compartir una VM, lo que hace que sean parte de DeploymentResourcePool_X.
  • Agrupa Model_C y Model_D (por el momento, no están en el mismo extremo) para compartir una VM, lo que hace que sean parte de DeploymentResourcePool_Y.

Los diferentes grupos de recursos de implementación no pueden compartir una VM.

Consideraciones

No hay un límite máximo para la cantidad de modelos que se pueden implementar en un solo grupo de recursos de implementación. Depende de la forma de la VM, los tamaños del modelo y los patrones de tráfico elegidos. El hosting compartido funciona bien cuando tienes muchos modelos implementados con tráfico disperso y asignar una máquina dedicada a cada modelo implementado no consume recursos de manera eficaz.

Puedes implementar modelos en el mismo grupo de recursos de implementación de forma simultánea. Sin embargo, hay un límite de 20 solicitudes de implementación simultáneas en un momento determinado.

Existe un aumento en el uso de CPU cuando se implementa un modelo. El aumento del uso de CPU puede provocar un aumento en la latencia del tráfico existente o puede activar el ajuste de escala automático. Para obtener la mejor experiencia, se recomienda evitar el tráfico alto para un grupo de recursos de implementación mientras se implementa un modelo nuevo en él.

El tráfico existente en un grupo de recursos de implementación no se ve afectado cuando anulas la implementación de un modelo en él. No se espera que se produzca un impacto en el uso de CPU ni en la latencia del tráfico existente mientras se anula la implementación de un modelo.

Un grupo de recursos de implementación vacío no consume tu cuota de recursos. Los recursos se aprovisionan en un grupo de recursos de implementación cuando se implementa el primer modelo y se lanza cuando se anula la implementación del último modelo.

Los modelos en un solo grupo de recursos de implementación no están aislados entre sí en términos de recursos como CPU y memoria. Si un modelo ocupa la mayoría de los recursos, se activará el ajuste de escala automático.

Limitaciones

Existen las siguientes limitaciones cuando se implementan modelos con el uso compartido de recursos habilitado:

Implementar un modelo

Para implementar un modelo en un DeploymentResourcePool, completa los siguientes pasos:

  1. Crea un grupo de recursos de implementación si es necesario.
  2. Crea un extremo si es necesario.
  3. Recupera el ID de extremo
  4. Implementa el modelo en el extremo en el grupo de recursos de implementación.

Crea un grupo de recursos de implementación

Si implementas un modelo en un DeploymentResourcePool existente, omite este paso:

Usa CreateDeploymentResourcePool para crear un grupo de recursos.

Consola de Cloud

  1. En la consola de Google Cloud, ve a la página Grupos de recursos de implementación de Vertex AI.

    Ir a Grupos de recursos de implementación

  2. Haz clic en Crear y completa el formulario (que se muestra a continuación).

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.
  • 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.
  • ACCELERATOR_TYPE: El tipo de acelerador que se adjuntará a la máquina. Es opcional si no se especifica ACCELERATOR_COUNT o es cero. No recomendado para modelos de AutoML ni modelos personalizados con capacitación personalizado que usan imágenes que no son de GPU. Más información.
  • ACCELERATOR_COUNT: La cantidad de aceleradores que usa cada réplica. Opcional. Debe ser cero o no especificado para los modelos de AutoML o los modelos de capacitación personalizados que usan imágenes que no son de GPU.
  • 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.
  • DEPLOYMENT_RESOURCE_POOL_ID: Es un nombre para tu DeploymentResourcePool. La longitud máxima es de 63 caracteres y los caracteres válidos son /^[az]([a-z0-9-]{0,61}[a-z0-9])?$/.

Método HTTP y URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/deploymentResourcePools

Cuerpo JSON de la solicitud:

{
  "deploymentResourcePool":{
    "dedicatedResources":{
      "machineSpec":{
        "machineType":"MACHINE_TYPE",
        "acceleratorType":"ACCELERATOR_TYPE",
        "acceleratorCount":"ACCELERATOR_COUNT"
      },
      "minReplicaCount":MIN_REPLICA_COUNT,
      "maxReplicaCount":MAX_REPLICA_COUNT
    }
  },
  "deploymentResourcePoolId":"DEPLOYMENT_RESOURCE_POOL_ID"
}

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_NUMBER/locations/LOCATION_ID/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateDeploymentResourcePoolOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-15T05:48:06.383592Z",
      "updateTime": "2022-06-15T05:48:06.383592Z"
    }
  }
}

Puedes sondear el estado de la operación hasta que la respuesta incluya "done": true.

Crear extremos

Sigue estas instrucciones para crear un extremo. Este paso es lo mismo que una implementación de un solo modelo.

Recupera un ID de extremo

Sigue estas instrucciones para recuperar el ID de extremo. Este paso es lo mismo que una implementación de un solo modelo.

Implementa un modelo en un grupo de recursos de implementación

Después de crear un DeploymentResourcePool y un extremo, estás listo para implementar con el método de API DeployModel. Este proceso es similar a una implementación de un solo modelo. Si hay un DeploymentResourcePool, especifica shared_resources de DeployModel con el nombre del recurso del DeploymentResourcePool que estás implementando.

Consola de Cloud

  1. En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.

    Ir al registro de modelos

  2. Busca tu modelo y haz clic en Implementar en el extremo.

  3. En Configuración del modelo (que se muestra a continuación), selecciona Implementar en un grupo de recursos de implementación compartida.

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: 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.
  • DEPLOYMENT_RESOURCE_POOL_ID: Es un nombre para tu DeploymentResourcePool. La longitud máxima es de 63 caracteres y los caracteres válidos son /^[az]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • 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-aiplatform.googleapis.com/v1beta1/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel

Cuerpo JSON de la solicitud:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "sharedResources":"projects/PROJECT/locations/us-central1/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID"
  },
  "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_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-19T17:53:16.502088Z",
      "updateTime": "2022-06-19T17:53:16.502088Z"
    }
  }
}

Repite la solicitud anterior con modelos diferentes que tengan los mismos recursos compartidos para implementar varios modelos en el mismo grupo de recursos de implementación.

Obtén predicciones

Puedes enviar solicitudes de predicción a un modelo en un DeploymentResourcePool como lo harías con cualquier otro modelo implementado en Vertex AI.