Code d'erreur : E0200

Catégorie : Runtime : Core Halted Unexpectedly

Cette erreur indique qu'un cœur de TPU a arrêté d'exécuter les instructions de manière prématurée. Il s'agit d'un état d'erreur fatal dans lequel le matériel force un arrêt en raison d'une défaillance irrécupérable, d'une violation des contraintes matérielles ou d'une interruption délibérée déclenchée par des assertions d'exécution générées par le compilateur.

Exemple de message d'erreur :

INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 ...

Backends XLA : TPU

Présentation

XLA compile les programmes JAX en une séquence d'instructions d'assemblage de bas niveau. Lors de l'exécution, l'appareil TPU exécute ces instructions de manière séquentielle. L'erreur "Core Halted Unexpectedly" (Noyau arrêté de manière inattendue) se produit lorsque le matériel TPU rencontre une condition irrécupérable qui empêche toute exécution ultérieure, ce qui force le cœur à passer dans un état fatal "HALTED" (ARRÊTÉ).

Étant donné que cette erreur peut provenir de défaillances matérielles physiques, de bugs du compilateur ou de problèmes liés au code utilisateur (en particulier dans les noyaux personnalisés), vous devez analyser attentivement les messages du journal pour identifier la cause spécifique.

Débogage

Pour résoudre cette erreur, vous devez d'abord identifier lequel des trois scénarios spécifiques a provoqué l'arrêt inattendu. Recherchez dans vos journaux les signatures de texte spécifiques décrites ci-dessous.

Scénario 1 : Défaillances d'infrastructure (matériel/réseau/alimentation)

Signature : les journaux indiquent explicitement observed errors are: [Hardware], observed errors are: [Network] ou observed errors are: [Power].

Cela indique une défaillance de l'infrastructure physique sans rapport avec la logique de votre logiciel ou de votre modèle. La puce TPU, le réseau qui connecte les puces ou l'alimentation ont échoué.

  • Réessayez d'exécuter le job : si le problème était lié à une baisse de tension ou à une instabilité du réseau, un simple nouvel essai peut suffire.
  • Identifiez et supprimez les nœuds défectueux : si l'erreur persiste sur la même tâche ou le même hôte, il est probable que le matériel soit défectueux. Utilisez vos outils de gestion de cluster pour "vider"/"mettre en quarantaine" le nœud concerné et redémarrer votre job sur des nœuds opérationnels.

Scénario 2 : Non-respect des contraintes matérielles

Signature : les journaux indiquent observed errors are: [User].

Cela indique que le compilateur XLA a généré une instruction qui enfreint une contrainte matérielle inviolable (par exemple, une instruction tentant d'accéder à une adresse mémoire hors limites sur la mémoire HBM ou Scratchpad). Bien qu'elle soit intitulée "Utilisateur", cette erreur est rarement due à un code utilisateur de haut niveau.

  • Signaler un bug XLA : il s'agit probablement d'un bug du compilateur. Le compilateur ne doit jamais émettre d'instructions qui enfreignent les spécifications matérielles. Veuillez remplir un rapport de bug.

Scénario 3 : Échecs d'assertion générés par le compilateur XLA

Signature : le message d'erreur contient des informations spécifiques sur l'assertion générée par le compilateur qui échoue. Recherchez les mots clés suivants :

  • BoundsCheck, scheckne, scheckeq, schecklt, scheckge, scheckbetween

Cela indique qu'une assertion générée par le compilateur dans le programme compilé a échoué lors de l'exécution. Analysez le message d'erreur spécifique pour déterminer le sous-type.

Scénario 3.A : Incohérence du groupe de lancement

Exemple de message d'erreur :

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 (from TensorCoreSequencer:1:0x309): scheckne: An unexpected leader shows up in the launch group with a different launch id than the current group leader.

Cause : cette erreur se produit généralement dans les environnements TPU multihôtes. Cela indique que les cœurs de TPU, qui sont censés exécuter le même programme de manière synchronisée (dans le cadre d'un "groupe de lancement"), sont devenus désynchronisés. Plus précisément, un cœur de TPU a rejoint un groupe de synchronisation avec un identifiant de programme différent de celui du chef de groupe actuel, ce qui suggère des programmes incohérents entre les hôtes.

  • Vérifiez les indicateurs XLA : assurez-vous que tous les hôtes utilisent exactement le même XLA_FLAGS.
  • Vérifiez la cohérence des programmes JAX : assurez-vous que tous les hôtes exécutent des programmes JAX identiques. Vérifiez les images Docker, les versions libtpu, etc.

Scénario 3.B : Échec de la vérification des limites

Exemple de message d'erreur :

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:23:0x292 (from TensorCoreSequencer:23:0xd74a): BoundsCheck 92 [deref of %s931] for %937 = dma.hbm_to_vmem [thread:$0]  /*hbm=*/%s931, /*size_in_granules=*/16384, /*vmem=*/%s935, /*dst_syncflagno=*/%s860, /*src_stride=*/512, /*dst_stride=*/128, /*steps_per_stride=*/8

Cause : le programme a tenté d'accéder à la mémoire en dehors des limites allouées. Le message d'erreur inclut souvent des détails sur le type d'accès à la mémoire (par exemple, dma.hbm_to_vmem) et le calcul de l'adresse.

  • Déboguer les kernels personnalisés : si vous utilisez Pallas, vérifiez vos calculs d'index. Utilisez pl.debug_print ou checkify pour valider les index de Tensor.
  • Vérifiez le partitionnement : assurez-vous que les annotations de partitionnement sont cohérentes avec les formes des Tensors.

Scénario 3.C : Synchronisation Mosaic/Pallas

Exemple de message d'erreur :

Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:21:0xae5 (from TensorCoreSequencer:21:0x54c5): Semaphore (scratch argument 1) has a nonzero value upon exit from a Mosaic kernel. Make sure every DMA is awaited, and every semaphore signal is paired with a wait.

Cause : cette erreur est spécifique au code généré par le compilateur Mosaic (utilisé par Pallas JAX). Cela indique un problème de synchronisation dans un noyau personnalisé. Les TPU utilisent des sémaphores pour gérer les dépendances (par exemple, pour s'assurer qu'un DMA est terminé avant utilisation). Cette erreur suggère qu'un signal sur un sémaphore n'a pas été correctement attendu.

  • Synchronisation des audits : assurez-vous que chaque dma_start possède un dma_wait correspondant.
  • Vérifiez les sémaphores : assurez-vous que les signaux et les attentes de sémaphore sont strictement appariés.

Problèmes non catégorisés

Si votre journal des erreurs ne correspond pas aux scénarios 1, 2 ou 3 (c'est-à-dire qu'il ne contient pas de "observed errors", de balises "scheck" ni de messages spécifiques concernant les limites/sémaphores) :