Apache Beam چارچوبی برای اجرای دسته ای و استریم کارهای پردازش داده ارائه می دهد که بر روی انواع موتورهای اجرایی اجرا می شوند. تعدادی از کتابخانههای TFX از Beam برای اجرای وظایف استفاده میکنند که درجه بالایی از مقیاسپذیری را در میان خوشههای محاسباتی ممکن میسازد. Beam شامل پشتیبانی از انواع موتورهای اجرایی یا "runners" میشود، از جمله یک runner مستقیم که روی یک گره محاسباتی اجرا میشود و برای توسعه، آزمایش یا استقرار کوچک بسیار مفید است. Beam یک لایه انتزاعی را فراهم می کند که TFX را قادر می سازد بر روی هر runner پشتیبانی شده بدون تغییر کد اجرا شود. TFX از Beam Python API استفاده می کند، بنابراین محدود به رانرهایی است که توسط Python API پشتیبانی می شوند.
استقرار و مقیاس پذیری
با افزایش نیازهای حجم کار، پرتو می تواند به استقرارهای بسیار بزرگ در میان خوشه های محاسباتی بزرگ مقیاس شود. این تنها با مقیاس پذیری دونده زیرین محدود می شود. دوندگان در استقرارهای بزرگ معمولاً به یک سیستم ارکستراسیون کانتینری مانند Kubernetes یا Apache Mesos برای خودکارسازی استقرار، مقیاسبندی و مدیریت برنامهها مستقر میشوند.
برای اطلاعات بیشتر در مورد پرتو آپاچی به مستندات Apache Beam مراجعه کنید.
برای کاربران Google Cloud، Dataflow راهاندازی توصیهشده است که یک پلتفرم بدون سرور و مقرونبهصرفه را از طریق مقیاس خودکار منابع، تعادل مجدد کار پویا، یکپارچهسازی عمیق با سایر سرویسهای Google Cloud، امنیت داخلی و نظارت فراهم میکند.
کدهای سفارشی پایتون و وابستگی ها
یکی از پیچیدگی های قابل توجه استفاده از Beam در خط لوله TFX، مدیریت کد سفارشی و/یا وابستگی های مورد نیاز از ماژول های اضافی پایتون است. در اینجا چند نمونه از مواردی که ممکن است مشکل باشد آورده شده است:
- preprocessing_fn باید به ماژول پایتون خود کاربر مراجعه کند
- یک استخراج کننده سفارشی برای مولفه Evaluator
- ماژول های سفارشی که از یک جزء TFX زیر کلاس هستند
TFX برای مدیریت وابستگیهای پایتون به پشتیبانی Beam برای مدیریت وابستگیهای پایتون پایتون متکی است. در حال حاضر دو راه برای مدیریت این موضوع وجود دارد:
- ارائه کدهای پایتون و وابستگی ها به عنوان بسته منبع
- [فقط جریان داده] استفاده از تصویر کانتینر به عنوان کارگر
در ادامه به این موارد پرداخته می شود.
ارائه کدهای پایتون و وابستگی ها به عنوان یک بسته منبع
این برای کاربرانی که:
- آشنایی با بسته بندی پایتون و
- فقط از کد منبع پایتون استفاده کنید (یعنی بدون ماژول C یا کتابخانه های مشترک).
لطفاً یکی از مسیرهای مدیریت وابستگی خط لوله پایتون را دنبال کنید تا این مورد را با استفاده از یکی از beam_pipeline_args زیر ارائه دهید:
- --setup_file
- --بسته_اضافی
- --requirements_file
توجه: در هر یک از موارد فوق، لطفاً مطمئن شوید که همان نسخه tfx
به عنوان یک وابستگی فهرست شده است.
[فقط جریان داده] استفاده از تصویر ظرف برای کارگر
TFX 0.26.0 و بالاتر دارای پشتیبانی آزمایشی برای استفاده از تصویر کانتینر سفارشی برای کارگران Dataflow است.
برای استفاده از این، باید:
- یک تصویر Docker بسازید که هم
tfx
و هم کد سفارشی و وابستگی های کاربران را از قبل نصب کرده باشد.- برای کاربرانی که (1) از
tfx>=0.26
و (2) از پایتون 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): پس از پیشفرض بودن Dataflow، use_runner_v2 را حذف کنید.
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([...])