يوفر Apache Beam إطارًا لتشغيل مهام معالجة البيانات المجمعة والتدفقية التي تعمل على مجموعة متنوعة من محركات التنفيذ. تستخدم العديد من مكتبات TFX Beam لتشغيل المهام، مما يتيح درجة عالية من قابلية التوسع عبر مجموعات الحوسبة. يتضمن Beam دعمًا لمجموعة متنوعة من محركات التنفيذ أو "المتسابقين"، بما في ذلك المشغل المباشر الذي يعمل على عقدة حسابية واحدة وهو مفيد جدًا للتطوير أو الاختبار أو عمليات النشر الصغيرة. يوفر Beam طبقة تجريد تمكن TFX من التشغيل على أي مشغل مدعوم دون تعديلات التعليمات البرمجية. تستخدم TFX واجهة برمجة تطبيقات Beam Python، لذا فهي تقتصر على العدائين الذين تدعمهم واجهة برمجة تطبيقات Python.
النشر وقابلية التوسع
مع زيادة متطلبات عبء العمل، يمكن لـ Beam التوسع في عمليات النشر الكبيرة جدًا عبر مجموعات الحوسبة الكبيرة. يقتصر هذا فقط على قابلية التوسع للعداء الأساسي. عادةً ما يتم نشر المشغلين في عمليات النشر الكبيرة إلى نظام تنسيق الحاوية مثل Kubernetes أو Apache Mesos لأتمتة نشر التطبيقات وتوسيع نطاقها وإدارتها.
راجع وثائق Apache Beam لمزيد من المعلومات حول Apache Beam.
بالنسبة لمستخدمي Google Cloud، يعد Dataflow هو البرنامج التشغيلي الموصى به، والذي يوفر نظامًا أساسيًا بدون خادم وفعال من حيث التكلفة من خلال التوسع التلقائي للموارد، وإعادة التوازن الديناميكي للعمل، والتكامل العميق مع خدمات Google Cloud الأخرى، والأمان المدمج، والمراقبة.
كود بايثون المخصص والتبعيات
أحد التعقيدات الملحوظة لاستخدام Beam في خط أنابيب TFX هو التعامل مع التعليمات البرمجية المخصصة و/أو التبعيات المطلوبة من وحدات Python الإضافية. فيما يلي بعض الأمثلة على الحالات التي قد تكون فيها هذه مشكلة:
- يحتاج preprocessing_fn إلى الإشارة إلى وحدة Python الخاصة بالمستخدم
- مستخرج مخصص لمكون المقيم
- الوحدات المخصصة التي تم تصنيفها فرعيًا من مكون TFX
تعتمد TFX على دعم Beam لإدارة تبعيات خط أنابيب Python للتعامل مع تبعيات Python. حاليًا هناك طريقتان لإدارة هذا:
- توفير كود بايثون والتبعيات كحزمة مصدر
- [تدفق البيانات فقط] استخدام صورة الحاوية كعامل
وتناقش هذه المقبل.
توفير كود بايثون والتبعيات كحزمة مصدر
يوصى بهذا للمستخدمين الذين:
- على دراية بتغليف Python و
- استخدم كود مصدر Python فقط (أي لا تستخدم وحدات لغة C أو مكتبات مشتركة).
يرجى اتباع أحد المسارات في إدارة تبعيات خط أنابيب Python لتوفير ذلك باستخدام أحد الحزم التالية:
- --setup_file
- --extra_package
- --requirements_file
ملاحظة: في أي من الحالات المذكورة أعلاه، يرجى التأكد من إدراج نفس الإصدار من tfx
باعتباره تبعية.
[تدفق البيانات فقط] استخدام صورة الحاوية للعامل
يتمتع TFX 0.26.0 والإصدارات الأحدث بدعم تجريبي لاستخدام صورة حاوية مخصصة لعمال Dataflow.
من أجل استخدام هذا، عليك:
- أنشئ صورة Docker تحتوي على كل من
tfx
والتعليمات البرمجية المخصصة للمستخدمين والتبعيات المثبتة مسبقًا.- بالنسبة للمستخدمين الذين (1) يستخدمون
tfx>=0.26
و(2) يستخدمون python 3.7 لتطوير خطوط الأنابيب الخاصة بهم، فإن أسهل طريقة للقيام بذلك هي توسيع الإصدار المقابل من صورةtensorflow/tfx
الرسمية:
- بالنسبة للمستخدمين الذين (1) يستخدمون
# 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
- ادفع الصورة التي تم إنشاؤها إلى سجل صور الحاوية الذي يمكن الوصول إليه بواسطة المشروع الذي يستخدمه Dataflow.
- يمكن لمستخدمي Google Cloud التفكير في استخدام Cloud Build الذي يعمل على أتمتة الخطوات المذكورة أعلاه بشكل جيد.
- قم بتوفيرشعاع_
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 بمجرد أن يكون الإعداد الافتراضي لـ Dataflow.
TODO(b/179738639): إنشاء وثائق لكيفية اختبار الحاوية المخصصة محليًا بعد https://issues.apache.org/jira/browse/BEAM-5440
حجج خط أنابيب الشعاع
تعتمد العديد من مكونات TFX على Beam لمعالجة البيانات الموزعة. تمت تهيئتها باستخدام 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([...])