प्रतिनिधि इंटरव्यू विषय

डेटा इंजीनियरिंग साक्षात्कार: आप Arrow C Device Interface के साथ ज़ीरो-कॉपी एक्सचेंज कैसे डिज़ाइन करेंगे?

डेटाकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

दो इन-प्रोसेस डेटा रनटाइम्स को होस्ट-डिवाइस प्रतियों को न्यूनतम करते हुए GPU पर Arrow रिकॉर्ड बैच का आदान-प्रदान करने की आवश्यकता है। Arrow C Device Data Interface के आधार पर, एक्सपोर्ट, सिंक्रोनाइज़ेशन, लाइफ़टाइम, डिवाइस संगतता और विफलता प्रबंधन को डिज़ाइन करें।

प्रॉम्प्ट और संदर्भ

दो इन-प्रोसेस डेटा रनटाइम्स को होस्ट-डिवाइस प्रतियों को न्यूनतम करते हुए GPU पर Arrow रिकॉर्ड बैच का आदान-प्रदान करने की आवश्यकता है। Arrow C Device Data Interface के आधार पर, एक्सपोर्ट, सिंक्रोनाइज़ेशन, लाइफ़टाइम, डिवाइस संगतता और विफलता प्रबंधन को डिज़ाइन करें।

Arrow C Device Interface, C Data Interface को एक डिवाइस प्रकार, डिवाइस आइडेंटिफ़ायर और सिंक्रोनाइज़ेशन इवेंट के साथ विस्तारित करता है ताकि GPU या FPGA मेमोरी डिवाइस पर ही बनी रहे। विनिर्देश को वर्तमान में प्रयोगात्मक (experimental) के रूप में चिह्नित किया गया है। यह इन-प्रोसेस रनटाइम इंटरऑपरेबिलिटी को लक्षित करता है, न कि क्रॉस-मशीन ट्रांसपोर्ट या पर्सिस्टेंस को।

साक्षात्कारकर्ता क्या मूल्यांकन करता है

साक्षात्कारकर्ता स्कीमा, एरे, रिकॉर्ड बैच और डिवाइस बफ़र्स के बीच स्पष्ट अंतर; ArrowDeviceArray का सही उपयोग; CUDA, ROCm, Metal और अन्य डिवाइसों का प्रबंधन; रिलीज़ कॉलबैक्स; रीड-ओनली शेयरिंग; इवेंट लाइफ़टाइम; ABI संगतता; और एक सुरक्षित CPU फ़ॉलबैक की तलाश करता है।

स्पष्टीकरण संबंधी प्रश्न

एक्सचेंज सीमा

पुष्टि करें कि क्या प्रोड्यूसर और कंज़्यूमर एक ही प्रोसेस और डिवाइस संदर्भ साझा करते हैं, क्या क्रॉस-प्रोसेस या क्रॉस-मशीन ट्रांसफ़र आवश्यक है, और क्या कंज़्यूमर Arrow C Device Interface को लागू करता है।

प्रदर्शन और शुद्धता के लक्ष्य

स्पष्ट करें कि लक्ष्य होस्ट-डिवाइस प्रतियों, डिवाइस-टू-डिवाइस प्रतियों, या कर्नेल प्रतीक्षाओं को कम करना है या नहीं, फिर सिंक्रोनाइज़ेशन शुद्धता, फ़ॉलबैक लागत और बैच आकार को परिभाषित करें।

डिवाइस और मेमोरी प्रकार

CUDA, ROCm, Metal, Vulkan, या किसी अन्य डिवाइस प्रकार की पहचान करें; परिभाषित करें कि डिवाइस आईडी कैसे हल की जाती हैं; और तय करें कि क्या यूनिफ़ाइड मेमोरी, पिन्ड होस्ट मेमोरी, या सामान्य CPU बफ़र्स की अनुमति है।

30-सेकंड का उत्तर

“मैं Arrow C Data Interface से स्कीमा और एरे को रखूंगा और डिवाइस प्रकार, डिवाइस आईडी और सिंक्रोनाइज़ेशन इवेंट ले जाने वाला एक ArrowDeviceArray जोड़ूंगा। प्रोड्यूसर डिवाइस बफ़र को तब तक मान्य रखता है जब तक कि इवेंट कंज़्यूमर को इसे पढ़ने की अनुमति न दे दे; दोनों पक्ष एक्सपोर्ट किए गए डेटा को इम्यूटेबल मानते हैं और स्वामित्व को परिभाषित करने के लिए रिलीज़ कॉलबैक्स का उपयोग करते हैं। कंज़्यूमर डिवाइस संदर्भ और ABI संस्करण को मान्य करता है। असमर्थित डिवाइस या इवेंट CPU ArrowArray या एक स्पष्ट कॉपी पर वापस आ जाते हैं। क्योंकि इंटरफ़ेस प्रयोगात्मक है, रिलीज़ परीक्षणों में सिंक्रोनाइज़ेशन, क्लीनअप, डिवाइस हानि और कॉपी रिग्रेशन शामिल होने चाहिए।”

चरण-दर-चरण समाधान

