Compartilhar recursos entre implantações

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:

Como co-hospedar modelos de vários 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 e Model_B para compartilhar uma VM, o que faz com que eles façam parte de DeploymentResourcePool_X.
  • Agrupe Model_C e Model_D (atualmente não no mesmo endpoint) para compartilhar uma VM, o que faz com que eles façam parte do DeploymentResourcePool_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:

Implantar um modelo

Para implantar um modelo em um DeploymentResourcePool, siga estas etapas:

  1. Crie um pool de recursos de implantação, se necessário.
  2. Crie um endpoint, se necessário.
  3. Recupere o ID do endpoint.
  4. 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

  1. No Console do Google Cloud, acesse a página Pools de recursos de implantação da Vertex AI.

    Acessar Pools de recursos de implantação

  2. Clique em Criar e preencha o formulário (mostrado abaixo).

    Criar um formulário de pool de recursos de implantação com a contagem mínima e máxima de nós definida como 1 e o escalonamento automático de nós por limite de CPU definido como 60

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 para DeploymentResourcePool. 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

  1. No console do Google Cloud, acesse a página Registro de modelos da Vertex AI.

    Acessar o Model Registry

  2. Encontre seu modelo e clique em Implantar no endpoint.

  3. Em Configurações do modelo (mostradas abaixo), selecione Implantar em um pool de recursos de implantação compartilhado.

    Formulário de configurações do modelo, com a divisão de tráfego definida como 100 e a opção Implantar em um pool de recursos de implantação compartilhado selecionada

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 do Model para o DeployedModel.
  • 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.