Programa trabajos de entrenamiento según la disponibilidad de recursos

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.

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