Cette page explique l'état d'un cluster d'entraînement pendant le cycle de vie d'une tâche d'entraînement et explique comment Vertex AI gère les erreurs d'entraînement. Vous pouvez utiliser ces informations afin d'adapter votre code d'entraînement en conséquence.
Cycle de vie d'une tâche d'entraînement
Cette section explique comment Vertex AI gère les VM de nœud de calcul tout au long du cycle de vie d'une tâche d'entraînement.
Mettre une nouvelle tâche en file d'attente
Lorsque vous créez un CustomJob
ou un HyperparameterTuningJob
, la tâche peut rester dans l'état JOB_STATE_QUEUED
pendant un certain temps avant que Vertex AI ne l'exécute. Cette période est généralement brève, mais si votre projet Google Cloud ne dispose pas de suffisamment de quotas d'entraînement personnalisés pour votre tâche, alors Vertex AI la maintient en file d'attente jusqu'à ce que les quotas soient suffisants.
Démarrer les nœuds de calcul en parallèle
Lorsqu'une tâche d'entraînement démarre, Vertex AI planifie autant de nœuds de calcul que possible en un temps limité. Par conséquent, les nœuds de calcul peuvent démarrer en parallèle plutôt que de manière séquentielle. Afin de réduire la latence au démarrage, Vertex AI commence à exécuter votre code sur chaque nœud de calcul dès qu'il devient disponible. Lorsque tous les nœuds de calcul sont disponibles, Vertex AI définit l'état du job sur JOB_STATE_RUNNING
.
Dans la plupart des cas, votre framework de machine learning gère automatiquement les nœuds de calcul en parallèle. Si vous utilisez une stratégie de distribution dans votre code d'entraînement, vous devrez peut-être l'ajuster manuellement pour gérer les nœuds de calcul en parallèle. Obtenez plus d'informations sur les stratégies de distribution dans TensorFlow et dans PyTorch.
Redémarrer les nœuds de calcul pendant la tâche d'entraînement
Lors d'une tâche d'entraînement, Vertex AI peut redémarrer vos nœuds de calcul à partir de n'importe quel pool de nœuds de calcul portant le même nom d'hôte. Le problème peut survenir pour les raisons suivantes :
- Maintenance de la VM : lorsque la VM qui exécute un nœud de calcul fait l'objet d'une maintenance de VM, Vertex AI redémarre le nœud de calcul sur une autre VM. Apprenez-en davantage sur la migration à chaud pour la maintenance des VM.
Sorties non nulles : si un nœud de calcul s'arrête avec un code de sortie différent de zéro, Vertex AI redémarre ce nœud de calcul immédiatement dans la même VM.
- Si un nœud de calcul échoue en raison d'une erreur courante, celle-ci est traitée comme une erreur permanente et Vertex AI arrête l'intégralité de la tâche. Si des conteneurs redémarrent avant que Vertex AI n'arrête l'intégralité de la tâche, ils peuvent produire des journaux dans Cloud Logging.
- Si un nœud de calcul échoue en raison d'une erreur non-permanente (soit toute erreur non répertoriée dans les erreurs courantes), Vertex AI permet au nœud de calcul redémarré de poursuivre son exécution, à raison de cinq redémarrages par nœud de calcul. Si un nœud de calcul échoue à nouveau après cinq redémarrages, Vertex AI retente jusqu'à trois fois l'intégralité de la tâche avant de la mettre en échec.
Pour gérer les redémarrages des nœuds de calcul dans votre code d'entraînement, enregistrez des points de contrôle régulièrement pendant l'entraînement afin de pouvoir reprendre à partir de ces points de contrôle lorsqu'un nœud de calcul redémarre. Si vous prévoyez que l'entraînement dure plus de quatre heures, nous vous recommandons d'enregistrer un point de contrôle au moins une fois toutes les quatre heures. Découvrez comment utiliser les points de contrôle d'entraînement dans TensorFlow et dans PyTorch.
Terminer une tâche avec succès
Une tâche d'entraînement se termine correctement lorsque son instance dupliquée principale se ferme avec le code de sortie 0. À ce stade, Vertex AI arrête tous les autres nœuds de calcul en cours d'exécution.
Comment Vertex AI gère les erreurs liées aux tâches d'entraînement
Cette section explique comment Vertex AI gère les erreurs de tâche d'entraînement courantes et les erreurs internes.
Environ une minute après la fin d'une tâche, Vertex AI définit le code d'erreur sur l'objet de tâche d'entraînement en se basant sur le code de sortie.
Gérer les erreurs courantes
Vertex AI arrête tous les nœuds de calcul si elle rencontre l'un des problèmes suivants :
Type d'erreur | Message d'erreur/Journal | Remarque |
Exception de code utilisateur | L'instance dupliquée REPLICA_NAME s'est arrêtée avec un état différent de zéro (EXIT_CODE). Motif de l'arrêt : REASON. | Au cas où la tâche aurait rencontré des codes de sortie transitoires, Vertex AI tente de redémarrer la tâche jusqu'à trois fois.
Les codes d'erreur potentiellement temporaires qui invitent Vertex AI à tenter de relancer le job sont les suivants :
|
Mémoire saturée | La mémoire de l'instance dupliquée REPLICA_NAME est saturée et l'instance s'est arrêtée avec un état EXIT_CODE différent de 0. |
GKE réserve de la mémoire sur les nœuds de Vertex AI. Sur les plus petits types de machines (tels que n1-standard-4 ), les agents du système Vertex AI peuvent utiliser jusqu'à 40 % de la mémoire totale.
Pour les VM plus importantes, la surcharge est relativement faible. Comparez les ressources de mémoire pouvant être allouées aux types de machines n1-standard .
|
Capacité insuffisante dans votre région (rupture de stock de Compute Engine) | Les ressources sont insuffisantes dans la région : REGION_NAME. Essayez dans une autre région ou utilisez un autre accélérateur. | Une rupture de stock se produit lorsque Compute Engine atteint sa capacité maximale pour le type de processeur ou GPU sélectionné dans votre région. Cela n'est pas lié au quota de votre projet. Dans ce cas, Vertex AI tente de redémarrer la tâche jusqu'à trois fois. |
Gérer les erreurs internes
Si Vertex AI présente une erreur interne, elle tente de redémarrer une tâche deux fois (trois tentatives au total). Si le redémarrage échoue également, Vertex AI renvoie une erreur interne avec le message suivant : Internal error occurred for the current attempt
.