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.
Cas d'utilisation recommandés
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
- Découvrez comment configurer des ressources de calcul pour les jobs d'entraînement personnalisés.
- Découvrez comment utiliser l'entraînement distribué pour les jobs d'entraînement personnalisés.
- En savoir plus sur les autres options de programmation.