Neste documento, explicamos como usar as reservas do Compute Engine para garantir que seus jobs de previsão tenham os recursos de máquina virtual (VM) necessários para serem executados.
As reservas são um recurso do Compute Engine. Elas ajudam a garantir que você tenha os recursos disponíveis para criar VMs com o mesmo hardware (memória e vCPUs) e recursos opcionais (CPUs, GPUs, TPUs e discos SSD locais) sempre que precisar.
Ao criar uma reserva, o Compute Engine verifica se a capacidade solicitada está disponível na zona especificada. Se sim, o Compute Engine reserva os recursos, cria a reserva e acontece o seguinte:
- Você pode consumir os recursos reservados imediatamente, e eles permanecem disponíveis até que você exclua a reserva.
- Você recebe cobranças pelos recursos reservados com a mesma taxa sob demanda das VMs em execução, incluindo descontos aplicáveis, até que a reserva seja excluída. Uma VM que consome uma reserva não gera cobranças separadas. Você só recebe cobranças pelos recursos fora da reserva, como discos ou endereços IP. Para saber mais, consulte preços das reservas.
Limitações e requisitos
Ao usar reservas do Compute Engine com a Vertex AI, considere as seguintes limitações e requisitos:
- A Vertex AI só pode usar reservas para CPUs (pré-lançamento), VMs com GPU ou TPUs (pré-lançamento).
- A Vertex AI não pode consumir reservas de VMs que têm discos SSD locais anexados manualmente.
- O uso de reservas do Compute Engine com a Vertex AI só é compatível com treinamento e inferência personalizados e com o Vertex AI Workbench (em prévia).
- As propriedades de VM de uma reserva precisam corresponder exatamente à sua carga de trabalho da Vertex AI
para consumir a reserva. Por exemplo, se uma reserva especificar um tipo de máquina
a2-ultragpu-8g
, a carga de trabalho da Vertex AI só poderá consumir a reserva se também usar um tipo de máquinaa2-ultragpu-8g
. Consulte Requisitos. - Para consumir uma reserva compartilhada de VMs de GPU ou TPUs, use o projeto proprietário ou um projeto consumidor com que a reserva é compartilhada. Consulte Como funcionam as reservas compartilhadas.
- Para oferecer suporte a atualizações regulares das implantações da Vertex AI, recomendamos aumentar a contagem de VMs em mais do que o número total de réplicas da seguinte maneira, de acordo com o tipo de reserva usado pelo
DeployedModel
:SPECIFIC_RESERVATION
: especifique pelo menos mais uma VM. Recomendamos 10% (mas pelo menos uma). Os modelos implantados usandoSPECIFIC_RESERVATION
consomem apenas VMs da reserva. A Vertex AI não pode fazer atualizações se não houver outra VM.ANY
:- Não é necessário ter mais VMs, porque os modelos implantados usando a reserva
ANY
usam VMs sob demanda se a capacidade da reserva não for suficiente. No entanto, sem VMs adicionais, sua reserva pode não ser totalmente utilizada após um upgrade. Por exemplo, suponha que você tenha uma reserva com 40 VMs e implante um modelo com 40 réplicas usando essa reserva. Na primeira implantação, todas as 40 VMs na reserva são usadas peloDeployedModel
. Após um upgrade, apenas 36 VMs são da reserva, e 4 VMs são on demand. - Se você quiser manter o uso dentro da reserva, recomendamos ter pelo menos uma
VM adicional para cada
DeployedModel
ouDeploymentResourcePool
que usa a reserva. Se o número total de VMs do mesmo tipo nas suas reservas deANY
for inferior a 50, recomendamos mais 10% (mas pelo menos uma). Se for maior que 50, recomendamos 25% a mais. Por exemplo:- Se você planeja implantar modelos usando 40 VMs A3, pode ter uma reserva A3 com 44 VMs ou duas reservas A3: a reserva X com 30 VMs e a reserva Y com 14 VMs (44 no total). O mesmo vale para outros números de reservas, desde que todas sejam compartilhadas com a Vertex AI e o número total de VMs nessas reservas seja de pelo menos 44.
- Se você planeja implantar modelos usando 100 VMs A3, o número total de VMs em todas as reservas A3 compartilhadas com a Vertex AI precisa ser de pelo menos 125.
- Se você planeja implantar dois modelos usando 10 VMs, o número total de VMs em todas as reservas A3 compartilhadas com a Vertex AI precisa ser de pelo menos 12. O número de VMs é menor que 50, mas o número de VMs extras é 2 (1 por
DeployedModel
).
- Para consumir uma reserva de
SPECIFIC_RESERVATION
, conceda o papel do IAM de Leitor do Compute à conta de serviço da Vertex AI no projeto que possui as reservas (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com
, em que PROJECT_NUMBER é o número do projeto que consome a reserva). -
Os seguintes serviços e recursos não são compatíveis ao usar reservas do Compute Engine com a inferência da Vertex AI:
- Conformidade com o Programa Federal de Gerenciamento de Risco e Autorização (FedRAMP)
Faturamento
Ao usar reservas do Compute Engine, você recebe cobranças pelos seguintes itens:
- Preços do Compute Engine para os recursos do Compute Engine, incluindo descontos por compromisso de uso (CUDs) aplicáveis. Consulte Preços do Compute Engine.
- Taxas de gerenciamento de previsão da Vertex AI, além do uso da infraestrutura. Consulte Preços da previsão.
Antes de começar
- Revise os requisitos e restrições para reservas.
- Revise os requisitos de cota e as restrições para reservas compartilhadas.
Permitir que uma reserva seja consumida
Antes de consumir uma reserva de CPUs, VMs GPU ou TPUs, defina a política de compartilhamento para permitir que a Vertex AI consuma a reserva. Para fazer isso, use um dos seguintes métodos:
Permitir o consumo ao criar uma reserva
Ao criar uma reserva de projeto único ou compartilhada de VMs de GPU, é possível permitir que a Vertex AI consuma a reserva da seguinte maneira:
- Se você estiver usando o console Google Cloud , na seção Serviços do Google Cloud, selecione Compartilhar reserva.
- Se você estiver usando a Google Cloud CLI, inclua a
flag
--reservation-sharing-policy
definida comoALLOW_ALL
. - Se você estiver usando a API REST, inclua no corpo da solicitação o
campo
serviceShareType
definido comoALLOW_ALL
.
Permitir o consumo em uma reserva atual
Só é possível modificar uma reserva criada automaticamente de VMs de GPU ou TPUs para uma reserva adiantada após o horário de início da reserva.
Para permitir que a Vertex AI consuma uma reserva, use um dos seguintes métodos:
Verificar se uma reserva foi consumida
Para verificar se a reserva está sendo consumida, consulte Verificar o consumo de reservas na documentação do Compute Engine.Receber inferências usando uma reserva
Para criar uma implantação de modelo que consuma uma reserva do Compute Engine de VMs com GPU, use a API REST ou o SDK da Vertex AI para Python.
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 projeto em que a reserva foi criada. Para consumir uma reserva compartilhada de outro projeto, você precisa compartilhar a reserva com esse projeto. Para mais informações, consulte Modificar os projetos do consumidor em uma reserva compartilhada.
- 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
. - MACHINE_TYPE: o tipo de máquina a ser usado para cada nó nesta implantação. A configuração padrão é
n1-standard-2
. Para mais informações sobre os tipos de máquinas compatíveis, consulte Configurar recursos de computação para previsão. - ACCELERATOR_TYPE: o tipo de acelerador a ser anexado à máquina. Para mais informações sobre o tipo de GPU compatível com cada tipo de máquina, consulte GPUs para cargas de trabalho de computação.
- ACCELERATOR_COUNT: o número de aceleradores a serem anexados à máquina.
- RESERVATION_AFFINITY_TYPE: precisa ser
ANY
,SPECIFIC_RESERVATION
ouNONE
.ANY
significa que as VMs do seucustomJob
podem consumir automaticamente qualquer reserva com propriedades correspondentes.SPECIFIC_RESERVATION
significa que as VMs do seucustomJob
só podem consumir uma reserva que as VMs segmentam especificamente pelo nome.NONE
significa que as VMs do seucustomJob
não podem consumir nenhuma reserva. EspecificarNONE
tem o mesmo efeito que omitir uma especificação de afinidade de reserva.
- ZONE: a zona em que a reserva foi criada.
- RESERVATION_NAME: o nome da sua reserva.
- 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 inferência, 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 inferência, até esse número de nós e nunca menos que o número mínimo de nós.
- 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_ID-aiplatform.googleapis.com/v1/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", "displayName": "DEPLOYED_MODEL_NAME", "dedicatedResources": { "machineSpec": { "machineType": "MACHINE_TYPE", "acceleratorType": "ACCELERATOR_TYPE", "acceleratorCount": ACCELERATOR_COUNT, "reservationAffinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "minReplicaCount": MIN_REPLICA_COUNT, "maxReplicaCount": MAX_REPLICA_COUNT }, }, "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_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata", "genericMetadata": { "createTime": "2020-10-19T17:53:16.502088Z", "updateTime": "2020-10-19T17:53:16.502088Z" } } }
Python
Para saber como instalar ou atualizar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API do SDK da Vertex AI para Python.
Antes de executar qualquer um dos scripts a seguir, faça as seguintes substituições:
- DEPLOYED_NAME: um nome para o modelo implantado.
- TRAFFIC_SPLIT: o valor da porcentagem da divisão de tráfego para a chave de ID do modelo implantado.
- MACHINE_TYPE: a máquina usada 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. Para mais informações sobre o tipo de GPU compatível com cada tipo de máquina, consulte GPUs para cargas de trabalho de computação.
- ACCELERATOR_COUNT: o número de aceleradores a serem anexados à máquina.
- PROJECT_ID: o projeto em que a reserva foi criada. Para consumir uma reserva compartilhada de outro projeto, é necessário compartilhar a reserva com esse projeto. Para mais informações, consulte Modificar os projetos do consumidor em uma reserva compartilhada.
- ZONE: a zona em que está localizada a VM.
- RESERVATION_NAME: o nome da sua reserva.
- 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 inferência, até o número máximo de nós e nunca menos que esse número. Esse 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 inferência, até esse número de nós e nunca menos que o número mínimo de nós.
Dependendo do tipo de reserva que você quer consumir, faça uma das seguintes ações:
- Para consumir uma reserva específica:
endpoint5.deploy( model = model, deployed_model_display_name=DEPLOYED_NAME, traffic_split=TRAFFIC_SPLIT, machine_type="MACHINE_TYPE", accelerator_type="ACCELERATOR_TYPE", accelerator_count=ACCELERATOR_COUNT, reservation_affinity_type="SPECIFIC_RESERVATION", reservation_affinity_key="compute.googleapis.com/reservation-name", reservation_affinity_values=["projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"], min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
- Para consumir uma reserva consumida automaticamente:
endpoint5.deploy( model = model, deployed_model_display_name=DEPLOYED_NAME, traffic_split=TRAFFIC_SPLIT, machine_type="MACHINE_TYPE", accelerator_type="ACCELERATOR_TYPE", accelerator_count=ACCELERATOR_COUNT, reservation_affinity_type="ANY_RESERVATION", min_replica_count=MIN_REPLICA_COUNT, max_replica_count=MAX_REPLICA_COUNT, sync=True )
A seguir
- Saiba mais sobre reservas de recursos zonais do Compute Engine.
- Saiba como usar reservas com o treinamento da Vertex AI.
- Saiba como conferir reservas.
- Saiba como monitorar o consumo das reservas.