Este documento explica como usar as reservas do Compute Engine para ter um elevado nível de garantia de que as suas tarefas de inferência em lote têm os recursos de máquina virtual (VM) necessários para serem executadas.
As reservas são uma funcionalidade do Compute Engine. Ajudam a garantir que tem 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 deles.
Quando cria uma reserva, o Compute Engine verifica se a capacidade pedida está disponível na zona especificada. Se for o caso, o Compute Engine reserva os recursos, cria a reserva e acontece o seguinte:
- Pode consumir imediatamente os recursos reservados, e estes permanecem disponíveis até eliminar a reserva.
- Os recursos reservados são cobrados à mesma taxa a pedido que as VMs em execução, incluindo quaisquer descontos aplicáveis, até que a reserva seja eliminada. Uma VM que consuma uma reserva não incorre em custos separados. Só lhe é cobrado o custo dos recursos fora da reserva, como discos ou endereços IP. Para saber mais, consulte os preços das reservas.
Limitações e requisitos
Quando 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, VMs de GPU, ou TPUs (pré-visualização).
- O Vertex AI não pode consumir reservas de VMs que tenham discos SSD locais anexados manualmente.
- A utilização de reservas do Compute Engine com o Vertex AI só é suportada para preparação e inferência personalizadas e para o Vertex AI Workbench (pré-visualização).
- As propriedades da VM de uma reserva têm de corresponder exatamente à sua carga de trabalho do Vertex AI
para consumir a reserva. Por exemplo, se uma reserva especificar um tipo de máquina
a2-ultragpu-8g
, a carga de trabalho do Vertex AI só pode consumir a reserva se também usar um tipo de máquinaa2-ultragpu-8g
. Veja os requisitos. - Para consumir uma reserva partilhada de VMs com GPUs ou TPUs, tem de a consumir através do projeto proprietário ou de um projeto consumidor com o qual a reserva é partilhada. Veja Como funcionam as reservas partilhadas.
- Para consumir uma reserva
SPECIFIC_RESERVATION
, conceda a função de IAM Leitor de computação à conta de serviço do Vertex AI no projeto que detém 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 capacidades não são suportados quando usa reservas do Compute Engine com a inferência em lote do Vertex AI:
- Conformidade com o Federal Risk and Authorization Management Program (FedRAMP)
Faturação
Quando usa reservas do Compute Engine, é-lhe faturado o seguinte:
- Preços do Compute Engine para os recursos do Compute Engine, incluindo quaisquer descontos de fidelidade (DFs) aplicáveis. Consulte os preços do Compute Engine.
- Taxas de gestão da inferência em lote do Vertex AI, além da sua utilização de infraestrutura. Consulte os preços de previsão.
Antes de começar
- Reveja os requisitos e as restrições para reservas.
- Reveja os requisitos de quota e as restrições para reservas partilhadas.
Permitir que uma reserva seja consumida
Antes de consumir uma reserva de CPUs, VMs de GPU ou TPUs, tem de definir a respetiva política de partilha para permitir que o Vertex AI consuma a reserva. Para tal, use um dos seguintes métodos:
Permitir o consumo durante a criação de uma reserva
Quando cria uma reserva de projeto único ou uma reserva partilhada de VMs de GPU, pode permitir que o Vertex AI consuma a reserva da seguinte forma:
- Se estiver a usar a Google Cloud consola, na secção Serviços Google Cloud, selecione Partilhar reserva.
- Se estiver a usar a Google Cloud CLI, inclua a flag
--reservation-sharing-policy
definida comoALLOW_ALL
. - Se estiver a usar a API REST, no corpo do pedido, inclua o campo
serviceShareType
definido comoALLOW_ALL
.
Permitir o consumo numa reserva existente
Só pode modificar uma reserva criada automaticamente de VMs com GPU ou TPUs para uma reserva futura após a hora de início da reserva.
Para permitir que o Vertex AI consuma uma reserva existente, use um dos seguintes métodos:
Verifique se uma reserva é consumida
Para verificar se a reserva está a ser consumida, consulte o artigo Verifique o consumo de reservas na documentação do Compute Engine.Obtenha inferências em lote através de uma reserva
Para criar um pedido de inferência em lote que consuma uma reserva do Compute Engine de VMs de GPU, pode usar a API REST e escolher o Cloud Storage ou o BigQuery para a origem e o destino.
Cloud Storage
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
-
LOCATION_ID: a região onde o modelo é armazenado e a tarefa de previsão em lote é executada. Por exemplo,
us-central1
. -
PROJECT_ID: o projeto onde a reserva foi criada. Para consumir uma reserva partilhada de outro projeto, tem de partilhar a reserva com esse projeto. Para mais informações, consulte Modifique os projetos de consumidor numa reserva partilhada.
-
BATCH_JOB_NAME: um nome a apresentar para a tarefa de previsão em lote.
-
MODEL_ID: o ID do modelo a usar para fazer previsões.
-
INPUT_FORMAT: O formato dos dados de entrada:
jsonl
,csv
,tf-record
,tf-record-gzip
oufile-list
. -
INPUT_URI: O URI do Cloud Storage dos seus dados de entrada. Pode conter carateres universais.
-
OUTPUT_DIRECTORY: O URI do Cloud Storage de um diretório onde quer que o Vertex AI guarde a saída.
-
MACHINE_TYPE: os recursos da máquina a usar para esta tarefa de previsão em lote.
-
ACCELERATOR_TYPE: o tipo de acelerador a associar à máquina. Para mais informações sobre o tipo de GPU que cada tipo de máquina suporta, consulte GPUs para cargas de trabalho de computação.
ACCELERATOR_COUNT: o número de aceleradores a associar à máquina.
-
RESERVATION_AFFINITY_TYPE: tem de 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 por nome.NONE
significa que as VMs do seucustomJob
não podem consumir nenhuma reserva. A especificação deNONE
tem o mesmo efeito que omitir uma especificação de afinidade de reserva.
-
BATCH_SIZE: o número de instâncias a enviar em cada pedido de previsão; o valor predefinido é 64. Aumentar o tamanho do lote pode levar a um débito mais elevado, mas também pode causar limites de tempo limite de pedidos.
-
STARTING_REPLICA_COUNT: o número de nós para esta tarefa de previsão em lote.
Método HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON do pedido:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "INPUT_FORMAT", "gcsSource": { "uris": ["INPUT_URI"], }, }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY", }, }, "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" ] } }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "gcsSource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "gcsDestination": { "outputUriPrefix": "OUTPUT_DIRECTORY" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
BigQuery
Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
-
LOCATION_ID: a região onde o modelo é armazenado e a tarefa de previsão em lote é executada. Por exemplo,
us-central1
. -
PROJECT_ID: o projeto onde a reserva foi criada. Para consumir uma reserva partilhada de outro projeto, tem de partilhar a reserva com esse projeto. Para mais informações, consulte Modifique os projetos de consumidor numa reserva partilhada.
-
BATCH_JOB_NAME: um nome a apresentar para a tarefa de previsão em lote.
-
MODEL_ID: o ID do modelo a usar para fazer previsões.
-
INPUT_PROJECT_ID: o ID do projeto Google Cloud do qual quer obter os dados.
-
INPUT_DATASET_NAME: o nome do conjunto de dados do BigQuery a partir do qual quer obter os dados.
-
INPUT_TABLE_NAME: o nome da tabela do BigQuery a partir da qual quer obter os dados.
-
OUTPUT_PROJECT_ID: o ID do projeto onde quer guardar o resultado. Google Cloud
-
OUTPUT_DATASET_NAME: O nome do conjunto de dados do BigQuery de destino onde quer guardar o resultado.
-
OUTPUT_TABLE_NAME: o nome da tabela de destino do BigQuery onde quer guardar o resultado.
-
MACHINE_TYPE: os recursos da máquina a usar para esta tarefa de previsão em lote.
-
ACCELERATOR_TYPE: o tipo de acelerador a associar à máquina. Para mais informações sobre o tipo de GPU que cada tipo de máquina suporta, consulte GPUs para cargas de trabalho de computação.
ACCELERATOR_COUNT: o número de aceleradores a associar à máquina.
-
RESERVATION_AFFINITY_TYPE: tem de 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 por nome.NONE
significa que as VMs do seucustomJob
não podem consumir nenhuma reserva. A especificação deNONE
tem o mesmo efeito que omitir uma especificação de afinidade de reserva.
-
BATCH_SIZE: o número de instâncias a enviar em cada pedido de previsão; o valor predefinido é 64. Aumentar o tamanho do lote pode levar a um débito mais elevado, mas também pode causar limites de tempo limite de pedidos.
-
STARTING_REPLICA_COUNT: o número de nós para esta tarefa de previsão em lote.
Método HTTP e URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
Corpo JSON do pedido:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "bq://INPUT_PROJECT_ID.INPUT_DATASET_NAME.INPUT_TABLE_NAME" }, }, "outputConfig": { "predictionsFormat":"bigquery", "bigqueryDestination":{ "outputUri": "bq://OUTPUT_PROJECT_ID.OUTPUT_DATASET_NAME.OUTPUT_TABLE_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" ] } }, "startingReplicaCount": STARTING_REPLICA_COUNT }, "manualBatchTuningParameters": { "batch_size": BATCH_SIZE, } }
Para enviar o seu pedido, escolha uma destas opções:
curl
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
Guarde o corpo do pedido num ficheiro com o nome request.json
,
e execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
Deve receber uma resposta JSON semelhante à seguinte:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/batchPredictionJobs/BATCH_JOB_ID", "displayName": "BATCH_JOB_NAME 202005291958", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "jsonl", "bigquerySource": { "uris": [ "INPUT_URI" ] } }, "outputConfig": { "predictionsFormat": "jsonl", "bigqueryDestination": { "outputUri": "OUTPUT_URI" } }, "state": "JOB_STATE_PENDING", "createTime": "2020-05-30T02:58:44.341643Z", "updateTime": "2020-05-30T02:58:44.341643Z", }
Obtenha resultados da inferência em lote
Quando uma tarefa de inferência em lote está concluída, o resultado da inferência é armazenado no contentor do Cloud Storage ou na localização do BigQuery que especificou no seu pedido.
O que se segue?
- Saiba mais sobre as reservas de recursos zonais do Compute Engine.
- Saiba como usar reservas com a inferência online do Vertex AI.
- Saiba como usar reservas com o Vertex AI training.
- Saiba como ver reservas.
- Saiba como monitorizar o consumo de reservas.