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

कैटगरी: कंपाइल टाइम: होस्ट ऑफलोड आउटपुट मेल नहीं खाता

यह गड़बड़ी तब होती है, जब होस्ट मेमोरी में साफ़ तौर पर ऑफ़लोड किए गए किसी टेंसर को प्रोग्राम के आउटपुट के तौर पर दिखाया जाता है. हालांकि, प्रोग्राम के आउटपुट सिग्नेचर को होस्ट मेमोरी के लिए कॉन्फ़िगर नहीं किया गया है.

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

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 बैकएंड: टीपीयू, जीपीयू

खास जानकारी

जब कंपाइलर को किसी टेंसर को होस्ट (सीपीयू) पर ऑफ़लोड करने के लिए एनोटेशन मिलता है, तो वह कंप्यूटेशन ग्राफ़ के ज़रिए उस टेंसर की जगह को तब तक ट्रैक करता है, जब तक कि इनमें से कोई एक इवेंट नहीं हो जाता:

  1. डिवाइस पर ले जाएं: मैच करने वाला एनोटेशन, टेंसर को वापस ऐक्सलरेटर पर ले जाता है.
  2. होस्ट कंप्यूटेशन: इस टेंसर का इस्तेमाल, होस्ट-साइड ऑपरेशन करता है.
  3. प्रोग्राम खत्म होना: जब प्रोग्राम खत्म हो जाता है, तब टेंसर आउटपुट बन जाता है.

यह गड़बड़ी, #3 परिदृश्य में ट्रिगर होती है. एक्ज़ीक्यूशन के आखिर में, टेंसर फ़िज़िकली तौर पर होस्ट मेमोरी में मौजूद होता है. हालांकि, XLA प्रोग्राम के एंट्री कंप्यूटेशन सिग्नेचर से पता चलता है कि वह खास आउटपुट, डिवाइस मेमोरी में मौजूद है. कंपाइलर, एंट्री कंप्यूटेशन के इंटरफ़ेस को अपने-आप नहीं बदल सकता. इसलिए, यह गड़बड़ी दिखाता है.

डीबग करना

इस गड़बड़ी को ठीक करने के लिए, यह तय करें कि आपको इस टेंसर को होस्ट पर आउटपुट के तौर पर इस्तेमाल करना है या इसे वापस डिवाइस पर ले जाना है.

  • होस्ट पर वापस लाने के लिए: अगर आपको इस टेंसर को होस्ट मेमोरी में वापस लाना है (डिवाइस पर वापस ट्रांसफ़र करने से बचना है), तो आपको इस खास आउटपुट के लिए, एंट्री कंप्यूटेशन के आउटपुट मेमोरी स्पेस को होस्ट मेमोरी पर सेट करना होगा.

  • डिवाइस पर वापस लाने के लिए: अगर प्रोग्राम खत्म होने से पहले, टेंसर को डिवाइस पर वापस लाना था, तो हो सकता है कि आपने एनोटेशन नहीं किया हो. टेंसर को डिवाइस पर वापस ले जाने के लिए, मैचिंग एनोटेशन डालें.

अगर ऑफ़लोड किए गए टेंसर का सोर्स साफ़ तौर पर नहीं बताया गया है या आपको यह नहीं मिल रहा है कि "डिवाइस पर ले जाएं" एनोटेशन कहां मौजूद नहीं है, तो निर्देशों को ट्रेस करने के लिए XLA लॉगिंग का इस्तेमाल करें.

  • लॉगिंग चालू करें: अगर Google Cloud TPU का इस्तेमाल किया जा रहा है, तो अपने प्रोग्राम को इस फ़्लैग के साथ फिर से चलाएं: --vmodule=host_offloader=1.
  • लॉग का विश्लेषण करें: लॉग में "ट्रेस" आउटपुट ढूंढें. इससे, ऑफलोड करने के निर्देश से शुरू होने वाले टेंसर का पाथ दिखेगा. इसका इस्तेमाल यह पता लगाने के लिए करें कि डिवाइस पर वापस भेजे बिना, प्रोग्राम की सीमा तक पहुंचने वाला टेंसर कहां है.