شعاع أباتشي وTFX

يوفر 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. حاليًا هناك طريقتان لإدارة هذا:

  1. توفير كود بايثون والتبعيات كحزمة مصدر
  2. [تدفق البيانات فقط] استخدام صورة الحاوية كعامل

وتناقش هذه المقبل.

توفير كود بايثون والتبعيات كحزمة مصدر

يوصى بهذا للمستخدمين الذين:

  1. على دراية بتغليف Python و
  2. استخدم كود مصدر Python فقط (أي لا تستخدم وحدات لغة C أو مكتبات مشتركة).

يرجى اتباع أحد المسارات في إدارة تبعيات خط أنابيب Python لتوفير ذلك باستخدام أحدشعاع_pipeline_args التالي:

  • --setup_file
  • --extra_package
  • --requirements_file

ملاحظة: في أي من الحالات المذكورة أعلاه، يرجى التأكد من إدراج نفس الإصدار من tfx باعتباره تبعية.

[تدفق البيانات فقط] استخدام صورة الحاوية للعامل

يتمتع TFX 0.26.0 والإصدارات الأحدث بدعم تجريبي لاستخدام صورة حاوية مخصصة لعمال Dataflow.

من أجل استخدام هذا، عليك:

  • أنشئ صورة Docker تحتوي على كل من tfx والتعليمات البرمجية المخصصة للمستخدمين والتبعيات المثبتة مسبقًا.
    • بالنسبة للمستخدمين الذين (1) يستخدمون tfx>=0.26 و(2) يستخدمون python 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
  • ادفع الصورة التي تم إنشاؤها إلى سجل صور الحاوية الذي يمكن الوصول إليه بواسطة المشروع الذي يستخدمه 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([...])