دسته بندی: عدم تطابق خروجی Host Offload
این خطا زمانی رخ میدهد که یک تانسور که صریحاً به حافظه میزبان منتقل شده است، به عنوان خروجی برنامه بازگردانده شود، اما امضای خروجی برنامه برای انتظار حافظه میزبان پیکربندی نشده است.
نمونه پیامهای خطا:
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
نمای کلی
وقتی کامپایلر با حاشیهنویسی برای انتقال یک تانسور به میزبان (CPU) مواجه میشود، مکان آن تانسور را در گراف محاسباتی دنبال میکند تا زمانی که یکی از سه رویداد زیر رخ دهد:
- انتقال به دستگاه: یک حاشیهنویسی منطبق، تانسور را به شتابدهنده برمیگرداند.
- محاسبه میزبان: تانسور توسط یک عملیات سمت میزبان مصرف میشود.
- پایان برنامه: تانسور به انتهای برنامه میرسد و به خروجی تبدیل میشود.
این خطا در سناریوی شماره ۳ رخ میدهد. تانسور در پایان اجرا به صورت فیزیکی در حافظه میزبان قرار دارد، اما امضای محاسبه ورودی برنامه XLA آن خروجی خاص را به عنوان موجود در حافظه دستگاه تعریف میکند. از آنجا که کامپایلر نمیتواند به طور ضمنی رابط محاسبه ورودی را تغییر دهد، خطایی ایجاد میکند.
اشکالزدایی
برای رفع این خطا، مشخص کنید که آیا قصد داشتید این تانسور به عنوان خروجی روی میزبان باشد یا اینکه قبل از بازگشت باید به دستگاه منتقل میشد.
تأیید خروجی و ردیابی مسیر {#verify_intent}
قصد بازگشت به میزبان: اگر صریحاً میخواهید این تانسور در حافظه میزبان بازگردانده شود (از انتقال به دستگاه جلوگیری شود)، باید صریحاً فضای حافظه خروجی محاسبه ورودی را برای این خروجی خاص روی حافظه میزبان تنظیم کنید.
قصد بازگشت به دستگاه: اگر قرار بوده تانسور روی دستگاه بماند یا قبل از پایان برنامه به آن برگردد، احتمالاً یک حاشیهنویسی را از دست دادهاید. یک حاشیهنویسی منطبق برای انتقال تانسور به دستگاه وارد کنید.
اگر منبع تانسور تخلیهشده نامشخص است، یا نمیتوانید محل گم شدن حاشیهنویسی «انتقال به دستگاه» را پیدا کنید، از گزارشگیری XLA برای ردیابی دستورالعملها استفاده کنید.
- فعال کردن ثبت وقایع: اگر از Google Cloud TPU استفاده میکنید، برنامه خود را با پرچم زیر دوباره اجرا کنید:
--vmodule=host_offloader=1 - تحلیل گزارشها: به دنبال خروجی "ردیابی" در گزارشها باشید. این خروجی مسیر تانسور را از دستورالعمل آفلود نشان میدهد. از این برای مشخص کردن دقیق محل رسیدن تانسور به مرز برنامه بدون انتقال مجدد به دستگاه استفاده کنید.