Visão geral
É possível reduzir o custo de execução dos jobs de treinamento personalizado usando VMs spot. As VMs spot são instâncias de máquina virtual (VM) que excedem a capacidade do Compute Engine. Elas têm descontos significativos, mas o Compute Engine pode forçar a interrupção (preempção) ou excluir essas VMs para recuperar a capacidade a qualquer momento.
Para saber mais, consulte VMs spot.
Limitações e requisitos
Considere as seguintes limitações e requisitos ao usar VMs spot com a Vertex AI:
- Todas as limitações de VMs spot se aplicam ao usar VMs spot com a Vertex AI.
- O uso de VMs spot com a Vertex AI é permitido apenas para treinamento e previsão personalizados.
- Não é possível usar VMs spot com pods de TPU.
-
O treinamento da Vertex AI só pode usar VMs spot com as seguintes séries de máquinas:
- A2
- A3
- Não é possível enviar o job pelo console do Google Cloud.
Faturamento
Se as cargas de trabalho forem tolerantes a falhas e resistentes a possíveis preempções de VMs, as VMs spot poderão reduzir significativamente os custos de computação. Quando algumas dessas VMs são interrompidas durante o processamento, o job fica lento, mas não para por completo. As VMs spot concluem as tarefas de processamento em lote sem colocar carga extra nas VMs atuais e sem exigir que você pague o preço total de VMs padrão adicionais. Consulte Como lidar com a preempção.
Ao usar VMs spot, você recebe uma cobrança pela duração do job e pelo tipo de máquina. Você não paga pelo tempo em que o job está na fila ou está interrompido à força.
Como lidar com preempções
As VMs spot podem ser recuperadas pelo Compute Engine a qualquer momento. Portanto,
o job de treinamento personalizado precisa ser tolerante a falhas para aproveitar ao máximo as
VMs spot. Quando as VMs spot são interrompidas à força, o job de treinamento personalizado
falha com um erro STOCKOUT
e o Compute Engine tenta reiniciá-lo
até seis vezes. Para saber como aproveitar ao máximo as VMs spot, consulte
Práticas recomendadas
para VMs spot.
Confira alguns métodos que podem ser usados para tornar o job de treinamento personalizado tolerante a falhas:
- Crie checkpoints para salvar o progresso. Ao armazenar periodicamente o progresso do modelo, é possível garantir que um job de treinamento personalizado encerrado possa ser retomado a partir do último checkpoint armazenado, em vez de começar do zero.
- Use o Elastic Horovod. O treinamento elástico permite que o Horovod dimensione os recursos de computação sem precisar reiniciar ou retomar os checkpoints. Para saber mais, consulte Elastic Horovod.
- Use um script de encerramento. Quando o Compute Engine interrompe à força uma VM spot, é possível usar um script de encerramento para tentar executar ações de limpeza antes da interrupção da VM. Para saber mais, consulte Como lidar com a preempção com um script de encerramento.
Antes de começar
Prepare o app de treinamento personalizado:
- Para usar um contêiner predefinido, consulte Criar um app de treinamento em Python para um contêiner predefinido.
- Para usar um contêiner personalizado, consulte Criar uma imagem de contêiner personalizada para treinamento.
Configurar o job de treinamento para usar VMs spot
É possível configurar o job de treinamento personalizado para usar VMs spot
especificando uma estratégia SPOT
na configuração de programação.
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 ID do projeto.
-
JOB_NAME: obrigatório. Um nome de exibição para
CustomJob
. - Defina o job de treinamento personalizado:
- MACHINE_TYPE: o tipo da máquina. Consulte os tipos de máquina disponíveis para treinamento.
- 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 do Docker com o código de treinamento. Saiba como criar uma imagem de contêiner personalizada.
- 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 passados para o módulo Python.
Método HTTP e URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs
Corpo JSON da solicitação:
{ "displayName": "JOB_NAME", "jobSpec": { "workerPoolSpecs": [ { "machineSpec": { "machineType": "MACHINE_TYPE" } }, "replicaCount": REPLICA_COUNT, // 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": { "strategy": "SPOT" } } }
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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content
A resposta contém informações sobre especificações, bem como o TRAININGPIPELINE_ID.
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.
customJob = aiplatform.CustomJob( display_name=TEST_CASE_NAME, worker_pool_specs=worker_pool_spec, staging_bucket=OUTPUT_DIRECTORY )customJob.run( scheduling_strategy=aiplatform.compat.types.custom_job.Scheduling.Strategy.SPOT )
A seguir
- Saiba mais sobre VMs spot.
- Para saber mais sobre VMs do Compute Engine em geral, leia a documentação Instâncias de máquina virtual.
- Para saber como criar VMs spot, confira Criar e usar VMs spot.
- Usar VMs spot com a previsão da Vertex AI.