En el caso de los trabajos de entrenamiento personalizados que solicitan recursos de GPU, el programador de cargas de trabajo dinámico te permite programar los trabajos en función de cuándo estén disponibles los recursos de GPU solicitados. En esta página se explica cómo programar tareas de entrenamiento personalizadas mediante Dynamic Workload Scheduler y cómo personalizar el comportamiento de la programación en Vertex AI.
Casos prácticos recomendados
Te recomendamos que uses Dynamic Workload Scheduler para programar trabajos de entrenamiento personalizados en las siguientes situaciones:
- El trabajo de entrenamiento personalizado solicita GPUs L4, A100, H100, H200 o B200 y quieres ejecutar el trabajo en cuanto estén disponibles los recursos solicitados. Por ejemplo, cuando Vertex AI asigna los recursos de GPU fuera de las horas punta.
- Tu carga de trabajo requiere varios nodos y no puede empezar a ejecutarse hasta que todos los nodos de GPU se aprovisionen y estén listos al mismo tiempo. Por ejemplo, vas a crear un trabajo de entrenamiento distribuido.
Requisitos
Para usar Dynamic Workload Scheduler, tu tarea de entrenamiento personalizada debe cumplir los siguientes requisitos:
- Tu trabajo de entrenamiento personalizado solicita GPUs L4, A100, H100, H200 o B200.
- Tu trabajo de entrenamiento personalizado tiene un valor de
timeout
de 7 días o menos. - Tu tarea de entrenamiento personalizada usa la misma configuración de máquina para todos los grupos de trabajadores.
Tipos de trabajos admitidos
Se admiten todos los tipos de trabajos de entrenamiento personalizados, incluidos CustomJob
, HyperparameterTuningjob
y TrainingPipeline
.
Habilitar Dynamic Workload Scheduler en un trabajo de entrenamiento personalizado
Para habilitar Dynamic Workload Scheduler en tu trabajo de entrenamiento personalizado, asigna el valor FLEX_START
al campo de la API scheduling.strategy
cuando crees el trabajo.
Para obtener información sobre cómo crear un trabajo de entrenamiento personalizado, consulta los siguientes enlaces.
Configurar la duración de espera de la disponibilidad de recursos
Puedes configurar cuánto tiempo puede esperar tu trabajo a los recursos en el campo scheduling.maxWaitDuration
. El valor 0
significa que el trabajo espera indefinidamente hasta que los recursos solicitados estén disponibles. El valor predeterminado es 1 día.
Ejemplos
En los siguientes ejemplos se muestra cómo habilitar Dynamic Workload Scheduler para un customJob
.
Selecciona la pestaña de la interfaz que quieras usar.
gcloud
Cuando envíes una tarea mediante Google Cloud CLI, añade el campo scheduling.strategy
en el archivo
config.yaml
.
Ejemplo de archivo de configuración YAML:
workerPoolSpecs:
machineSpec:
machineType: a2-highgpu-1g
acceleratorType: NVIDIA_TESLA_A100
acceleratorCount: 1
replicaCount: 1
containerSpec:
imageUri: gcr.io/ucaip-test/ucaip-training-test
args:
- port=8500
command:
- start
scheduling:
strategy: FLEX_START
maxWaitDuration: 7200s
Python
Cuando envíes un trabajo con el SDK de Vertex AI para Python, define el campo scheduling_strategy
en el método de creación CustomJob
correspondiente.
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,
machine_type="a2-highgpu-1g",
accelerator_type="NVIDIA_TESLA_A100",
accelerator_count=1,
)
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
Cuando envíes una tarea mediante la API REST de Vertex AI, define los campos scheduling.strategy
y scheduling.maxWaitDuration
al crear tu tarea de entrenamiento personalizada.
Cuerpo JSON de solicitud de ejemplo:
{
"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"
}
}
}
Cuota
Cuando envías un trabajo mediante Dynamic Workload Scheduler, en lugar de consumir cuota de Vertex AI bajo demanda, Vertex AI consume cuota preemptible. Por ejemplo, en el caso de las GPUs Nvidia H100, en lugar de consumir:
aiplatform.googleapis.com/custom_model_training_nvidia_h100_gpus
,
Vertex AI consume lo siguiente:
aiplatform.googleapis.com/custom_model_training_preemptible_nvidia_h100_gpus
.
Sin embargo, la cuota interrumpible solo se usa de nombre. Tus recursos no son preemptibles y se comportan como recursos estándar.
Antes de enviar un trabajo mediante Dynamic Workload Scheduler, asegúrese de que sus cuotas de recursos preemptibles se han aumentado a una cantidad suficiente. Para obtener información sobre las cuotas de Vertex AI e instrucciones para solicitar aumentos de cuota, consulta Cuotas y límites de Vertex AI.
Facturación
Solo se te cobra por el tiempo que se ejecuta el trabajo, no por el tiempo que espera a que los recursos estén disponibles. Para obtener más información, consulta la página de precios.
Siguientes pasos
- Consulta más información sobre cómo configurar recursos de computación para trabajos de entrenamiento personalizados.
- Más información sobre cómo usar el entrenamiento distribuido en trabajos de entrenamiento personalizados
- Consulta más información sobre otras opciones de programación.