Compartilhar recursos entre implantações

Introdução

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-organizar 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 dentro de uma 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 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.

Há um aumento na utilização da CPU quando um modelo está sendo implantado. O aumento da utilização da CPU pode causar um aumento na latência do tráfego atual ou acionar o escalonamento automático. Para ter a melhor experiência, recomendamos evitar o alto tráfego em um pool de recursos de implantação ao implantar um novo modelo nele.

O tráfego atual em um pool de recursos de implantação não é afetado quando você cancela a implantação de um modelo dele. Nenhum impacto é esperado para a utilização da CPU ou a latência do tráfego atual durante a implantação de um modelo.

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 liberado quando o último é removido.

Os modelos em um único pool de recursos de implantação não são isolados uns dos outros em termos de recursos, como CPU e memória. Quando um modelo ocupa a maioria dos recursos, ele aciona o escalonamento automático.

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. Recuperar o ID do endpoint.
  4. Implantar 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).

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/v1beta1/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.v1beta1.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.

Criar endpoint

Siga estas instruções para criar um endpoint. Essa etapa é igual a uma implantação de modelo único.

Recuperar ID do endpoint

Siga estas instruções para recuperar o ID do endpoint. Essa etapa é igual a uma implantação de modelo único.

Implantar o modelo em um pool de recursos de implantação

Depois de criar um DeploymentResourcePool e um endpoint, você estará pronto para implantar usando 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.

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

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.