अपाचे बीम और टीएफएक्स

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

परिनियोजन और स्केलेबिलिटी

जैसे-जैसे कार्यभार की आवश्यकताएं बढ़ती हैं, बीम बड़े कंप्यूटिंग समूहों में बहुत बड़ी तैनाती तक स्केल कर सकता है। यह केवल अंतर्निहित धावक की मापनीयता द्वारा सीमित है। बड़े परिनियोजन में धावकों को आमतौर पर एप्लिकेशन परिनियोजन, स्केलिंग और प्रबंधन को स्वचालित करने के लिए कुबेरनेट्स या अपाचे मेसोस जैसे कंटेनर ऑर्केस्ट्रेशन सिस्टम पर तैनात किया जाएगा।

अपाचे बीम पर अधिक जानकारी के लिए अपाचे बीम दस्तावेज़ देखें।

Google क्लाउड उपयोगकर्ताओं के लिए, डेटाफ़्लो अनुशंसित रनर है, जो संसाधनों की ऑटोस्केलिंग, गतिशील कार्य पुनर्संतुलन, अन्य Google क्लाउड सेवाओं के साथ गहन एकीकरण, अंतर्निहित सुरक्षा और निगरानी के माध्यम से एक सर्वर रहित और लागत प्रभावी प्लेटफ़ॉर्म प्रदान करता है।

कस्टम पायथन कोड और निर्भरताएँ

टीएफएक्स पाइपलाइन में बीम का उपयोग करने की एक उल्लेखनीय जटिलता कस्टम कोड और/या अतिरिक्त पायथन मॉड्यूल से आवश्यक निर्भरता को संभालना है। यहां कुछ उदाहरण दिए गए हैं कि यह कब एक समस्या हो सकती है:

  • preprocessing_fn को उपयोगकर्ता के स्वयं के पायथन मॉड्यूल को संदर्भित करने की आवश्यकता है
  • मूल्यांकनकर्ता घटक के लिए एक कस्टम एक्सट्रैक्टर
  • कस्टम मॉड्यूल जो TFX घटक से उप-वर्गीकृत हैं

टीएफएक्स पायथन निर्भरता को संभालने के लिए पायथन पाइपलाइन निर्भरता के प्रबंधन के लिए बीम के समर्थन पर निर्भर करता है। वर्तमान में इसे प्रबंधित करने के दो तरीके हैं:

  1. स्रोत पैकेज के रूप में पायथन कोड और निर्भरताएँ प्रदान करना
  2. [केवल डेटा प्रवाह] कार्यकर्ता के रूप में एक कंटेनर छवि का उपयोग करना

इन पर आगे चर्चा की गई है।

स्रोत पैकेज के रूप में पायथन कोड और निर्भरताएँ प्रदान करना

यह उन उपयोगकर्ताओं के लिए अनुशंसित है जो:

  1. पायथन पैकेजिंग से परिचित हैं और
  2. केवल पायथन स्रोत कोड का उपयोग करें (यानी, कोई सी मॉड्यूल या साझा लाइब्रेरी नहीं)।

निम्नलिखित में से किसी एक किरण_पाइपलाइन_आर्ग का उपयोग करके इसे प्रदान करने के लिए कृपया पायथन पाइपलाइन निर्भरता के प्रबंधन में किसी एक पथ का अनुसरण करें:

  • --setup_file
  • --अतिरिक्त_पैकेज
  • --requirements_file

सूचना: उपरोक्त किसी भी मामले में, कृपया सुनिश्चित करें कि tfx का वही संस्करण निर्भरता के रूप में सूचीबद्ध है।

[केवल डेटा प्रवाह] एक कार्यकर्ता के लिए एक कंटेनर छवि का उपयोग करना

TFX 0.26.0 और इसके बाद के संस्करण में डेटाफ़्लो श्रमिकों के लिए कस्टम कंटेनर छवि का उपयोग करने के लिए प्रयोगात्मक समर्थन है।

इसका उपयोग करने के लिए, आपको यह करना होगा:

  • एक डॉकर छवि बनाएं जिसमें tfx और उपयोगकर्ताओं के कस्टम कोड और निर्भरताएं दोनों पहले से इंस्टॉल हों।
    • उन उपयोगकर्ताओं के लिए जो (1) tfx>=0.26 उपयोग करते हैं और (2) अपनी पाइपलाइनों को विकसित करने के लिए पायथन 3.7 का उपयोग करते हैं, ऐसा करने का सबसे आसान तरीका आधिकारिक tensorflow/tfx छवि के संबंधित संस्करण का विस्तार करना है:
# You can use a build-arg to dynamically pass in the
# version of TFX being used to your Dockerfile.

ARG TFX_VERSION
FROM tensorflow/tfx:${TFX_VERSION}
# COPY your code and dependencies in
  • निर्मित छवि को एक कंटेनर छवि रजिस्ट्री में पुश करें जो डेटाफ़्लो द्वारा उपयोग किए गए प्रोजेक्ट द्वारा पहुंच योग्य है।
    • Google क्लाउड उपयोगकर्ता क्लाउड बिल्ड का उपयोग करने पर विचार कर सकते हैं जो उपरोक्त चरणों को अच्छी तरह से स्वचालित करता है।
  • निम्नलिखित beam_pipeline_args प्रदान करें:
beam_pipeline_args.extend([
    '--runner=DataflowRunner',
    '--project={project-id}',
    '--worker_harness_container_image={image-ref}',
    '--experiments=use_runner_v2',
])

TODO(b/171733562): डेटाफ्लो के लिए डिफ़ॉल्ट होने पर use_runner_v2 को हटा दें।

TODO(b/179738639): https://issues.apache.org/jira/browse/BEAM-5440 के बाद स्थानीय स्तर पर कस्टम कंटेनर का परीक्षण करने के तरीके के लिए दस्तावेज़ बनाएं

बीम पाइपलाइन तर्क

कई टीएफएक्स घटक वितरित डेटा प्रोसेसिंग के लिए बीम पर निर्भर हैं। उन्हें beam_pipeline_args के साथ कॉन्फ़िगर किया गया है, जो पाइपलाइन निर्माण के दौरान निर्दिष्ट किया गया है:

my_pipeline = Pipeline(
    ...,
    beam_pipeline_args=[...])

TFX 0.30 और इसके बाद के संस्करण प्रत्येक घटक के लिए पाइपलाइन स्तर बीम आर्ग्स को विस्तारित करने के लिए with_beam_pipeline_args एक इंटरफ़ेस जोड़ता है:

example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])