دسته بندی: زمان کامپایل: ورودی/خروجی موزاییکی، بلوک و کاشیکاری ناهمتراز
این خطا زمانی رخ میدهد که شکل بلوک ورودی یا خروجی هسته با کاشیکاری پیشفرض نوع داده در سختافزار TPU خاص مورد استفاده همتراز نباشد.
نمونه پیامهای خطا:
UNIMPLEMENTED: Mosaic failed to compile TPU kernel: Failed to set window params
for input 0: Operand of shape (..., 256, 8192) has tiling (16, 128), but its
block shape (..., 8, 8192) is not divisible by tiling evenly nor matches the
full shape.
پایههای XLA: TPU
نمای کلی
هستههای تانسور (TC) در TPUها دارای رجیسترهای برداری دوبعدی هستند. این دو بعد، زیرخط (sublane ) و خط (lane ) نامیده میشوند. از آنجایی که واحدهای محاسباتی TPU (مثلاً MXU) در سطح دانهبندی رجیسترهای برداری عمل میکنند، آرایههای XLA در حافظه TPU به صورت کاشیهایی (tiles) قرار گرفتهاند.
این کاشیکاری (مثلاً 8x128 ) تبدیل دادهها را هنگام تغذیه واحدهای محاسباتی به حداقل میرساند. ابعاد دقیق کاشیکاری (زیرخطها × خطوط) به نسل سختافزار و نوع داده بستگی دارد. برای مثال، یک کاشیکاری رایج برای اکثر انواع، ۸x۱۲۸ است.
در زمان کامپایل، XLA محدودیتهای زیر را برای ابعاد جزئی و دوم جزئی هر ورودی/خروجی هسته اعمال میکند:
- بخشپذیری: بُعد بلوک باید مضربی از بُعد کاشی در تانسور زیرین باشد، یا
- استثنای شکل کامل: اگر بُعد بلوک قابل تقسیم نباشد، باید با اندازه کامل آن بُعد در تانسور زیرین برابر باشد.
این خطا زمانی رخ میدهد که یک بلوک هر دو شرط را نقض کند. برای مثال، بارگذاری یک بلوک به شکل (8, 100) از ورودی به شکل (8, 1024) روی سختافزاری با کاشیکاری شکل (8, 128) با شکست مواجه میشود زیرا 100 بر 128 و 100 != 1024 بخشپذیر نیست. اما اگر شکل ورودی (32, 100) باشد، مجاز خواهد بود.
اشکالزدایی
برای رفع این خطا، مطمئن شوید که شکل بلوکهای هسته شما با کاشیکاری سختافزاری فعلی همتراز است. کد هسته خود را اصلاح کنید تا اندازه بلوکها را طوری همتراز کند که مضربی از کاشیکاری مورد نیاز باشد.
- مثال: اگر خطا بیان میکند که کاشیکاری
(16, 128)است اما شکل بلوک شما(8, 128)است، مشخصات بلوک را طوری تغییر دهید که شکل با(16, 128)مطابقت داشته باشد.