رمز الخطأ: 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: وحدة معالجة الموتّرات (TPU)

نظرة عامة

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

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

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

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

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

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

يشير ذلك إلى حدوث عطل في البنية الأساسية المادية لا صلة له بالبرنامج أو منطق النموذج. تعطُّل شريحة 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 الأساسية، التي من المفترض أن تنفّذ البرنامج نفسه بطريقة متزامنة (كجزء من "مجموعة الإطلاق")، أصبحت غير متزامنة. على وجه التحديد، انضم أحد أنوية 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" أو رسائل حدود/إشارات دلالية محدّدة):

  • الإجراء: من المحتمل أن يكون هذا خطأ داخليًا في XLA. يُرجى تقديم تقرير خطأ.