Comparte recursos en implementaciones

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 compartir alojamiento para 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 alojamiento 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 alojamiento 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.

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í y pueden competir por la CPU y la memoria. El rendimiento puede ser peor para un modelo si otro modelo está procesando una solicitud de inferencia al mismo tiempo.

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 de 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).

    Crea un formulario de grupo de recursos de implementación, con el recuento de nodos mínimo y máximo establecido en 1 y el ajuste de escala automático de nodos por umbral de CPU establecido en 60.

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. Obtén 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/v1/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.v1.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.

Python

# Create a deployment resource pool.
deployment_resource_pool = aiplatform.DeploymentResourcePool.create(
    deployment_resource_pool_id="DEPLOYMENT_RESOURCE_POOL_ID",  # User-specified ID
    machine_type="MACHINE_TYPE",  # Machine type
    min_replica_count=MIN_REPLICA_COUNT,  # Minimum number of replicas
    max_replica_count=MAX_REPLICA_COUNT,  # Maximum number of replicas
)

Reemplaza lo siguiente:

  • DEPLOYMENT_RESOURCE_POOL_ID: Es un nombre para tu DeploymentResourcePool. La longitud máxima es de 63 caracteres y los caracteres válidos son /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • MACHINE_TYPE: Opcional Los recursos de máquina que se usan para cada nodo de esta implementación. El valor predeterminado es n1-standard-2. Obtén más información sobre los tipos de máquinas.
  • 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.

Crear extremos

Para crear un extremo, consulta Implementa un modelo en un extremo. Este paso es el mismo que para una implementación de un solo modelo.

Recupera un ID de extremo

Para recuperar el ID de extremo, consulta Implementa un modelo en un extremo. Este paso es el mismo que para 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 compartido.

    Formulario de configuración del modelo, con la división del tráfico establecida en 100 y la opción Implementar en un grupo de recursos de implementación compartido seleccionada

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/v1/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.v1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-19T17:53:16.502088Z",
      "updateTime": "2022-06-19T17:53:16.502088Z"
    }
  }
}

Python

# Deploy model in a deployment resource pool.
model = aiplatform.Model("MODEL_ID")
model.deploy(deployment_resource_pool=deployment_resource_pool)

Reemplaza MODEL_ID por el ID del modelo que se implementará.

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.