Programar jobs de treinamento com base na disponibilidade de recursos

Para jobs de treinamento personalizados que solicitam recursos de GPU, o Dynamic Workload Scheduler permite programar os jobs com base no momento em que os recursos de GPU solicitados ficam disponíveis. Nesta página, mostramos como programar jobs de treinamento personalizados usando o Dynamic Workload Scheduler e como personalizar o comportamento de programação na Vertex AI.

Recomendamos o uso do Dynamic Workload Scheduler para programar jobs de treinamento personalizados nas seguintes situações:

  • O job de treinamento personalizado solicita GPUs A100 ou H100, e você quer executar o job assim que os recursos solicitados estiverem disponíveis. Por exemplo, quando a Vertex AI aloca os recursos de GPU fora dos horários de pico.
  • A carga de trabalho requer vários nós e não pode começar a ser executada até que todos os nós da GPU estejam provisionados e prontos ao mesmo tempo. Por exemplo, você está criando um job de treinamento distribuído.

Requisitos

Para usar o Dynamic Workload Scheduler, seu job de treinamento personalizado precisa atender aos seguintes requisitos:

  • O job de treinamento personalizado tem um timeout máximo de 7 dias ou menos.
  • O job de treinamento personalizado usa a mesma configuração de máquina para todos os pools de workers.

Tipos de job compatíveis

Todos os tipos de trabalhos de treinamento personalizados são aceitos, incluindo CustomJob, HyperparameterTuningjob e TrainingPipeline.

Ativar o Dynamic Workload Scheduler no job de treinamento personalizado

Para ativar o Dynamic Workload Scheduler no job de treinamento personalizado, defina o campo da API scheduling.strategy como FLEX_START ao criar o job.

Para saber como criar um job de treinamento personalizado, consulte os links a seguir.

Configurar a duração da espera pela disponibilidade do recurso

É possível configurar o tempo que o job pode esperar por recursos no campo scheduling.maxWaitDuration. Um valor de 0 significa que o job aguardará indefinidamente até que os recursos solicitados estejam disponíveis. O valor padrão é 1 dia.

Exemplos

Os exemplos a seguir mostram como ativar o Dynamic Workload Scheduler para um customJob. Selecione a guia da interface que você quer usar.

gcloud

Ao enviar um job usando a CLI do Google Cloud, adicione o campo scheduling.strategy no arquivo config.yaml.

Exemplo de arquivo de configuração YAML:

workerPoolSpecs:
  machineSpec:
    machineType: n1-highmem-2
  replicaCount: 1
  containerSpec:
    imageUri: gcr.io/ucaip-test/ucaip-training-test
    args:
    - port=8500
    command:
    - start
scheduling:
  strategy: FLEX_START
  maxWaitDuration: 1800s

python

Ao enviar um job usando o SDK da Vertex AI para Python, defina o campo scheduling_strategy no método de criação relevante de CustomJob.

from google.cloud.aiplatform_v1.types import custom_job as gca_custom_job_compat

def create_custom_job_with_dws_sample(
    project: str,
    location: str,
    staging_bucket: str,
    display_name: str,
    script_path: str,
    container_uri: str,
    service_account: str,
    experiment: str,
    experiment_run: Optional[str] = None,
) -> None:
    aiplatform.init(project=project, location=location, staging_bucket=staging_bucket, experiment=experiment)

    job = aiplatform.CustomJob.from_local_script(
        display_name=display_name,
        script_path=script_path,
        container_uri=container_uri,
        enable_autolog=True,
    )

    job.run(
        service_account=service_account,
        experiment=experiment,
        experiment_run=experiment_run,
        max_wait_duration=1800,
        scheduling_strategy=gca_custom_job_compat.Scheduling.Strategy.FLEX_START
    )

REST

Ao enviar um job usando a API REST da Vertex AI, defina os campos scheduling.strategy e scheduling.maxWaitDuration ao criar seu job de treinamento personalizado.

Exemplo de corpo JSON da solicitação:

{
  "displayName": "MyDwsJob",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "a2-highgpu-1g",
          "acceleratorType": "NVIDIA_TESLA_A100",
          "acceleratorCount": 1
        },
        "replicaCount": 1,
        "diskSpec": {
          "bootDiskType": "pd-ssd",
          "bootDiskSizeGb": 100
        },
        "containerSpec": {
          "imageUri": "python:3.10",
          "command": [
            "sleep"
          ],
          "args": [
            "100"
          ]
        }
      }
    ],
    "scheduling": {
      "maxWaitDuration": "1800s",
      "strategy": "FLEX_START"
    }
  }
}

Cota

Quando você envia um job usando o Dynamic Workload Scheduler, em vez de consumir a cota da Vertex AI por demanda, a Vertex AI consome a cota preemptiva. Por exemplo, para GPUs NVIDIA H100, em vez de consumir:

aiplatform.googleapis.com/custom_model_training_nvidia_h100_gpus,

A Vertex AI consome:

aiplatform.googleapis.com/custom_model_training_preemptible_nvidia_h100_gpus.

No entanto, a cota preemptiva é usada apenas no nome. Seus recursos não são preemptíveis e se comportam como recursos padrão.

Antes de enviar um job usando o Dynamic Workload Scheduler, verifique se as cotas preemptivas foram aumentadas para uma quantidade suficiente. Para detalhes sobre as cotas da Vertex AI e instruções para fazer solicitações de aumento de cota, consulte Cotas e limites da Vertex AI.

Faturamento

A cobrança é feita apenas pelo tempo em que o job fica em execução, e não pelo tempo em que ele aguarda a disponibilidade de recursos. Para ver detalhes, consulte Preços.

A seguir