Este documento explica como usar as reservas do Compute Engine para garantir que seus jobs de inferência em lote 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. Em caso afirmativo, o Compute Engine reserva os recursos, cria a reserva e o seguinte acontece:
- Você pode consumir imediatamente os recursos reservados, e eles permanecem disponíveis até que você exclua a reserva.
- Você recebe cobranças pelos recursos reservados com a mesma taxa sob demanda que as 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 as 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 (visualização).
- 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 o treinamento sem servidor, a inferência e o Vertex AI Workbench (visualização).
- As propriedades da VM de uma reserva precisam corresponder exatamente à 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, você precisa consumi-la usando o projeto proprietário ou um projeto de consumidor com que a reserva é compartilhada. Consulte Como as reservas compartilhadas funcionam.
- Para consumir uma reserva
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 em lote da Vertex AI:
- Conformidade com o Programa Federal de Gerenciamento de Risco e Autorização (FedRAMP, na sigla em inglês)
Faturamento
Ao usar as 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 uso contínuo (CUDs, na sigla em inglês) aplicáveis. Consulte Preços do Compute Engine.
- Taxas de gerenciamento de inferência em lote da Vertex AI, além do seu 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 restrições para reservas compartilhadas.
Permitir que uma reserva seja consumida
Antes de consumir uma reserva de CPUs, VMs de GPU ou TPUs, defina a política de compartilhamento para permitir que a Vertex AI consuma a reserva. Para fazer isso, use um destes 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 Google Cloud console, na seção Serviços do Google Cloud, selecione Compartilhar reserva.
- Se você estiver usando a Google Cloud CLI, inclua a
--reservation-sharing-policyflag definida comoALLOW_ALL. - Se você estiver usando a API REST, no corpo da solicitação, inclua o
serviceShareTypecampo definido comoALLOW_ALL.
Permitir o consumo de 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 atual, use um destes métodos:
Verificar se uma reserva é consumida
Para verificar se a reserva está sendo consumida, consulte Verificar o consumo de reservas na documentação do Compute Engine.Receber inferências em lote usando uma reserva
Para criar uma solicitação de inferência em lote que consome uma reserva de VMs de GPU do Compute Engine, use a API REST e escolha o Cloud Storage ou o BigQuery como origem e destino.
Cloud Storage
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
-
LOCATION_ID: a região em que o modelo está armazenado e o job de previsão em lote é executado. Por exemplo,
us-central1. -
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.
-
BATCH_JOB_NAME: um nome de exibição para o job de previsão em lote.
-
MODEL_ID: o ID do modelo a ser usado 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 dados de entrada. Pode conter caracteres curinga.
-
OUTPUT_DIRECTORY: o URI do Cloud Storage de um diretório em que você quer que a Vertex AI salve a saída.
-
MACHINE_TYPE: os recursos de máquina a serem usados neste job de previsão em lote.
-
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.ANYsignifica que as VMs docustomJobpodem consumir automaticamente consumir qualquer reserva com propriedades correspondentes.SPECIFIC_RESERVATIONsignifica que as VMs docustomJobsó podem consumir uma reserva que as VMs segmentam especificamente por nome.NONEsignifica que as VMs docustomJobnão podem consumir nenhuma reserva. EspecificarNONEtem o mesmo efeito que omitir uma especificação de afinidade de reserva.
-
BATCH_SIZE: o número de instâncias a serem enviadas em cada solicitação de previsão . O padrão é 64. Aumentar o tamanho do lote pode levar a maior capacidade de processamento, mas também pode causar tempos limite de solicitação.
-
STARTING_REPLICA_COUNT: o número de nós deste job 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 da solicitação:
{
"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 a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
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
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
$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
Você receberá uma resposta JSON semelhante a esta:
{
"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 os dados da solicitação abaixo, faça as substituições a seguir:
-
LOCATION_ID: a região em que o modelo está armazenado e o job de previsão em lote é executado. Por exemplo,
us-central1. -
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.
-
BATCH_JOB_NAME: um nome de exibição para o job de previsão em lote.
-
MODEL_ID: o ID do modelo a ser usado para fazer previsões.
-
INPUT_PROJECT_ID: o ID do Google Cloud projeto de que você quer receber os dados.
-
INPUT_DATASET_NAME: o nome do conjunto de dados do BigQuery de que você quer receber os dados.
-
INPUT_TABLE_NAME: o nome da tabela do BigQuery de que você quer receber os dados.
-
OUTPUT_PROJECT_ID: o ID do projeto em que você quer salvar a saída. Google Cloud
-
OUTPUT_DATASET_NAME: o nome do conjunto de dados de destino do BigQuery em que você quer salvar a saída.
-
OUTPUT_TABLE_NAME: o nome da tabela de destino do BigQuery em que você quer salvar a saída.
-
MACHINE_TYPE: os recursos de máquina a serem usados neste job de previsão em lote.
-
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.ANYsignifica que as VMs docustomJobpodem consumir automaticamente consumir qualquer reserva com propriedades correspondentes.SPECIFIC_RESERVATIONsignifica que as VMs docustomJobsó podem consumir uma reserva que as VMs segmentam especificamente por nome.NONEsignifica que as VMs docustomJobnão podem consumir nenhuma reserva. EspecificarNONEtem o mesmo efeito que omitir uma especificação de afinidade de reserva.
-
BATCH_SIZE: o número de instâncias a serem enviadas em cada solicitação de previsão . O padrão é 64. Aumentar o tamanho do lote pode levar a maior capacidade de processamento, mas também pode causar tempos limite de solicitação.
-
STARTING_REPLICA_COUNT: o número de nós deste job 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 da solicitação:
{
"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 a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
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
Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:
$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
Você receberá uma resposta JSON semelhante a esta:
{
"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",
}
Recuperar resultados de inferência em lote
Quando uma tarefa de inferência em lote é concluída, a saída da inferência é armazenada no bucket do Cloud Storage ou no local do BigQuery que você especificou na solicitação.
A seguir
- Saiba mais sobre reservas de recursos zonais do Compute Engine .
- Saiba como usar reservas com a Vertex AI inferência on-line.
- Saiba como usar reservas com a Vertex AI training.
- Saiba como conferir reservas.
- Saiba como monitorar o consumo das reservas.