Este documento explica como usar as reservas do Compute Engine para ter um alto nível de garantia de que seus jobs de treinamento personalizados têm os recursos de máquina virtual (VM) necessários para serem executados.
As reservas são um recurso do Compute Engine. Eles ajudam a garantir que você tenha os recursos disponíveis para criar VMs com o mesmo hardware (memória e vCPUs) e recursos opcionais (GPUs e discos SSD locais) sempre que precisar.
Quando você cria uma reserva, o Compute Engine verifica se a capacidade solicitada está disponível na zona especificada. Nesse caso, o Compute Engine reserva os recursos, cria a reserva e o seguinte acontece:
- Você pode consumir os recursos reservados imediatamente, e eles permanecem disponíveis até que você exclua a reserva.
- Você vai receber cobranças pelos recursos reservados com a mesma taxa sob demanda que as VMs em execução, incluindo os descontos aplicáveis, até que a reserva seja excluída. Uma VM que consome uma reserva não gera cobranças separadas. Para saber mais, consulte Reservas de recursos zonais do Compute Engine.
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 consumir reservas de VMs que tenham GPUs anexadas.
- A Vertex AI não pode consumir reservas de VMs que tenham discos SSD locais conectados manualmente.
- O uso de reservas do Compute Engine com a Vertex AI é permitido apenas para treinamento e previsão personalizados.
- As propriedades de VM de uma reserva precisam corresponder exatamente ao seu workload 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 da Vertex AI só poderá consumir a reserva se também usar um tipo de máquinaa2-ultragpu-8g
. Consulte os requisitos. - Para consumir uma reserva compartilhada de VMs de GPU, 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 pelo menos uma VM adicional para cada implantação simultânea.
-
Os seguintes serviços e recursos não são compatíveis com o uso de reservas do Compute Engine com treinamento da Vertex AI:
- Programador de carga de trabalho dinâmica
- Como executar jobs de treinamento em um recurso persistente
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 todos os descontos por uso contínuo (CUDs) aplicáveis. Consulte Preços do Compute Engine.
- Taxas de gerenciamento de treinamento personalizado da Vertex AI, além do uso da infraestrutura. Consulte Preços de modelos treinados de maneira personalizada.
Antes de começar
- Revise os requisitos e as 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 VMs de GPU, é necessário definir 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 reserva compartilhada de VMs de GPU, é possível permitir que a Vertex AI consuma a reserva da seguinte maneira:
- Se você estiver usando o console do Google Cloud, selecione Compartilhar reserva na seção Serviços do Google Cloud.
- Se você estiver usando a CLI do Google Cloud, inclua a sinalização
--reservation-sharing-policy
definida comoALLOW_ALL
. - Se você estiver usando a API REST, inclua o campo
serviceShareType
definido comoALLOW_ALL
no corpo da solicitação.
Permitir consumo em uma reserva
Para permitir que a Vertex AI consuma uma reserva de VMs de GPU, consulte Modificar a política de compartilhamento de uma reserva.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.Criar um job de treinamento personalizado com uma reserva
Para criar um job de treinamento personalizado que consuma uma reserva do Compute Engine de VMs de GPU, use a API REST.
REST
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- LOCATION: a região em que o contêiner ou o pacote Python será executado.
- 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.
-
JOB_NAME: obrigatório. Um nome de exibição para
CustomJob
. - MACHINE_TYPE: o tipo de máquina a ser usado para o job. A configuração padrão é
n1-standard-2
. Para mais informações sobre os tipos de máquina compatíveis, consulte Configurar recursos de computação para treinamento personalizado. - 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.
- Defina o job de treinamento personalizado:
RESERVATION_AFFINITY_TYPE: precisa ser
ANY
,SPECIFIC_RESERVATION
ouNONE
.ANY
significa que as VMs docustomJob
podem consumir automaticamente qualquer reserva com propriedades correspondentes.SPECIFIC_RESERVATION
significa que as VMs docustomJob
podem consumir apenas uma reserva que as VMs segmentam especificamente por nome.NONE
significa que as VMs docustomJob
não podem consumir nenhuma reserva. EspecificarNONE
tem o mesmo efeito que omitir uma especificação de afinidade de reserva.
- RESERVATION_NAME: o nome da sua reserva.
- DISK_TYPE: opcional. O tipo de disco de inicialização a ser usado para o job,
pd-standard
(padrão) oupd-ssd
. Saiba mais sobre tipos de disco. - DISK_SIZE: opcional. O tamanho em GB do disco de inicialização a ser usado para o job. O valor padrão é 100.
- REPLICA_COUNT: o número de réplicas de worker a serem usadas. Na maioria dos casos,
defina esse valor como
1
para o primeiro pool de workers. - Se o aplicativo de treinamento for executado em um contêiner personalizado, especifique o seguinte:
- CUSTOM_CONTAINER_IMAGE_URI: o URI de uma imagem de contêiner no Artifact Registry ou do Docker Hub a ser executado em cada réplica de worker.
- CUSTOM_CONTAINER_COMMAND: opcional. O comando que será invocado quando o contêiner for iniciado. Esse comando substitui o ponto de entrada padrão do contêiner.
- CUSTOM_CONTAINER_ARGS: opcional. Argumentos a serem passados ao iniciar o contêiner.
- Se o aplicativo de treinamento for um pacote Python executado em um contêiner pré-criado, especifique o seguinte:
- EXECUTOR_IMAGE_URI: o URI da imagem do contêiner que executa o código fornecido; Consulte os contêineres pré-criados disponíveis para treinamento.
- PYTHON_PACKAGE_URIS: lista separada por vírgulas de URIs do Cloud Storage que especificam os arquivos de pacote do Python que são o programa de treinamento e os pacotes dependentes. O número máximo de URIs de pacote é 100.
- PYTHON_MODULE: o nome do módulo Python que será executado após a instalação dos pacotes.
- PYTHON_PACKAGE_ARGS: opcional. Argumentos da linha de comando a serem transmitidos para o módulo Python.
- TIMEOUT: opcional. O tempo máximo de execução do job.
- Especifique LABEL_NAME e LABEL_VALUE para todos os rótulos que você quiser aplicar a esse job personalizado.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs
Corpo JSON da solicitação:
{ "displayName": "JOB_NAME", "jobSpec": { "workerPoolSpecs": [ { "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/reservations/RESERVATION_NAME" ] }, }, "replicaCount": REPLICA_COUNT, "diskSpec": { "bootDiskType": DISK_TYPE, "bootDiskSizeGb": DISK_SIZE }, // Union field task can be only one of the following: "containerSpec": { "imageUri": CUSTOM_CONTAINER_IMAGE_URI, "command": [ CUSTOM_CONTAINER_COMMAND ], "args": [ CUSTOM_CONTAINER_ARGS ] }, "pythonPackageSpec": { "executorImageUri": EXECUTOR_IMAGE_URI, "packageUris": [ PYTHON_PACKAGE_URIS ], "pythonModule": PYTHON_MODULE, "args": [ PYTHON_PACKAGE_ARGS ] } // End of list of possible types for union field task. } // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs // for distributed training. ], "scheduling": { "timeout": TIMEOUT } }, "labels": { LABEL_NAME_1": LABEL_VALUE_1, LABEL_NAME_2": LABEL_VALUE_2 } }
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-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs"
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-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
A resposta contém informações sobre especificações, bem como o TRAININGPIPELINE_ID.
A seguir
- Saiba mais sobre reservas de recursos zonais do Compute Engine.
- Saiba como usar reservas com a previsão da Vertex AI.