Use VMs do Spot com a preparação

Vista geral

Pode reduzir o custo de execução das suas tarefas de preparação personalizadas usando VMs de Spot. As VMs do Spot são instâncias de máquinas virtuais (VMs) que são capacidade do Compute Engine em excesso. As VMs do Spot têm descontos significativos, mas o Compute Engine pode parar ou eliminar (preempt) VMs do Spot antecipadamente para reclamar a capacidade em qualquer altura.

Para saber mais, consulte o artigo VMs do Spot.

Limitações e requisitos

Considere as seguintes limitações e requisitos quando usar VMs de capacidade limitada com a Vertex AI:

  • Todas as limitações das VMs do Spot aplicam-se quando usa VMs do Spot com o Vertex AI.
  • A utilização de VMs do Spot com a Vertex AI é suportada apenas para preparação e inferência personalizadas.
  • A utilização de VMs do Spot com pods de TPUs não é suportada.
  • O envio do seu trabalho através da Google Cloud consola não é suportado.

Faturação

Se as suas cargas de trabalho forem tolerantes a falhas e puderem resistir a uma possível remoção preventiva de VMs, as VMs do Spot podem reduzir significativamente os seus custos de computação. Se algumas das suas VMs pararem durante o processamento, a tarefa fica mais lenta, mas não para completamente. As VMs de capacidade instantânea concluem as suas tarefas de processamento em lote sem colocar carga adicional nas VMs existentes e sem exigir que pague o preço total pelas VMs padrão adicionais. Consulte o artigo Processamento de antecipação.

Quando usa VMs do Spot, a faturação é feita com base na duração da tarefa e no tipo de máquina. Não paga o tempo em que o trabalho está numa fila ou é antecipado.

Processamento de preempção

As VMs de capacidade instantânea podem ser reclamadas pelo Compute Engine em qualquer altura. Por conseguinte, a sua tarefa de preparação personalizada tem de ter tolerância a falhas para tirar o máximo partido das VMs do Spot. Quando as VMs do Spot são anuladas, a tarefa de preparação personalizada falha com um erro STOCKOUT e o Compute Engine tenta reiniciar a tarefa até seis vezes. Para saber como tirar o máximo partido das VMs do Spot, consulte as práticas recomendadas das VMs do Spot.

Seguem-se alguns dos métodos que pode usar para tornar a sua tarefa de preparação personalizada tolerante a falhas:

  • Crie pontos de verificação para guardar o progresso. Ao armazenar periodicamente o progresso do seu modelo, pode garantir que uma tarefa de preparação personalizada terminada pode ser retomada a partir do último ponto de verificação armazenado, em vez de começar de novo.
  • Use o Horovod elástico. A preparação elástica permite que o Horovod dimensione os seus recursos de computação sem exigir um reinício nem retomar a partir de pontos de verificação. Para saber mais, consulte o artigo Elastic Horovod.
  • Use um script de encerramento. Quando o Compute Engine antecipa uma VM do Spot, pode usar um script de encerramento que tenta realizar ações de limpeza antes de a VM ser antecipada. Para saber mais, consulte o artigo Faça a gestão da preempção com um script de encerramento.

Antes de começar

Prepare a sua aplicação de preparação personalizada:

Configure a tarefa de preparação para usar VMs do Spot

Pode configurar a sua tarefa de preparação personalizada para usar VMs de Spot especificando uma estratégia SPOT na configuração de agendamento.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • LOCATION: a região onde o contentor ou o pacote Python vai ser executado.
  • PROJECT_ID: o seu ID do projeto.
  • JOB_NAME: obrigatório. Um nome a apresentar para o CustomJob.
  • Defina a tarefa de formação personalizada:
    • MACHINE_TYPE: o tipo de máquina. Consulte os tipos de máquinas disponíveis para a preparação.
    • REPLICA_COUNT: o número de réplicas de trabalhadores a usar. Na maioria dos casos, defina este valor como 1 para o seu primeiro conjunto de trabalhadores.
    • Se a sua aplicação de preparação for executada num contentor personalizado, especifique o seguinte:
      • CUSTOM_CONTAINER_IMAGE_URI: o URI de uma imagem de contentor do Docker com o seu código de preparação. Saiba como criar uma imagem de contentor personalizada.
      • CUSTOM_CONTAINER_COMMAND: opcional. O comando a invocar quando o contentor é iniciado. Este comando substitui o ponto de entrada predefinido do contentor.
      • CUSTOM_CONTAINER_ARGS: opcional. Os argumentos a transmitir quando iniciar o contentor.
    • Se a sua aplicação de preparação for um pacote Python executado num contentor pré-criado, especifique o seguinte:
      • EXECUTOR_IMAGE_URI: o URI da imagem do contentor que executa o código facultado. Consulte os contentores pré-criados disponíveis para formação.
      • PYTHON_PACKAGE_URIS: lista separada por vírgulas de URIs do Cloud Storage que especificam os ficheiros de pacotes Python que são o programa de preparação e os respetivos pacotes dependentes. O número máximo de URIs de pacotes é 100.
      • PYTHON_MODULE: o nome do módulo Python a executar após a instalação dos pacotes.
      • PYTHON_PACKAGE_ARGS: opcional. Argumentos da linha de comandos a transmitir ao módulo Python.

Método HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

Corpo JSON do pedido:

{
  "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 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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

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-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

A resposta contém informações sobre as especificações, bem como o JOB_ID.

Python

Para saber como instalar ou atualizar o SDK Vertex AI para Python, consulte o artigo Instale o SDK Vertex AI para Python. Para mais informações, consulte a documentação de referência da API do SDK 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
)

O que se segue?