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.
Casos de uso recomendados
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
- Saiba mais sobre como configurar recursos de computação para jobs de treinamento personalizados.
- Saiba mais sobre como usar o treinamento distribuído para jobs de treinamento personalizados.
- Saiba mais sobre outras opções de programação.