इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

XLA के लिए एक नया बैकएंड विकसित करना

यह प्रारंभिक मार्गदर्शिका शुरुआती दत्तक ग्रहण करने वालों के लिए है जो अपने हार्डवेयर को एक कुशल तरीके से आसानी से TensorFlow को फिर से प्राप्त करना चाहते हैं। गाइड स्टेप-बाय-स्टेप नहीं है और LLVM , Bazel , और TensorFlow के ज्ञान को मानता है।

XLA एक अमूर्त इंटरफ़ेस प्रदान करता है जो कि एक नया आर्किटेक्चर या एक्सेलेरेटर TensorFlow रेखांकन को चलाने के लिए बैकएंड बनाने के लिए कार्यान्वित कर सकता है। नए हार्डवेयर के लिए हर मौजूदा TensorFlow Op को लागू करने की तुलना में XLA को फिर से बनाना काफी सरल और मापनीय होना चाहिए।

अधिकांश कार्यान्वयन निम्नलिखित परिदृश्यों में से एक में आएंगे:

  1. मौजूदा CPU आर्किटेक्चर अभी तक आधिकारिक तौर पर XLA के साथ या बिना मौजूदा LLVM बैकएंड द्वारा समर्थित नहीं है।
  2. गैर-सीपीयू जैसा हार्डवेयर मौजूदा एलएलवीएम बैकएंड के साथ।
  3. बिना मौजूदा एलएलवीएम बैकएंड के बिना नॉन-सीपीयू जैसा हार्डवेयर।

परिदृश्य 1: मौजूदा सीपीयू आर्किटेक्चर अभी तक आधिकारिक तौर पर XLA द्वारा समर्थित नहीं है

इस परिदृश्य में, मौजूदा XLA CPU बैकएंड को देखकर शुरू करें। XLA एलएलवीएम का उपयोग करके विभिन्न सीपीयू को TensorFlow को फिर से बनाना आसान बनाता है, क्योंकि CPU के लिए XLA बैकेंड के बीच मुख्य अंतर LLVM द्वारा उत्पन्न कोड है। Google ने X64 और ARM64 आर्किटेक्चर के लिए XLA का परीक्षण किया।

यदि हार्डवेयर विक्रेता के पास अपने हार्डवेयर के लिए LLVM बैकएंड है, तो बैकएंड को XLA के साथ निर्मित LLVM से जोड़ना सरल है। JIT मोड में, XLA CPU बैकएंड होस्ट CPU के लिए कोड का उत्सर्जन करता है। आगे के समय के संकलन के लिए, xla::AotCompilationOptions लक्ष्य आर्किटेक्चर को कॉन्फ़िगर करने के लिए LLVM ट्रिपल प्रदान कर सकता है।

यदि कोई मौजूदा एलएलवीएम बैकेंड नहीं है, लेकिन एक अन्य प्रकार का कोड जनरेटर मौजूद है, तो मौजूदा सीपीयू बैकेंड के अधिकांश का पुन: उपयोग करना संभव है।

परिदृश्य 2: गैर-सीपीयू जैसा हार्डवेयर मौजूदा एलएलवीएम बैकएंड के साथ

नए xla::Compiler को बनाना संभव है xla::Compiler मौजूदा xla::CPUCompiler पर xla::Compiler कार्यान्वयन xla::CPUCompiler और xla::GPUCompiler वर्ग, क्योंकि ये पहले से ही LLVM IR का उत्सर्जन करते हैं। हार्डवेयर की प्रकृति के आधार पर, यह संभव है कि एलएलवीएम आईआर पीढ़ी के कई पहलुओं को बदलना होगा, लेकिन मौजूदा बैकेंड के साथ बहुत सारे कोड साझा किए जा सकते हैं।

पालन ​​करने के लिए एक अच्छा उदाहरण XLA का GPU बैकेंड है। GPU बैकएंड एक गैर-सीपीयू-जैसे ISA को लक्षित करता है, और इसलिए इसकी कोड पीढ़ी के कुछ पहलू GPU डोमेन के लिए अद्वितीय हैं। अन्य प्रकार के हार्डवेयर, उदाहरण के लिए डीएसपी जैसे हेक्सागोन (जिसमें एक अपस्ट्रीम एलएलवीएम बैकेंड है), एलएलवीएम आईआर उत्सर्जन तर्क के कुछ हिस्सों का पुन: उपयोग कर सकता है, लेकिन अन्य भाग अद्वितीय होंगे।

परिदृश्य 3: गैर-सीपीयू जैसा हार्डवेयर मौजूदा एलएलवीएम बैकएंड के बिना

यदि एलएलवीएम का उपयोग करना संभव नहीं है, तो सबसे अच्छा विकल्प वांछित हार्डवेयर के लिए एक्सएलए के लिए एक नया बैकेंड लागू करना है। इस विकल्प के लिए सबसे अधिक प्रयास की आवश्यकता होती है। जिन वर्गों को लागू करने की आवश्यकता है वे निम्नानुसार हैं:

  • StreamExecutor : कई उपकरणों के लिए के सभी तरीकों नहीं StreamExecutor की जरूरत है। विवरण के लिए मौजूदा StreamExecutor कार्यान्वयन देखें।
  • xla::Compiler : यह वर्ग एक Xla में एक HLO संगणना के संकलन का अर्थ xla::Executable
  • xla::Executable : इस वर्ग का उपयोग प्लेटफ़ॉर्म पर संकलित कम्प्यूटेशन लॉन्च करने के लिए किया जाता है।
  • xla::TransferManager : यह वर्ग दिए गए डिवाइस मेमोरी हैंडल से XLA शाब्दिक डेटा के निर्माण के लिए प्लेटफ़ॉर्म-विशिष्ट तंत्र प्रदान करने में सक्षम बनाता है। दूसरे शब्दों में, यह मेजबान से डिवाइस और पीछे डेटा के हस्तांतरण को बाधित करने में मदद करता है।