Código de error: E0200

Categoría: Entorno de ejecución: Core Halted Unexpectedly

Este error indica que un núcleo de TPU dejó de ejecutar instrucciones de forma prematura. Este es un estado de error fatal en el que el hardware fuerza una detención debido a una falla irrecuperable, una violación de las restricciones de hardware o una interrupción deliberada activada por aserciones del entorno de ejecución generadas por el compilador.

Ejemplo de mensaje de error:

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

Backends de XLA: TPU

Descripción general

XLA compila programas de JAX en una secuencia de instrucciones de ensamblaje de bajo nivel. En el entorno de ejecución, el dispositivo de TPU ejecuta estas instrucciones de forma secuencial. Se produce un error "Core Halted Unexpectedly" cuando el hardware de TPU encuentra una condición irrecuperable que impide una mayor ejecución, lo que obliga al núcleo a un estado fatal "HALTED".

Debido a que este error puede deberse a fallas físicas de hardware, errores del compilador o problemas de código de usuario (en particular, en kernels personalizados), debes analizar cuidadosamente los mensajes de registro para identificar la causa específica.

Depuración

Para resolver este error, primero debes identificar cuál de las tres situaciones específicas causó la detención inesperada. Revisa tus registros para ver las firmas de texto específicas que se describen a continuación.

Situación 1: Fallas de infraestructura (hardware, red o energía)

Firma: Los registros indican explícitamente observed errors are: [Hardware], observed errors are: [Network] o observed errors are: [Power].

Esto indica una falla física de la infraestructura que no está relacionada con tu software ni con la lógica del modelo. Falló el chip de TPU, la estructura de red que conecta los chips o la fuente de alimentación.

  • Vuelve a intentar el trabajo: Si el problema fue una caída de tensión transitoria o una interrupción de la red, es posible que funcione un simple reintento.
  • Identifica y quita los nodos defectuosos: Si el error persiste en la misma tarea o host específico, es probable que el hardware esté defectuoso. Usa las herramientas de administración de clústeres para "drenar" o "aislar" el nodo afectado y reiniciar el trabajo en nodos en buen estado.

Situación 2: Violaciones de restricciones de hardware

Firma: Los registros indican observed errors are: [User].

Esto indica que el compilador XLA generó una instrucción que violó una restricción de hardware inviolable (p.ej., una instrucción que intenta acceder a una dirección de memoria fuera de los límites en la memoria HBM o Scratchpad). Si bien se etiqueta como "User", rara vez se debe al código de usuario de alto nivel.

  • Envía un error de XLA: Es probable que se trate de un error del compilador. El compilador nunca debe emitir instrucciones que violen las especificaciones de hardware. Envía un informe de errores.

Situación 3: Fallas de aserciones generadas por el compilador XLA

Firma: El mensaje de error contiene detalles específicos sobre la aserción generada por el compilador que falla. Busca las siguientes palabras clave:

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

Esto indica que falló una aserción generada por el compilador en el programa compilado durante la ejecución. Analiza el mensaje de error específico para determinar el subtipo.

Situación 3.A: Desajuste del grupo de lanzamiento

Ejemplo de mensaje de error:

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.

Causa: Este error suele ocurrir en entornos de TPU de varios hosts. Indica que los núcleos de TPU, que se espera que ejecuten el mismo programa de forma sincronizada (como parte de un "grupo de lanzamiento"), se desincronizaron. En particular, un núcleo de TPU se unió a un grupo de sincronización con un identificador de programa diferente al del líder del grupo actual, lo que sugiere programas incoherentes en los hosts.

  • Verifica las marcas de XLA: Asegúrate de que todos los hosts usen exactamente el mismo XLA_FLAGS.
  • Verifica que los programas de JAX sean coherentes: Verifica que todos los hosts ejecuten programas de JAX idénticos. Verifica las imágenes de Docker, las versiones de libtpu, etcétera.

Situación 3.B: Falla de verificación de límites

Ejemplo de mensaje de error:

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

Causa: El programa intentó acceder a la memoria fuera de los límites asignados. El mensaje de error suele incluir detalles sobre el tipo de acceso a la memoria (p.ej., dma.hbm_to_vmem) y el cálculo de la dirección.

  • Depura kernels personalizados: Si usas Pallas, verifica los cálculos de índice. Usa pl.debug_print o checkify para validar los índices de tensores.
  • Verifica la fragmentación: Asegúrate de que las anotaciones de fragmentación sean coherentes con las formas de los tensores.

Situación 3.C: Sincronización de Mosaic/Pallas

Ejemplo de mensaje de error:

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.

Causa: Este error es específico del código generado por el compilador Mosaic (que usa Pallas JAX). Indica un problema de sincronización dentro de un kernel personalizado. Las TPU usan semáforos para administrar dependencias (p.ej., garantizar que se complete un DMA antes de usarlo). Este error sugiere que no se esperó correctamente una señal en un semáforo.

  • Audita la sincronización: Asegúrate de que cada dma_start tenga un dma_wait correspondiente.
  • Verifica los semáforos: Verifica que las señales y las esperas de los semáforos estén estrictamente emparejadas.

Problemas sin clasificar

Si tu registro de errores no coincide con las situaciones 1, 2 o 3 (es decir, no hay "errores observados", no hay etiquetas "scheck" ni mensajes específicos de límites o semáforos), haz lo siguiente: