Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Détection des tâches bloquées
Les tâches distribuées de Ray Train peuvent être bloquées sans générer d'erreur. Un seul travailleur échoue silencieusement, et tous les autres travailleurs bloquent la prochaine opération collective, en attendant indéfiniment. Les GPU restent alloués avec les poids de modèle chargés mais ne produisent aucun calcul utile. Comme il n'y a pas de message d'erreur ou de crash, le décrochage passe souvent inaperçu pendant des heures jusqu'à ce que quelqu'un vérifie manuellement la progression du travail.
HyperPod La détection des tâches bloquées surveille en permanence les modèles d'utilisation du GPU et forme l'activité du personnel sur l'ensemble de votre cluster afin d'identifier les tâches qui ont cessé de progresser. Lorsqu'un décrochage est détecté, le système le refait apparaître en quelques minutes au lieu de quelques heures, afin que vous puissiez reprendre la tâche ou libérer de la capacité pour d'autres tâches.
Comment ça marche
Par défaut, tous les employés de Ray Train HyperPod sont surveillés à l'aide des paramètres par défaut de la plateforme, sans qu'aucune modification de code ne soit requise. La plateforme met en corrélation les modèles d'utilisation du GPU avec l'activité de sortie du personnel de formation afin de faire la distinction entre une tâche inactive parce qu'elle est bloquée et une tâche inactive parce qu'elle est en cours d'exécution I/O ou en cours de contrôle. Lorsqu'un blocage est détecté, une notification est envoyée à votre tableau de bord HyperPod Observability Grafana et. CloudWatch Pour de plus amples informations, veuillez consulter Affichage des événements de détection.
L'action par défaut est notifier : HyperPod enregistre l'événement de détection mais ne met pas fin à la tâche. Pour activer la restauration automatique, configurez des règles personnalisées à l'aide de l'cancelaction décrite dans la section suivante.
Lorsque vous configurez des règles de détection personnalisées, elles remplacent la détection par défaut pour cette tâche. L'action que vous spécifiez dans votre configuration personnalisée s'applique à toutes les détections issues de vos règles personnalisées. La détection par défaut continue de s'exécuter pour toute tâche qui ne configure pas de règles personnalisées.
Configuration de règles de détection personnalisées
Pour mieux contrôler le comportement de détection, vous pouvez définir des règles relatives aux modèles de journalisation avec des délais et des actions configurables. Les règles personnalisées vous permettent de détecter les blocages spécifiques à un domaine (par exemple, aucune nouvelle ligne de journal des étapes de formation pendant 10 minutes) ou les conditions d'erreur (par exemple, OOM) et de choisir si vous HyperPod devez notifier ou annuler automatiquement le travailleur bloqué.
Suivez ces étapes pour activer les règles de détection personnalisées.
-
Ajoutez la variable d'environnement IP de l'hôte à votre RayCluster manifeste
Ajoutez la variable d'environnement suivante à la fois
headGroupSpecetworkerGroupSpecsdans votre RayCluster YAML. Cela permet à la bibliothèque Python exécutée dans le conteneur de formation de communiquer avec le service de surveillance des tâches sur l'hôte.spec: headGroupSpec: template: spec: containers: - name: ray-head env: - name: HYPERPOD_JMA_HOST valueFrom: fieldRef: fieldPath: status.hostIP workerGroupSpecs: - template: spec: containers: - name: ray-worker env: - name: HYPERPOD_JMA_HOST valueFrom: fieldRef: fieldPath: status.hostIPNote
Cette variable d'environnement n'est requise que pour les règles de détection personnalisées. La détection par défaut fonctionne sans elle.
-
Installez la bibliothèque de boîtes à outils dans l'image de votre conteneur de formation
Ajoutez le package toolkit-for-ray-on-sagemaker-ai
du site Web PyPI à l'image de votre conteneur de formation. La bibliothèque est préinstallée dans SageMaker Distribution images. pip install toolkit-for-ray-on-sagemaker-ai -
Ajoutez la surveillance à votre fonction d'entraînement
Faites appel
SageMakerLogMonitoring.start()à votre service de formation avant de faire un travail significatif. Cela garantit que la surveillance est active dès le début de l'entraînement et peut détecter les blocages qui se produisent lors du chargement du modèle ou lors de la première passe.from toolkit_for_ray_on_sagemaker_ai.log_monitoring import ( SageMakerLogMonitoring, LogMonitorConfig, ) from ray.train import RunConfig, FailureConfig, ScalingConfig from ray.train.torch import TorchTrainer def train_func(): # Start monitoring BEFORE any meaningful work SageMakerLogMonitoring(config=LogMonitorConfig( enabled=True, rules=[ { "name": "training_progress", "type": "log_pattern", "enabled": True, "log_pattern": "(Epoch|Step|Iteration) \\d+", "timeout_minutes": 10, "start_timeout_minutes": 30, "stop_pattern": "Training complete", "fault_on_match": False, }, { "name": "oom_detection", "type": "log_pattern", "enabled": True, "log_pattern": "CUDA out of memory|OutOfMemoryError|OOM", "fault_on_match": True, }, ], action="cancel", )).start() # ... your training loop for epoch in range(num_epochs): print(f"Epoch {epoch}") # This output is what the rule monitors train_one_epoch(model, dataloader) print("Training complete") # Matches stop_pattern, deactivates the rule # Configure FailureConfig so Ray Train automatically restarts all workers # when the cancel action terminates a hung worker. trainer = TorchTrainer( train_func, scaling_config=ScalingConfig(num_workers=4, use_gpu=True), run_config=RunConfig( failure_config=FailureConfig(max_failures=3), ), )Lorsque l'
cancelaction met fin à un travailleur bloqué, la documentation Ray Train FailureConfigin the Ray détecte la défaillance du travailleur et redémarre tous les travailleurs depuis le dernier point de contrôle. Définissez max_failuresle nombre de tentatives de restauration automatique que vous souhaitez avant que la tâche n'échoue définitivement. Dans le casFailureConfigcontraire, le licenciement d'un seul travailleur fait échouer l'ensemble du travail.Comme Ray Train effectue une restauration à partir du dernier point de contrôle enregistré au redémarrage, aucun progrès d'entraînement n'est perdu au-delà du travail effectué depuis le dernier point de contrôle. Si votre code d'entraînement enregistre régulièrement des points de contrôle (par exemple, à chaque limite d'époque), la tâche reprend automatiquement à partir du dernier état enregistré.
Champs de règles
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
name |
chaîne | Oui | Human-readable identifiant de la règle. |
type |
chaîne | Oui | Type de règle . À utiliser log_pattern pour la détection basée sur les journaux. |
enabled |
bool | Non | Si cette règle est active. La valeur par défaut est false . |
log_pattern |
chaîne | Oui | Modèle Regex à faire correspondre dans Worker Stdout (syntaxe RE2, 256 caractères maximum). |
timeout_minutes |
float | Non | Maximum de minutes entre deux correspondances de modèles consécutives avant de déclarer un blocage. |
start_timeout_minutes |
float | Non | Maximum de minutes à compter du début de la tâche pour la première correspondance de modèle. Utile pour autoriser le temps de démarrage (chargement du modèle, téléchargement des données). Si le motif n'apparaît pas dans cette fenêtre, la tâche est considérée comme bloquée. |
stop_pattern |
chaîne | Non | Regex qui désactive cette règle lorsqu'elle est mise en correspondance (par exemple,"Training complete"). |
fault_on_match |
bool | Non | Sitrue, déclare un blocage immédiatement lorsque le motif correspond. À utiliser pour les modèles d'erreur tels que OOM. Quandtrue, ce n'timeout_minutesest pas obligatoire. |
metric_evaluation_data_points |
int | Non | Nombre de cycles d'évaluation consécutifs qui doivent confirmer l'état avant de déclarer un blocage. La valeur par défaut est 1 . |
Actions
| Action | Description |
|---|---|
notify |
Émettez un événement de détection vers CloudWatch Grafana mais n'effectuez aucune action automatique. Il s’agit de l’option par défaut. |
cancel |
Mettez fin au processus de blocage des travailleurs. Le système intégré de Ray Train FailureConfig redémarre tous les travailleurs depuis le dernier point de contrôle. Pour utiliser cette action, configurez FailureConfig avec suffisamment de tentatives dans votreRunConfig. |
Désinscription de la détection
Pour désactiver la détection de toutes les tâches bloquées pour une tâche spécifique, y compris la détection par défaut et les règles personnalisées, procédez comme suit :
from toolkit_for_ray_on_sagemaker_ai.log_monitoring import ( SageMakerLogMonitoring, LogMonitorConfig, ) def train_func(): SageMakerLogMonitoring(config=LogMonitorConfig(enabled=False)).start() # ... training continues with no monitoring
Affichage des événements de détection
Lorsqu'une tâche bloquée est détectée, l'événement apparaît aux emplacements suivants :
-
CloudWatch Journaux : groupe de journaux
/aws/sagemaker/Clusters/, flux de journauxcluster-name/cluster-idSageMakerHangJobDetectionEvents/. Recherchez pourinstance-group-name/instance-idHANG_DETECTEDtrouver les événements de détection. -
Grafana : Si le module complémentaire HyperPod Observability est installé, les événements de détection apparaissent dans le tableau de bord Ray Train, sous le panneau de détection des tâches Hung. Pour de plus amples informations, veuillez consulter Observabilité.
Chaque événement de détection inclut l'identifiant de la tâche, les preuves qui ont déclenché la détection et l'action entreprise (notifyoucancel).