Um modelo do Vertex AI é implantado por padrão na própria instância de máquina virtual (VM). A Vertex AI oferece a capacidade de co-hospedar modelos na mesma VM, o que permite os seguintes benefícios:
- Compartilhamento de recursos entre várias implantações.
- Veiculação de modelos econômica.
- Melhoria na utilização de memória e recursos computacionais.
Este guia descreve como compartilhar recursos em várias implantações na Vertex AI.
Visão geral
A compatibilidade com co-hospedagem de modelos introduz o conceito de DeploymentResourcePool
, que agrupa implantações de modelo que compartilham recursos em uma única VM. Vários endpoints podem ser implantados na mesma VM em um DeploymentResourcePool
. Cada endpoint tem um ou mais modelos implantados. Os modelos implantados de um determinado endpoint podem ser agrupados no mesmo DeploymentResourcePool
ou em um diferente.
No exemplo a seguir, você tem quatro modelos e dois endpoints:
Model_A
, Model_B
e Model_C
são implantados em Endpoint_1
com o tráfego roteado para todos eles. Model_D
é implantado em Endpoint_2
, que recebe 100% do tráfego para esse endpoint.
Em vez de ter cada modelo atribuído a uma VM separada, é possível agrupá-los de uma das seguintes maneiras:
- Agrupe
Model_A
eModel_B
para compartilhar uma VM, o que faz com que eles façam parte deDeploymentResourcePool_X
. - Agrupe
Model_C
eModel_D
(atualmente não no mesmo endpoint) para compartilhar uma VM, o que faz com que eles façam parte doDeploymentResourcePool_Y
.
Pools de recursos de implantação diferentes não podem compartilhar uma VM.
Considerações
Não há limite máximo para o número de modelos que podem ser implantados em um único pool de recursos de implantação. Tudo depende da forma da VM, dos tamanhos do modelo e dos padrões de tráfego. A co-hospedagem funciona bem quando há muitos modelos implantados com tráfego esparso, de modo que a atribuição de uma máquina dedicada para cada modelo implantado não utilize recursos efetivamente.
É possível implantar modelos no mesmo pool de recursos de implantação simultaneamente. No entanto, há um limite de 20 solicitações de implantação simultâneas.
Um pool de recursos de implantação vazio não consome sua cota de recursos. Os recursos são provisionados em um pool de recursos de implantação quando o primeiro modelo é implantado e são liberados quando o último é removido.
Os modelos em um único pool de recursos de implantação não são isolados uns dos outros e podem competir por CPU e memória. O desempenho pode ser pior para um modelo caso outro esteja processando uma solicitação de inferência ao mesmo tempo.
Limitações
Existem as seguintes limitações ao implantar modelos com o compartilhamento de recursos ativado:
- Esse recurso só é compatível com as seguintes configurações:
- Implantações de modelos do TensorFlow que usam contêineres predefinidos para o TensorFlow
- Implantações de modelos do PyTorch que usam contêineres predefinidos para PyTorch
- Outros frameworks de modelo e contêineres personalizados não são compatíveis.
- Somente modelos treinados personalizados e modelos importados são compatíveis. Os modelos do AutoML não são compatíveis.
- Apenas modelos com a mesma imagem de contêiner (incluindo a versão do framework) dos contêineres predefinidos da Vertex AI para previsão do TensorFlow ou PyTorch podem ser implantados no mesmo pool de recursos de implantação.
- Não há suporte para a Vertex Explainable AI.
Implantar um modelo
Para implantar um modelo em um DeploymentResourcePool
, siga estas etapas:
- Crie um pool de recursos de implantação, se necessário.
- Crie um endpoint, se necessário.
- Recupere o ID do endpoint.
- Implante o modelo no endpoint no pool de recursos de implantação.
Criar um pool de recursos de implantação
Se você estiver implantando um modelo em um DeploymentResourcePool
atual, pule esta etapa:
Use CreateDeploymentResourcePool
para criar um pool de recursos.
Console do Cloud
No Console do Google Cloud, acesse a página Pools de recursos de implantação da Vertex AI.
Clique em Criar e preencha o formulário (mostrado abaixo).
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION_ID: a região em que você está usando a Vertex AI.
- PROJECT_ID: o ID do projeto.
-
MACHINE_TYPE: opcional. Os recursos de máquina usados para cada nó
desta implantação. A configuração padrão é
n1-standard-2
. Saiba mais sobre tipos de máquinas. - ACCELERATOR_TYPE: o tipo de acelerador a ser anexado à máquina. Opcional se ACCELERATOR_COUNT não for especificado ou for zero. Não recomendado para modelos AutoML ou modelos treinados personalizados que usem imagens que não sejam de GPU. Saiba mais.
- ACCELERATOR_COUNT: o número de aceleradores a serem usados por cada réplica. Opcional. Deve ser zero ou não especificado para modelos do AutoML ou modelos treinados personalizados que usam imagens que não sejam de GPU.
- MIN_REPLICA_COUNT: o número mínimo de nós para esta implantação. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga de previsão, até o número máximo de nós e nunca menos que esse número. O valor precisa ser maior ou igual a 1.
- MAX_REPLICA_COUNT: o número máximo de nós para esta implantação. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga de previsão, até esse número de nós e nunca menos que o número mínimo de nós.
-
DEPLOYMENT_RESOURCE_POOL_ID: um nome para a
DeploymentResourcePool
. O comprimento máximo é de 63 caracteres, e os válidos são /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
Método HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/deploymentResourcePools
Corpo JSON da solicitação:
{ "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 a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "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" } } }
Pesquise o status da operação até que
a resposta inclua "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
)
Substitua:
DEPLOYMENT_RESOURCE_POOL_ID
: um nome paraDeploymentResourcePool
. O comprimento máximo é de 63 caracteres, e os caracteres válidos são /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.MACHINE_TYPE
: opcional. Os recursos de máquina usados para cada nó desta implantação. O valor padrão én1-standard-2
. Saiba mais sobre tipos de máquinas.MIN_REPLICA_COUNT
: o número mínimo de nós para esta implantação. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga de previsão até o número máximo de nós, e nunca menos que esse número. O valor precisa ser maior ou igual a 1.MAX_REPLICA_COUNT
: o número máximo de nós para esta implantação. A contagem de nós pode ser aumentada ou reduzida conforme necessário pela carga de previsão até esse número de nós, e nunca menos que o número mínimo de nós.
Criar endpoint
Para criar um endpoint, consulte Implantar um modelo em um endpoint. Essa etapa é igual para a implantação de modelo único.
Recuperar ID do endpoint
Para recuperar o ID do endpoint, consulte Implantar um modelo em um endpoint. Essa etapa é igual para a implantação de modelo único.
Implantar o modelo em um pool de recursos de implantação
Depois de criar um DeploymentResourcePool
e um endpoint, tudo estará pronto para a implantação com o método da API DeployModel
. Esse processo é semelhante ao de uma implantação de modelo único. Se houver um DeploymentResourcePool
, especifique shared_resources
de DeployModel
com o nome do recurso do DeploymentResourcePool
que você está implantando.
Console do Cloud
No console do Google Cloud, acesse a página Registro de modelos da Vertex AI.
Encontre seu modelo e clique em Implantar no endpoint.
Em Configurações do modelo (mostradas abaixo), selecione Implantar em um pool de recursos de implantação compartilhado.
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION_ID: a região em que você está usando a Vertex AI.
- PROJECT: o ID do projeto.
- ENDPOINT_ID: o ID do endpoint.
- MODEL_ID: o ID do modelo a ser implantado.
-
DEPLOYED_MODEL_NAME: um nome para
DeployedModel
. Também é possível usar o nome de exibição doModel
para oDeployedModel
. -
DEPLOYMENT_RESOURCE_POOL_ID: um nome para a
DeploymentResourcePool
. O comprimento máximo é de 63 caracteres, e os válidos são /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/. - TRAFFIC_SPLIT_THIS_MODEL: a porcentagem do tráfego de previsão para esse endpoint que será roteada para o modelo que está sendo implantado com esta operação. O padrão é 100. A soma de todas as porcentagens de tráfego precisam totalizar 100. Saiba mais sobre as divisões de tráfego.
- DEPLOYED_MODEL_ID_N: opcional. Se outros modelos forem implantados nesse endpoint, será necessário atualizar as porcentagens de divisão de tráfego para que todas as porcentagens somem 100.
- TRAFFIC_SPLIT_MODEL_N: o valor da porcentagem da divisão de tráfego para a chave de ID do modelo implantado.
- PROJECT_NUMBER: o número do projeto gerado automaticamente
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel
Corpo JSON da solicitação:
{ "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 a solicitação, expanda uma destas opções:
Você receberá uma resposta JSON semelhante a esta:
{ "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)
Substitua MODEL_ID
pelo ID do modelo a ser implantado.
Repita a solicitação acima com modelos diferentes que tenham os mesmos recursos compartilhados para implantar vários modelos no mesmo pool de recursos de implantação.
Receber previsões
É possível enviar solicitações de previsão para um modelo em um DeploymentResourcePool
como você faria para qualquer outro modelo implantado na Vertex AI.