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 según el momento en que los recursos de GPU solicitados estén disponibles. En esta página, se muestra cómo programar trabajos de entrenamiento personalizados con el Programador dinámico de cargas de trabajo y cómo personalizar el comportamiento de programación en Vertex AI.
Casos de uso recomendados
Te recomendamos que uses el programador de cargas de trabajo dinámico para programar trabajos de entrenamiento personalizados en las siguientes situaciones:
- El trabajo de entrenamiento personalizado solicita GPUs A100 o H100, y deseas ejecutarlo apenas los recursos solicitados estén disponibles. Por ejemplo, cuando Vertex AI asigna los recursos de GPU fuera de las horas pico.
- Tu carga de trabajo requiere varios nodos y no puede comenzar a ejecutarse hasta que todos los nodos de GPU se aprovisionen y estén listos al mismo tiempo. Por ejemplo, estás creando un trabajo de entrenamiento distribuido.
Requisitos
Para usar el programador de cargas de trabajo dinámico, tu trabajo de entrenamiento personalizado debe cumplir con los siguientes requisitos:
- Tu trabajo de entrenamiento personalizado tiene un
timeout
máximo de 7 días o menos. - Tu trabajo de entrenamiento personalizado usa la misma configuración de la 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
.
Habilita el programador dinámico de cargas de trabajo en tu trabajo de entrenamiento personalizado
Para habilitar el programador de cargas de trabajo dinámica en tu trabajo de entrenamiento personalizado, establece el campo de la API scheduling.strategy
en FLEX_START
cuando crees el trabajo.
Para obtener detalles sobre cómo crear un trabajo de entrenamiento personalizado, consulta los siguientes vínculos.
Configura la duración para esperar la disponibilidad de los recursos
Puedes configurar durante cuánto tiempo tu trabajo puede esperar recursos en el campo scheduling.maxWaitDuration
. Un valor de 0
significa que la tarea 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 el programador de cargas de trabajo dinámico para un customJob
.
Selecciona la pestaña de la interfaz que quieres usar.
gcloud
Cuando envíes un trabajo con Google Cloud CLI, agrega el campo scheduling.strategy
al archivo config.yaml
.
Archivo de configuración YAML de ejemplo:
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
Cuando envíes un trabajo con el SDK de Vertex AI para Python, configura el campo scheduling_strategy
en el método de creación de CustomJob
relevante.
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
Cuando envíes un trabajo con la API de REST de Vertex AI, configura los campos scheduling.strategy
y scheduling.maxWaitDuration
cuando crees tu trabajo de entrenamiento personalizado.
Ejemplo de cuerpo JSON de la solicitud:
{
"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 con el programador dinámico de cargas de trabajo, en lugar de consumir la cuota de Vertex AI on demand, Vertex AI consume la cuota preemptible. Por ejemplo, para las GPU NVIDIA H100, en lugar de consumir lo siguiente:
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 se pueden preemptar y se comportan como recursos estándar.
Antes de enviar un trabajo con el programador dinámico de cargas de trabajo, asegúrate de que tus cuotas preemptibles hayan aumentado a una cantidad suficiente. Para obtener detalles sobre las cuotas de Vertex AI y las instrucciones para realizar solicitudes de aumento de cuotas, consulta Cuotas y límites de Vertex AI.
Facturación
Se te cobra solo por el tiempo que se ejecuta la tarea y no por el tiempo que esta espera a que los recursos estén disponibles. Para obtener más detalles, consulta Precios.
Pasos siguientes
- Obtén más información para configurar recursos de procesamiento para trabajos de entrenamiento personalizados.
- Obtén más información sobre el uso del entrenamiento distribuido para trabajos de entrenamiento personalizados.
- Obtén más información sobre otras opciones de programación.