गड़बड़ी का कोड: 0102

कैटगरी: रनटाइम: प्रोग्राम के इनपुट बफ़र का साइज़ मेल नहीं खाता

यह गड़बड़ी तब होती है, जब XLA रनटाइम को यह पता चलता है कि कंपाइल किए गए प्रोग्राम के लिए ज़रूरी मेमोरी बफ़र का साइज़ और प्रोग्राम को चलाने के दौरान उपलब्ध कराए गए बफ़र का साइज़ मेल नहीं खाता.

गड़बड़ी के मैसेज का उदाहरण:

XlaRuntimeError: INVALID_ARGUMENT: Executable(jit_embedding_pipeline_step_fn) expected parameter 2482 of size 5242880 (bf16[16,1280,40]{2,1,0:T(8,128)(2,1)}) but got buffer with incompatible size 1638400 (bf16[16,1280,40]{1,2,0:T(8,128)(2,1)}): while running replica 0 and partition 0 of a replicated computation (other replicas may have failed as well).

XLA बैकएंड: टीपीयू

खास जानकारी

गड़बड़ी के मैसेज में, अनुमानित और असल साइज़ के साथ-साथ, टेंसर के शेप और लेआउट के बारे में भी बताया जाता है. ध्यान दें कि ये गड़बड़ियां तब भी हो सकती हैं, जब दो टेंसर का शेप एक जैसा हो. हालांकि, अगर उनके फ़िज़िकल लेआउट (डेटा को हार्डवेयर पर कैसे टाइल और व्यवस्थित किया जाता है) अलग-अलग हैं, तो मेमोरी में उनका साइज़ अलग-अलग हो सकता है.

ये गड़बड़ियां मुख्य रूप से इन वजहों से होती हैं:

  • चेकपॉइंट और XLA कॉन्फ़िगरेशन का मेल न खाना - मॉडल को ट्रेन किया जाता है और चेकपॉइंट सेव किया जाता है. उस चेकपॉइंट में वज़न का फ़िज़िकल लेआउट, उस समय के सटीक XLA वर्शन और कॉन्फ़िगरेशन (जैसे, XLA फ़्लैग) से तय होता है. बाद में, इस चेकपॉइंट को किसी दूसरे एनवायरमेंट में लोड किया जाता है. इस एनवायरमेंट में कॉन्फ़िगरेशन बदल गया है. नए फ़्लैग, डिफ़ॉल्ट वैल्यू में बदलाव या मॉडल/XLA कोड में बदलाव की वजह से, रनटाइम को वज़न के लिए अलग फ़िज़िकल लेआउट की ज़रूरत पड़ सकती है. चेकपॉइंट से पुराने बफ़र को नए कंपाइल किए गए XLA प्रोग्राम में पास करने पर, रनटाइम एक गड़बड़ी दिखाता है.
  • हार्डवेयर/टपोलॉजी के हिसाब से लेआउट - XLA कंपाइलर, अलग-अलग हार्डवेयर पर परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए, टेंसर के लिए अलग-अलग फ़िज़िकल लेआउट चुनने के लिए स्वतंत्र है. ऐसा हो सकता है कि v4 टीपीयू के लिए सबसे सही लेआउट, v5 टीपीयू के लिए सही न हो. इसके अलावा, यह भी हो सकता है कि एक ही चिप के अलग-अलग पॉड स्लाइस (जैसे, 4x4x4 बनाम 4x8). यह गड़बड़ी तब होती है, जब किसी मॉडल को एक टोपोलॉजी के लेआउट के बारे में अनुमान लगाकर कंपाइल किया जाता है. हालांकि, रनटाइम के दौरान उसे किसी दूसरी टोपोलॉजी पर शेड्यूल किया जाता है. इसके अलावा, यह गड़बड़ी तब भी हो सकती है, जब किसी खास हार्डवेयर के लिए कंपाइलर के लेआउट लॉजिक में कोई गड़बड़ी हो.

डीबग करना

  • यह पक्का करें कि मॉडल एक्सपोर्ट करने और चेकपॉइंट से फिर से रन करने के दौरान, कॉन्फ़िगरेशन एक जैसा हो:
    • जब तक आपको यह पक्का न हो कि लेआउट पर असर डालने वाले कोई बदलाव नहीं किए गए हैं, तब तक नए कोड के साथ पुराने चेकपॉइंट इस्तेमाल न करें.
    • सेव किए गए मॉडल को फिर से एक्सपोर्ट करें: अगर आपको लगता है कि चेकपॉइंट/कॉन्फ़िगरेशन में कोई गड़बड़ी है, तो सबसे भरोसेमंद तरीका यह है कि सेव किए गए मॉडल को फिर से एक्सपोर्ट करें. इसके लिए, उसी (और मौजूदा) कोडबेस और कॉन्फ़िगरेशन का इस्तेमाल करें जिसका इस्तेमाल अनुमान लगाने या फ़ाइन-ट्यूनिंग के लिए किया जा रहा है.
    • दोनों रन के बीच कॉन्फ़िगरेशन में हुए बदलावों की जांच करें. जैसे, XLA फ़्लैग.
  • हार्डवेयर/टपॉलजी के हिसाब से लेआउट:
    • हार्डवेयर या टोपोलॉजी स्विच करते समय, हार्डवेयर वर्शन और टोपोलॉजी के मेल न खाने की समस्या की जांच करें.