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