चरण 1: स्कीमा को डेटा से अलग करें

ArrowSchema कॉलम प्रकारों, फ़ील्ड्स और मेटाडेटा का वर्णन करता है। ArrowArray लंबाई, ऑफ़सेट, नल बिटमैप, डेटा बफ़र्स और चिल्ड्रेन का वर्णन करता है। डिवाइस इंटरफ़ेस इन संरचनाओं को बनाए रखता है और शीर्ष-स्तरीय एरे को डिवाइस जानकारी के साथ रैप करता है; GPU बफ़र स्कीमा की आवश्यकता को समाप्त नहीं करता है।

चरण 2: डिवाइस का वर्णन करें

प्रोड्यूसर डिवाइस प्रकार और डिवाइस आईडी भरता है ताकि कंज़्यूमर सही संदर्भ का पता लगा सके। विनिर्देश CPU, CUDA, ROCm, Metal, Vulkan और अन्य डिवाइसों के लिए मैक्रोज़ को परिभाषित करता है। संख्यात्मक मैक्रो मानों को एक अनपेक्षित व्यावसायिक प्रोटोकॉल में न बदलें; क्षमताओं और सहमत डिवाइस प्रकारों की जांच करें।

चरण 3: सिंक्रोनाइज़ेशन इवेंट्स को परिभाषित करें

sync_event कंज़्यूमर को बताता है कि डिवाइस मेमोरी कब पढ़ने के लिए सुरक्षित है। प्रोड्यूसर बफ़र को तब तक मान्य रखता है जब तक इवेंट शब्दार्थ मान्य रहते हैं; कंज़्यूमर कर्नेल लॉन्च करने से पहले एक समतुल्य इवेंट की प्रतीक्षा करता है या उसे आयात करता है। इवेंट का स्वामित्व, थ्रेड सुरक्षा, संदर्भ जुड़ाव और विनाश अनुबंध का हिस्सा हैं, न कि किसी अनिर्दिष्ट पॉइंटर परंपरा का।

चरण 4: ज़ीरो-कॉपी शेयरिंग को इम्यूटेबल बनाएं

ज़ीरो-कॉपी का अर्थ डिवाइस बफ़र को सीधे साझा करना है, न कि किसी होस्ट पॉइंटर को पास करना और यह उम्मीद करना कि रनटाइम कॉपी करने से बचेगा। प्रोड्यूसर और कंज़्यूमर को एक्सपोर्ट किए गए डेटा को इम्यूटेबल मानना चाहिए। यदि कंज़्यूमर को लिखने की आवश्यकता है, तो वह अपने स्वामित्व वाले स्टोरेज में कॉपी करता है या एक स्पष्ट एक्सक्लूसिव-राइट लीज़ प्राप्त करता है।

चरण 5: लाइफ़टाइम प्रबंधित करें

कंज़्यूमर का काम समाप्त होने के बाद एरे, चिल्ड्रेन, स्कीमा और डिवाइस संसाधनों को मुक्त करने के लिए C Data Interface रिलीज़ कॉलबैक का उपयोग करें। प्रोड्यूसर को कॉलबैक से पहले बफ़र्स का पुन: उपयोग या रिलीज़ नहीं करना चाहिए, और कंज़्यूमर को इसे दो बार कॉल नहीं करना चाहिए। कैंसलेशन, क्रैश और डिवाइस रीसेट के लिए अवलोकनीय क्लीनअप पथों की आवश्यकता होती है।

चरण 6: ABI और कार्यान्वयन को सीमित करें

इंटरफ़ेस का उद्देश्य एक छोटी C परिभाषा प्रदान करना है जिसे गैर-C/C++ रनटाइम्स FFI के माध्यम से उजागर कर सकें। यह प्रयोगात्मक है, इसलिए समर्थित संस्करणों, संरचना आकारों, आरक्षित-फ़ील्ड इनिशियलाइज़ेशन और पॉइंटर वैधता को पिन करें। प्रयोगात्मक स्थिति और कार्यान्वयन संबंधी अंतर एक छोटे ABI के साथ भी परिचालन जोखिम बने रहते हैं।

चरण 7: फ़ॉलबैक और सत्यापन

जब कोई डिवाइस प्रकार, संदर्भ, इवेंट आयात, या लाइफ़टाइम गारंटी असमर्थित हो, तो CPU ArrowArray या एक स्पष्ट कॉपी पर वापस जाएं और कारण रिकॉर्ड करें। डिवाइसों, खाली बैचों, नेस्टेड कॉलमों, नल बिटमैप्स, रिलीज़ क्रम, इवेंट टाइमआउट, डिवाइस हानि और होस्ट/डिवाइस कॉपी बेसलाइन का परीक्षण करें।

आदर्श उत्तर

