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 modelo. O novo modelo reutiliza os recursos de computação do anterior.

Na solicitação de implantação gradual, a divisão de tráfego e os valores de dedicatedResources são os mesmos da implantação anterior. Depois que a implantação concluída, a divisão de tráfego é 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 com os mesmos valores da DeployedModel anterior por padrão. No entanto, é possível especificar novos valores para esses campos.

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

Se houver várias implantações rotativas segmentando os mesmos recursos de suporte, o DeployedModel com o revisionNumber mais alto será tratado como o estado final pretendido.

À medida que a implantação contínua avança, todas as réplicas atuais 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 expansão suficiente para criar mais réplicas.

Além disso, à medida que a implantação gradual avança, o tráfego do DeployedModel antigo é migrado gradualmente para o novo DeployedModel. O tráfego é balanceado por carga proporcionalmente ao número de réplicas prontas para veiculação de cada DeployedModel.

Se as novas réplicas da implantação gradual 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 gradual 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 do 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 apoio 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 do modelo que podem ser desativadas durante a implantação gradual.
  • MAX_SURGE_REPLICAS: o número de réplicas de modelo adicionais que podem ser criadas durante a implantação gradual. Se esse valor for 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 de porcentagem, 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 do modelo que podem ser desativadas durante a implantação gradual.
  • MAX_SURGE_PERCENTAGE: a porcentagem de réplicas de modelo adicionais que podem ser criadas durante a implantação gradual. Se esse valor for 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 gradual

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 para GetEndpoint, 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.

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ários implantações rotativas com o mesmo previousDeployedModel.
  • Não é possível criar implantações rotativas em um DeployedModel que não esteja totalmente implantado. Exceção: se previousDeployedModel for uma implantação gradual em andamento, uma nova implantação gradual poderá ser criada sobre ela. Isso permite reverter implantações que começam a falhar.
  • Os modelos anteriores não são removidos automaticamente após a conclusão de uma implantação gradual. Você pode remover a implantação do 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 graduais não são compatíveis com a co-hospedagem de modelos.
  • Não é possível usar implantações rotativas em modelos que exigem explicações on-line.