Planifier des jobs d'entraînement en fonction de la disponibilité des ressources

Pour les jobs d'entraînement personnalisées qui demandent des ressources GPU, le programmeur de charge de travail dynamique vous permet de planifier les jobs en fonction de la disponibilité des ressources GPU demandées. Cette page explique comment planifier des jobs d'entraînement personnalisées à l'aide du programmeur de charge de travail dynamique, et comment personnaliser le comportement de la programmation sur Vertex AI.

Nous vous recommandons d'utiliser le programmeur de charge de travail dynamique pour programmer des jobs d'entraînement personnalisé dans les situations suivantes :

  • Le job d'entraînement personnalisé demande des GPU A100 ou H100, et vous souhaitez l'exécuter dès que les ressources demandées sont disponibles. Par exemple, lorsque Vertex AI alloue les ressources GPU en dehors des heures de pointe.
  • Votre charge de travail nécessite plusieurs nœuds et ne peut pas commencer à s'exécuter tant que tous les nœuds GPU ne sont pas provisionnés et prêts en même temps. Par exemple, vous créez un job d'entraînement distribué.

Conditions requises

Pour utiliser le programmeur de charge de travail dynamique, votre job d'entraînement personnalisé doit répondre aux exigences suivantes :

  • La durée maximale avant expiration (timeout) de votre job d'entraînement personnalisé est de 7 jours ou moins.
  • Votre job d'entraînement personnalisé utilise la même configuration de machine pour tous les pools de nœuds de calcul.

Types de jobs compatibles

Tous les types de jobs d'entraînement personnalisé sont acceptés, y compris CustomJob, HyperparameterTuningjob et TrainingPipeline.

Activer le programmeur de charge de travail dynamique dans votre job d'entraînement personnalisé

Pour activer le programmeur de charge de travail dynamique dans votre job d'entraînement personnalisé, définissez le champ d'API scheduling.strategy sur FLEX_START lorsque vous créez le job.

Pour savoir comment créer un job d'entraînement personnalisé, consultez les liens suivants.

Configurer la durée d'attente pour la disponibilité des ressources

Vous pouvez configurer la durée pendant laquelle votre job peut attendre des ressources dans le champ scheduling.maxWaitDuration. Une valeur 0 signifie que le job attend indéfiniment que les ressources demandées soient disponibles. La valeur par défaut est 1 jour.

Exemples

Les exemples suivants vous montrent comment activer le programmeur de charge de travail dynamique pour un customJob. Sélectionnez l'onglet correspondant à l'interface que vous souhaitez utiliser.

gcloud

Lorsque vous envoyez un job à l'aide de Google Cloud CLI, ajoutez le champ scheduling.strategy dans le fichier config.yaml.

Exemple de fichier de configuration 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

Lorsque vous envoyez un job à l'aide du SDK Vertex AI pour Python, définissez le champ scheduling_strategy dans la méthode de création CustomJob appropriée.

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

Lorsque vous envoyez un job à l'aide de l'API REST Vertex AI, définissez les champs scheduling.strategy et scheduling.maxWaitDuration lors de la création de votre job d'entraînement personnalisée.

Exemple de corps de requête JSON :

{
  "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"
    }
  }
}

Quota

Lorsque vous envoyez un job à l'aide du programmeur de charge de travail dynamique, Vertex AI utilise le quota préemptible au lieu du quota Vertex AI à la demande. Par exemple, pour les GPU Nvidia H100, au lieu de consommer :

aiplatform.googleapis.com/custom_model_training_nvidia_h100_gpus,

Vertex AI consomme :

aiplatform.googleapis.com/custom_model_training_preemptible_nvidia_h100_gpus.

Toutefois, le quota préemptible n'est utilisé que pour le nom. Vos ressources ne sont pas préemptables et se comportent comme des ressources standards.

Avant d'envoyer un job à l'aide du programmeur de charge de travail dynamique, assurez-vous que vos quotas préemptibles ont été augmentés de manière suffisante. Pour en savoir plus sur les quotas Vertex AI et obtenir des instructions pour demander une augmentation de quota, consultez la page Quotas et limites de Vertex AI.

Facturation

Vous n'êtes facturé que pour la durée d'exécution du job, et non pour le temps d'attente de disponibilité des ressources. Pour en savoir plus, consultez la section tarifs.

Étape suivante