Usar uma implantação em massa para substituir um modelo implantado

Em uma implantação gradual, um modelo implantado é substituído por uma nova versão do mesmo. O novo modelo reutiliza os recursos de computação do anterior.

Na solicitação de implantação contínua, a divisão de tráfego e os valores de dedicatedResources são os mesmos da implantação anterior. Depois que a implantação for concluída, a divisão de tráfego será atualizada para mostrar que todo o tráfego do DeployedModel anterior foi migrado para a nova implantação.

Outros campos configuráveis em DeployedModel (como serviceAccount, disableContainerLogging e enableAccessLogging) são definidos como os mesmos valores da DeployedModel anterior por padrão. No entanto, você pode especificar novos valores para esses campos.

Quando um modelo é implantado usando uma implantação contínua, um novo DeployedModel é criado. O novo DeployedModel recebe um novo ID diferente do anterior. Ele também recebe um novo valor revisionNumber no campo rolloutOptions.

Se houver várias implantações contínuas com destino aos mesmos recursos de suporte, o DeployedModel com o revisionNumber mais alto será tratado como o estado final pretendido.

À medida que a implantação progressiva avança, todas as réplicas existentes do DeployedModel anterior são substituídas por réplicas do novo DeployedModel. Isso acontece rapidamente, e as réplicas são atualizadas sempre que a implantação tem réplicas disponíveis suficientes ou capacidade de pico suficiente para criar réplicas adicionais.

Além disso, à medida que a implantação contínua avança, o tráfego da DeployedModel antiga é migrado gradualmente para a nova DeployedModel. O tráfego é balanceado por carga de acordo com o número de réplicas prontas para uso de cada DeployedModel.

Se as novas réplicas do deployment em fases nunca ficarem prontas porque a rota de integridade retorna consistentemente um código de resposta diferente de 200, o tráfego não será enviado para essas réplicas não prontas. Nesse caso, a implantação em fases falha e as réplicas são revertidas para o DeployedModel anterior.

Iniciar uma implantação gradual

Para iniciar uma implantação gradual, inclua o campo rolloutOptions na solicitação de implantação de modelo, conforme mostrado no exemplo a seguir.

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.
  • ENDPOINT_ID: o ID do endpoint.
  • MODEL_ID: o ID do modelo a ser implantado.
  • PREVIOUS_DEPLOYED_MODEL: o ID DeployedModel de um modelo no mesmo endpoint. Isso especifica o DeployedModel cujos recursos de suporte serão reutilizados. Chame GetEndpoint para receber uma lista de modelos implantados em um endpoint com os IDs numéricos deles.
  • MAX_UNAVAILABLE_REPLICAS: o número de réplicas de modelo que podem ser retiradas durante a implantação contínua.
  • MAX_SURGE_REPLICAS: o número de réplicas de modelo adicionais que podem ser ativadas durante a implantação gradual. Se esse valor for definido como zero, apenas a capacidade atual será usada.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corpo JSON da solicitação:

{
  "deployedModel": {
    "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS",
      "maxSurgeReplicas": "MAX_SURGE_REPLICAS"
    }
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Se quiser, substitua maxSurgeReplicas e maxUnavailableReplicas, ou ambos, por valores percentuais, conforme mostrado no exemplo a seguir.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • MAX_UNAVAILABLE_PERCENTAGE: a porcentagem de réplicas de modelos que podem ser retiradas durante a implantação gradual.
  • MAX_SURGE_PERCENTAGE: a porcentagem de réplicas de modelos adicionais que podem ser ativadas durante a implantação gradual. Se esse valor for definido como zero, apenas a capacidade atual será usada.

Método HTTP e URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

Corpo JSON da solicitação:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "rolloutOptions": {
      "previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
      "maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE",
      "maxSurgePercentage": "MAX_SURGE_PERCENTAGE"
    }
  }
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá um código de status bem-sucedido (2xx) e uma resposta vazia.

Reverter uma implantação contínua

Para reverter uma implantação gradual, inicie uma nova implantação gradual do modelo anterior usando o ID DeployedModel da implantação gradual em andamento como previousDeployedModel.

Para receber o ID DeployedModel de uma implantação em andamento, defina o parâmetro allDeploymentStates=true na chamada como GetEndpoint, conforme mostrado no exemplo 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.
  • ENDPOINT_ID: o ID do endpoint.

Método HTTP e URL:

GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID",
  "displayName": "rolling-deployments-endpoint",
  "deployedModels": [
    {
      "id": "2718281828459045",
      "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID@1",
      "displayName": "rd-test-model",
      "createTime": "2024-09-11T21:37:48.522692Z",
      "dedicatedResources": {
        "machineSpec": {
          "machineType": "e2-standard-2"
        },
        "minReplicaCount": 5,
        "maxReplicaCount": 5
      },
      "modelVersionId": "1",
      "state": "BEING_DEPLOYED"
    }
  ],
  "etag": "AMEw9yMs3TdZMn8CUg-3DY3wS74bkIaTDQhqJ7-Ld_Zp7wgT8gsEfJlrCOyg67lr9dwn",
  "createTime": "2024-09-11T21:22:36.588538Z",
  "updateTime": "2024-09-11T21:27:28.563579Z",
  "dedicatedEndpointEnabled": true,
  "dedicatedEndpointDns": "ENDPOINT_ID.LOCATION_ID-PROJECT_ID.prediction.vertexai.goog"
}

Restrições e limitações

  • O DeployedModel anterior precisa estar no mesmo endpoint que o novo DeployedModel.
  • Não é possível criar várias implantações incrementais com o mesmo previousDeployedModel.
  • Não é possível criar implantações incrementais em uma DeployedModel que não esteja totalmente implantada. Exceção: se previousDeployedModel for uma implantação gradual em andamento, será possível criar uma nova implantação por cima dela. Isso permite reverter implantações que começam a falhar.
  • Os modelos anteriores não são desimplantados automaticamente depois que uma implantação em fases é concluída. É possível desinstalar o modelo manualmente.
  • Para implantações graduais em endpoints públicos compartilhados, o predictRoute e o healthRoute do novo modelo precisam ser iguais aos do modelo anterior.
  • As implantações progressivas não são compatíveis com a co-hospedagem de modelos.
  • As implantações graduais não podem ser usadas para modelos que exigem explicações on-line.