कैटगरी: कंपाइल टाइम: मोज़ेक इनपुट/आउटपुट मिसअलाइन ब्लॉक और टाइलिंग
यह गड़बड़ी तब होती है, जब कर्नल इनपुट या आउटपुट के ब्लॉक का साइज़, इस्तेमाल किए जा रहे टीपीयू हार्डवेयर पर डेटा टाइप की डिफ़ॉल्ट टाइलिंग के साथ अलाइन नहीं होता है.
गड़बड़ी के मैसेज के उदाहरण:
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 बैकएंड: टीपीयू
खास जानकारी
टीपीयू में मौजूद टेंसर कोर (टीसी) में, दो डाइमेंशन वाले वेक्टर रजिस्टर होते हैं. इन दो डाइमेंशन को सबलेन और लेन कहा जाता है. टीपीयू कंप्यूट यूनिट (जैसे, MXU) वेक्टर रजिस्टर के हिसाब से काम करते हैं. वहीं, XLA ऐरे को टीपीयू मेमोरी में टाइल के तौर पर रखा जाता है.
इस तरह की टाइलिंग (उदाहरण के लिए, 8x128) कंप्यूट यूनिट को डेटा देते समय, डेटा ट्रांसफ़ॉर्मेशन को कम करता है. टाइलिंग के डाइमेंशन (सबलेन × लेन) की सटीक जानकारी, हार्डवेयर जनरेशन और डेटा टाइप पर निर्भर करती है. उदाहरण के लिए, ज़्यादातर टाइप के लिए सामान्य टाइलिंग 8×128 होती है.
कंपाइल करने के समय, XLA हर कर्नल इनपुट/आउटपुट के माइनर और दूसरे-माइनर डाइमेंशन के लिए, इन शर्तों को लागू करता है:
- विभाज्यता: ब्लॉक डाइमेंशन, अंडरलाइंग टेंसर में मौजूद टाइल डाइमेंशन का गुणज होना चाहिए या
- पूरे आकार का अपवाद: अगर ब्लॉक डाइमेंशन को बांटा नहीं जा सकता, तो यह ज़रूरी है कि यह अंडरलाइंग टेंसर में उस डाइमेंशन के पूरे साइज़ के बराबर हो.
यह गड़बड़ी तब ट्रिगर होती है, जब कोई ब्लॉक दोनों शर्तों का उल्लंघन करता है. उदाहरण के लिए, (8, 128) शेप वाले हार्डवेयर पर, (8, 1024) शेप वाले इनपुट से (8, 100) शेप वाले ब्लॉक को लोड नहीं किया जा सकता. ऐसा इसलिए, क्योंकि 100 को 128 और 100 != 1024 से भाग नहीं दिया जा सकता. हालांकि, अगर इनपुट का आकार (32, 100) होता, तो इसकी अनुमति होती.
डीबग करना
इस गड़बड़ी को ठीक करने के लिए, पक्का करें कि आपके कर्नल के ब्लॉक शेप, मौजूदा हार्डवेयर टाइलिंग के साथ अलाइन हों. ब्लॉक के साइज़ को अलाइन करने के लिए, अपने कर्नल कोड में बदलाव करें, ताकि यह टाइलिंग की ज़रूरी संख्या का गुणज हो.
- उदाहरण: अगर गड़बड़ी में बताया गया है कि टाइलिंग
(16, 128)है, लेकिन आपके ब्लॉक का आकार(8, 128)है, तो ब्लॉक स्पेसिफ़िकेशन को इस तरह से बदलें कि आकार(16, 128)से मेल खाए.