الفئة: وقت التجميع: عدم تطابق ناتج نقل البيانات إلى المضيف
يحدث هذا الخطأ عندما يتم عرض موتر تم نقله بشكل صريح إلى ذاكرة المضيف كناتج للبرنامج، ولكن لم يتم ضبط توقيع ناتج البرنامج على توقّع ذاكرة المضيف.
أمثلة على رسائل الخطأ:
INVALID_ARGUMENT: Tensor which is moved to host (starting from tuple.64) is returned from the entry computation but the layout for this output is not set to host memory.
البرامج الخلفية في XLA: وحدة معالجة الموتّرات (TPU)، وحدة معالجة الرسومات (GPU)
نظرة عامة
عندما يصادف المترجم التذييل التوضيحي لنقل موتر إلى الجهاز المضيف (وحدة المعالجة المركزية)، يتتبّع موقع هذا الموتر من خلال الرسم البياني للحساب إلى أن يحدث أحد الأحداث الثلاثة التالية:
- الانتقال إلى الجهاز: يؤدي التعليق التوضيحي المطابق إلى نقل الموتر مرة أخرى إلى المسرّع.
- الحساب على الجهاز المضيف: يتم استخدام الموتر من خلال عملية على الجهاز المضيف.
- نهاية البرنامج: يصل الموتر إلى نهاية البرنامج ويصبح ناتجًا.
يحدث هذا الخطأ في السيناريو 3. يقع الموتر فعليًا في ذاكرة المضيف في نهاية التنفيذ، ولكن توقيع عملية الإدخال في برنامج XLA يحدّد أنّ هذا الناتج المحدّد يقع في ذاكرة الجهاز. وبما أنّ المترجم لا يمكنه تغيير واجهة حساب الإدخال ضمنيًا، فإنّه يعرض خطأ.
تصحيح الأخطاء
لحلّ هذا الخطأ، حدِّد ما إذا كنت تريد أن يكون هذا الموتر ناتجًا على المضيف أو ما إذا كان يجب نقله مرة أخرى إلى الجهاز قبل إرجاعه.
التحقّق من "نية الإخراج" و"مسار التتبُّع"
المقصود إرجاعه على الجهاز المضيف: إذا كنت تريد بشكل صريح أن يتم إرجاع هذا الموتر في ذاكرة الجهاز المضيف (تجنُّب نقله مرة أخرى إلى الجهاز)، عليك ضبط مساحة ذاكرة الإخراج الخاصة بالحساب الإدخالي بشكل صريح على ذاكرة الجهاز المضيف لهذا الإخراج المحدّد.
المقصود إرجاع الموتر على الجهاز: إذا كان من المفترض أن يبقى الموتر على الجهاز أو أن يعود إليه قبل انتهاء البرنامج، من المحتمل أنّك لم تلاحظ تعليقًا توضيحيًا. أدرِج تعليقًا توضيحيًا مطابقًا لنقل الموتر مرة أخرى إلى الجهاز.
إذا كان مصدر الموتر الذي تم نقله غير واضح، أو إذا لم تتمكّن من العثور على مكان عدم توفّر التعليق التوضيحي "نقل إلى الجهاز"، استخدِم تسجيل XLA لتتبُّع التعليمات.
- تفعيل التسجيل: إذا كنت تستخدم Google Cloud TPU، أعِد تشغيل برنامجك باستخدام العلامة التالية:
--vmodule=host_offloader=1. - تحليل السجلات: ابحث عن ناتج "التتبُّع" في السجلات. سيؤدي ذلك إلى عرض مسار الموتر بدءًا من تعليمات التفريغ. استخدِم هذه السمة لتحديد المكان الذي يصل فيه الموتر إلى حدود البرنامج بدقة بدون أن تتم إعادته إلى الجهاز.