رمز الخطأ: E0200

الفئة: وقت التشغيل: تم إيقاف Core بشكل غير متوقّع

يشير هذا الخطأ إلى أنّ إحدى وحدات TPU الأساسية توقّفت عن تنفيذ التعليمات قبل الأوان. هذه حالة خطأ فادح حيث يفرض الجهاز إيقافًا بسبب خطأ لا يمكن إصلاحه أو انتهاك لقيود الجهاز أو مقاطعة متعمّدة يتم تشغيلها بواسطة تأكيدات وقت التشغيل التي تم إنشاؤها بواسطة المترجم.

نموذج رسالة الخطأ:

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

برامج XLA الخلفية: وحدة معالجة الموتّرات

نظرة عامة

تُحوّل XLA برامج JAX إلى سلسلة من تعليمات التجميع المنخفضة المستوى. أثناء وقت التشغيل، ينفِّذ جهاز TPU هذه التعليمات بالتسلسل. يحدث الخطأ "Core Halted Unexpectedly" عندما يواجه جهاز TPU حالة غير قابلة للاسترداد تمنع التنفيذ الإضافي، ما يؤدي إلى فرض حالة "HALTED" (متوقف) على النواة.

بما أنّ هذا الخطأ يمكن أن ينجم عن أعطال في الأجهزة المادية أو أخطاء في برنامج التجميع أو مشاكل في رمز المستخدم (خاصةً في النواة المخصّصة)، عليك تحليل رسائل السجلّ بعناية لتحديد السبب المحدّد.

تصحيح الأخطاء

لحلّ هذا الخطأ، عليك أولاً تحديد أيّ من السيناريوهات الثلاثة المحدّدة تسبّب في التوقّف غير المتوقّع. راجِع السجلّات بحثًا عن التوقيعات النصية المحدّدة الموضّحة أدناه.

السيناريو 1: الأعطال في البنية التحتية (الأجهزة/الشبكة/الطاقة)

التوقيع: تسجّل السجلات بوضوح observed errors are: [Hardware] أو observed errors are: [Network] أو observed errors are: [Power].

يشير ذلك إلى حدوث عطل في البنية الأساسية المادية لا صلة له بالبرنامج أو منطق النموذج. تعطُّل شريحة TPU أو نسيج الشبكة الذي يربط الشرائح أو مصدر الطاقة

  • إعادة محاولة تنفيذ المهمة: إذا كانت المشكلة انخفاضًا مؤقتًا في الجهد أو خللاً في الشبكة، قد تنجح إعادة المحاولة.
  • تحديد العُقد السيئة وإزالتها: إذا استمر ظهور الخطأ في المهمة أو المضيف نفسهما، من المحتمل أن يكون الجهاز معيبًا. استخدِم أدوات إدارة المجموعة لإيقاف العُقدة المتأثرة مؤقتًا وإعادة تشغيل مهمتك على عُقد سليمة.

السيناريو 2: مخالفات قيود الأجهزة

التوقيع: حالة السجلات observed errors are: [User].

يشير ذلك إلى أنّ برنامج التجميع XLA أنشأ تعليمات تنتهك قيدًا غير قابل للانتهاك في الأجهزة (مثل تعليمات تحاول الوصول إلى عنوان ذاكرة خارج النطاق على ذاكرة النطاق الترددي العالي أو ذاكرة Scratchpad). على الرغم من تصنيفها على أنّها "المستخدم"، إلا أنّ هذا الخطأ نادرًا ما يكون سببه رمز المستخدم عالي المستوى.

  • الإبلاغ عن خطأ في XLA: من المحتمل أن يكون هذا الخطأ مرتبطًا ببرنامج التجميع، إذ لا يجب أن يصدر برنامج التجميع تعليمات تخالف مواصفات الأجهزة. يُرجى تقديم تقرير خطأ.

السيناريو 3: حالات تعذُّر التأكيد التي تم إنشاؤها بواسطة برنامج التجميع XLA

التوقيع: تحتوي رسالة الخطأ على تفاصيل محدّدة بشأن التأكيد الذي أنشأه برنامج التجميع والذي يتعذّر تنفيذه. ابحث عن الكلمات الرئيسية التالية:

  • BoundsCheck وscheckne وscheckeq وschecklt وscheckge وscheckbetween

يشير هذا الرمز إلى تعذُّر تنفيذ تأكيد من إنشاء برنامج التجميع في البرنامج المجمَّع. حلِّل رسالة الخطأ المحدّدة لتحديد النوع الفرعي.

السيناريو 3.أ: عدم تطابق مجموعة الإطلاق

نموذج رسالة الخطأ:

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.

السبب: يحدث هذا الخطأ عادةً في بيئات TPU المتعددة المضيفين. يشير ذلك إلى أنّ نوى TPU، التي من المتوقّع أن تنفّذ البرنامج نفسه بطريقة متزامنة (كجزء من "مجموعة إطلاق")، أصبحت غير متزامنة. على وجه التحديد، انضمّت إحدى وحدات معالجة الموتّرات إلى مجموعة مزامنة مع معرّف برنامج مختلف عن معرّف قائد المجموعة الحالي، ما يشير إلى برامج غير متسقة على مستوى المضيفين.

  • التأكّد من صحة علامات XLA: تأكَّد من أنّ جميع المضيفين يستخدمون XLA_FLAGS نفسه تمامًا.
  • التحقّق من برامج JAX المتسقة: تأكَّد من أنّ جميع المضيفين ينفّذون برامج JAX متطابقة. تحقَّق من صور Docker وإصدارات libtpu وما إلى ذلك.

السيناريو 3.B: تعذُّر التحقّق من الحدود

نموذج رسالة الخطأ:

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

السبب: حاول البرنامج الوصول إلى الذاكرة خارج الحدود المخصّصة. غالبًا ما تتضمّن رسالة الخطأ تفاصيل حول نوع الوصول إلى الذاكرة (مثل dma.hbm_to_vmem) وحساب العنوان.

  • تصحيح أخطاء النواة المخصّصة: إذا كنت تستخدم Pallas، راجِع عمليات حساب الفهرس. استخدِم pl.debug_print أو checkify للتحقّق من صحة فهارس الموتر.
  • التحقّق من التقسيم: تأكَّد من أنّ تعليقات التقسيم التوضيحية تتوافق مع أشكال الموتر.

السيناريو 3.C: مزامنة Mosaic/Pallas

نموذج رسالة الخطأ:

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.

السبب: هذا الخطأ خاص بالرمز الذي تم إنشاؤه بواسطة برنامج تجميع Mosaic (المستخدَم من قِبل Pallas JAX). يشير إلى مشكلة في المزامنة ضمن نواة مخصّصة. تستخدم وحدات TPU إشارات المرور لإدارة التبعيات (على سبيل المثال، التأكّد من اكتمال الوصول المباشر إلى الذاكرة قبل الاستخدام). يشير هذا الخطأ إلى عدم انتظار إشارة على إشارة المرور بشكل صحيح.

  • التدقيق في المزامنة: تأكَّد من أنّ كل dma_start يتضمّن dma_wait مطابقًا.
  • التحقّق من إشارات المرور: تأكَّد من أنّ إشارات المرور وعمليات الانتظار مقترنة بشكل صارم.

المشاكل غير المصنَّفة

إذا كان سجلّ الأخطاء لا يتطابق مع السيناريو 1 أو 2 أو 3 (أي لا يتضمّن "أخطاء مرصودة" أو علامات "scheck" أو رسائل حدود/إشارات دلالية محدّدة):