मैं पहले पुष्टि करूंगा कि दोनों रनटाइम्स एक प्रोसेस और डिवाइस इकोसिस्टम साझा करते हैं, फिर एक स्कीमा, एरे और डिवाइस-बफ़र अनुबंध को परिभाषित करूंगा। प्रोड्यूसर डिवाइस प्रकार, डिवाइस आईडी और सिंक्रोनाइज़ेशन इवेंट के साथ एक ArrowDeviceArray एक्सपोर्ट करता है। कंज़्यूमर अपने संदर्भ को मान्य करता है, इवेंट की प्रतीक्षा करता है, और इम्यूटेबल डेटा पढ़ता है। रिलीज़ कॉलबैक्स एरे, चिल्ड्रेन और डिवाइस संसाधनों के मालिक होते हैं; रिलीज़ से पहले बफ़र्स का पुन: उपयोग नहीं किया जा सकता है। इंटरफ़ेस प्रयोगात्मक है, इसलिए डिप्लॉयमेंट कार्यान्वयन संस्करणों को पिन करता है और आरक्षित फ़ील्ड्स को इनिशियलाइज़ करता है। असमर्थित डिवाइस या इवेंट CPU ArrowArray या स्पष्ट कॉपी का उपयोग करते हैं, जबकि टेलीमेट्री सिंक्रोनाइज़ेशन प्रतीक्षाओं, कॉपी किए गए बाइट्स, रिलीज़ त्रुटियों और डिवाइस हानि को मापती है।

सामान्य गलतियाँ

  • गलती: डिवाइस पॉइंटर को क्रॉस-प्रोसेस या क्रॉस-मशीन प्रोटोकॉल के रूप में मानना। → यह क्यों विफल होता है: C Device Interface इन-प्रोसेस एक्सचेंज को लक्षित करता है और एड्रेस-स्पेस या पर्सिस्टेंस शब्दार्थ प्रदान नहीं करता है। → समाधान: सीमाओं के पार IPC या ट्रांसपोर्ट प्रारूप का उपयोग करें, या स्पष्ट रूप से कॉपी करें।
  • गलती: केवल एक डिवाइस प्रकार पास करना और सिंक्रोनाइज़ेशन को अनदेखा करना। → यह क्यों विफल होता है: कंज़्यूमर तब पढ़ सकता है जब प्रोड्यूसर अभी भी लिख रहा हो। → समाधान: इवेंट, संदर्भ, प्रतीक्षा और विनाश स्वामित्व को परिभाषित करें।
  • गलती: दोनों पक्षों को ज़ीरो-कॉपी बफ़र को म्यूटेट करने की अनुमति देना। → यह क्यों विफल होता है: साझा किए गए म्यूटेबल बफ़र्स रेस कंडीशंस और असंगत कॉलम बनाते हैं। → समाधान: डिफ़ॉल्ट रूप से केवल-पढ़ने योग्य डेटा रखें और लिखने के लिए स्वामित्व वाले स्टोरेज का उपयोग करें।
  • गलती: रिलीज़ कॉलबैक दिखाई देते ही संसाधनों को मुक्त कर देना। → यह क्यों विफल होता है: कंज़्यूमर कॉलबैक से पहले अभी भी डिवाइस मेमोरी का उपयोग कर रहा हो सकता है। → समाधान: स्वामी को पूरा होने के बाद केवल एक बार रिलीज़ करने दें और कैंसलेशन तथा त्रुटियों को कवर करें।

फॉलो-अप और उत्तर

ArrowSchema की आवश्यकता अभी भी क्यों है?

डिवाइस इंटरफ़ेस मेमोरी स्थान और सिंक्रोनाइज़ेशन का वर्णन करता है, कॉलम प्रकारों का नहीं। कंज़्यूमर को अभी भी फ़ॉर्मैट स्ट्रिंग्स, चिल्ड्रेन, नल बिटमैप्स और फ़ील्ड मेटाडेटा के लिए स्कीमा की आवश्यकता होती है।

क्या समान डिवाइस आईडी शेयरिंग की गारंटी देती है?

नहीं। रनटाइम, संदर्भ, एलोकेटर और इवेंट संगतता भी मायने रखती है। एक डिवाइस आईडी संसाधन का पता लगाती है; यह क्षमता समझौते (capability negotiation) की जगह नहीं लेती है।

आपको जानबूझकर कब कॉपी करनी चाहिए?

कॉपी तब करें जब कंज़्यूमर के पास डिवाइस समर्थन की कमी हो, इवेंट आयात न कर सके, लाइफ़टाइम साबित न कर सके, या प्रोसेस सीमा पार कर रहा हो। यह तय करने से पहले कि क्या एक गहरा इंटरऑपरेबिलिटी स्तर सार्थक है, कॉपी लागत को मापें।

आप कैसे साबित करते हैं कि ज़ीरो-कॉपी वास्तविक है?

CPU-बफ़र और स्पष्ट-कॉपी बेसलाइन के विरुद्ध होस्ट-टू-डिवाइस और डिवाइस-टू-होस्ट बाइट्स, सिंक्रोनाइज़ेशन प्रतीक्षा, कर्नेल-प्रारंभ विलंबता और एंड-टू-एंड थ्रूपुट को मापें। केवल कुल बीता हुआ समय यह साबित नहीं कर सकता कि छिपी हुई प्रतियां अनुपस्थित हैं।

सार्वजनिक स्रोत

संबंधित प्रश्न