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:
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
yModel_B
para compartir una VM, lo que hace que sean parte deDeploymentResourcePool_X
. - Agrupa
Model_C
yModel_D
(por el momento, no están en el mismo extremo) para compartir una VM, lo que hace que sean parte deDeploymentResourcePool_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:
- Esta función solo es compatible con las siguientes configuraciones:
- Implementaciones de modelos de TensorFlow que usan contenedores precompilados para TensorFlow
- Implementaciones de modelos de PyTorch que usan contenedores precompilados para PyTorch
- No se admiten otros frameworks de modelos ni contenedores personalizados.
- Solo se admiten modelos entrenados personalizados y modelos importados. Los modelos de AutoML no son compatibles.
- Solo los modelos con la misma imagen de contenedor (incluida la versión de framework) de los contenedores previamente compilados de Vertex AI para predicción para TensorFlow o PyTorch pueden implementarse en el mismo grupo de recursos de implementación.
- No se admite Vertex Explainable AI.
Implementar un modelo
Para implementar un modelo en un DeploymentResourcePool
, completa los siguientes pasos:
- Crea un grupo de recursos de implementación si es necesario.
- Crea un extremo si es necesario.
- Recupera el ID de extremo.
- 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
En la consola de Google Cloud, ve a la página de Grupos de recursos de implementación de Vertex AI.
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. 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 tuDeploymentResourcePool
. 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 esn1-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
En la consola de Google Cloud, ve a la página Model Registry de Vertex AI.
Busca tu modelo y haz clic en Implementar en el extremo.
En Configuración del modelo (que se muestra a continuación), selecciona Implementar en un grupo de recursos de implementación compartido.
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 deModel
paraDeployedModel
. -
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.