Código de error: E0200

Categoría: Tiempo de ejecución: El núcleo se detuvo de forma inesperada

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, un incumplimiento de las restricciones de hardware o una interrupción deliberada activada por aserciones de tiempo 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 ...

Back-ends de XLA: TPU

Descripción general

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

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

Depuración

Para resolver este error, primero debes identificar cuál de los tres casos específicos 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: [Network], observed errors are: [Power] o observed errors are: [Hardware].

Esto indica una falla en la infraestructura física que no está relacionada con la lógica de tu software o 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 fluctuació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íficos, 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 tu trabajo en nodos en buen estado.

Situación 2: Incumplimientos de restricciones de hardware

Firma: El estado de los registros observed errors are: [User].

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

  • Presenta un error de XLA: Es probable que se trate de un error del compilador, ya que este nunca debería emitir instrucciones que incumplan las especificaciones de hardware. Envía un informe de errores.

Situación 3: Errores de aserción generados por el compilador de XLA

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

  • BoundsCheck, scheckne, scheckeq, schecklt, scheckge y 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: No coincide el 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 manera sincronizada (como parte de un "grupo de lanzamiento"), se desincronizaron. Específicamente, un núcleo de TPU se unió a un grupo de sincronización con un identificador de programa diferente 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 el mismo XLA_FLAGS.
  • Programas de Jax coherentes: Verifica que todos los hosts ejecuten el mismo programa de Jax. Verifica las imágenes de Docker, las versiones de libtpu, etcétera.

Situación 3.B: Falla en la 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 los kernels personalizados: Si usas Pallas, verifica los cálculos de los índices. 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 3C: 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 de Mosaic (que usa Pallas JAX). Indica un problema de sincronización dentro de un kernel personalizado. Las TPU usan semáforos para administrar las dependencias (p.ej., garantizar que una DMA se complete antes de usarse). Este error sugiere que no se esperó correctamente una señal en un semáforo.

  • Sincronización de auditoría: Asegúrate de que cada dma_start tenga un dma_wait correspondiente.
  • Verifica los semáforos: Verifica que los indicadores y las esperas de los semáforos estén estrictamente vinculados.

Problemas sin clasificar

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

  • Acción: Es probable que se trate de un error interno de XLA. Envía un informe de errores.