خط لوله TFX را با استفاده از الگوهای با Beam orchestrator ایجاد کنید

معرفی

این سند دستورالعمل برای ایجاد یک TensorFlow تمدید یا TFX خط لوله با استفاده از قالب که با بسته TFX پایتون ارائه کند. بسیاری از دستورالعمل دستورات لینوکس پوسته هستند، و Jupyter سلول های کد نوت بوک که آن دستورات فراخوانی با استفاده از مربوطه ! ارائه شده است.

شما یک خط لوله با استفاده از ساخت تاکسی سفر مجموعه داده های منتشر شده توسط شهر شیکاگو. ما قویاً شما را تشویق می‌کنیم که با استفاده از این خط لوله به‌عنوان خط پایه، با استفاده از مجموعه داده خود، خط لوله خود را بسازید.

ما یک خط لوله با استفاده از ساخت آپاچی پرتو ارکستراسیون . اگر شما در استفاده از Kubeflow رهبر ارکستر در Google Cloud علاقه مند، لطفا TFX در آموزش ابر AI بستر های نرم افزاری خط لوله .

پیش نیازها

  • لینوکس / MacOS
  • پایتون >= 3.5.3

شما می توانید همه پیش نیازها به راحتی توسط گرفتن در حال اجرا این نوت بوک را در گوگل COLAB .

مرحله 1. محیط خود را تنظیم کنید.

در طول این سند، دو بار دستورات را ارائه خواهیم کرد. یک بار به عنوان یک دستور پوسته آماده کپی و چسباندن، یک بار به عنوان سلول نوت بوک jupyter. اگر از Colab استفاده می کنید، فقط از بلوک اسکریپت پوسته صرفنظر کنید و سلول های نوت بوک را اجرا کنید.

شما باید یک محیط توسعه برای ساخت خط لوله آماده کنید.

نصب tfx بسته پایتون. ما توصیه می کنیم استفاده از virtualenv در محیط محلی است. می توانید از قطعه اسکریپت پوسته زیر برای تنظیم محیط خود استفاده کنید.

# Create a virtualenv for tfx.
virtualenv -p python3 venv
source venv/bin/activate
# Install python packages.
python -m pip install -q --user --upgrade tfx==0.23.0

اگر از کولب استفاده می کنید:

import sys
!{sys.executable} -m pip install -q --user --upgrade -q tfx==0.23.0

خطا: some-package 0.some_version.1 دارای نیازمندی other-package!=2.0.,<3,>=1.15 است، اما بسته دیگر 2.0.0 را خواهید داشت که ناسازگار است.

لطفا در این لحظه این خطاها را نادیده بگیرید.

# Set `PATH` to include user python binary directory.
HOME=%env HOME
PATH=%env PATH
%env PATH={PATH}:{HOME}/.local/bin
env: PATH=/tmpfs/src/tf_docs_env/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin:/opt/android-studio/current/bin:/usr/local/go/bin:/usr/local/go/packages/bin:/opt/kubernetes/client/bin/:/home/kbuilder/.local/bin:/home/kbuilder/.local/bin

بیایید نسخه TFX را بررسی کنیم.

python -c "import tfx; print('TFX version: {}'.format(tfx.__version__))"
python3 -c "import tfx; print('TFX version: {}'.format(tfx.__version__))"
TFX version: 0.23.0

و انجام شد. ما آماده ایجاد یک خط لوله هستیم.

مرحله 2. الگوی از پیش تعریف شده را در فهرست پروژه خود کپی کنید.

در این مرحله، با کپی کردن فایل های اضافی از یک الگوی از پیش تعریف شده، یک فهرست راهنمای پروژه خط لوله و فایل های کار ایجاد می کنیم.

شما نمیتوانید خط لوله خود را به نام های مختلف با تغییر دادن PIPELINE_NAME زیر کلیک کنید. این همچنین به نام دایرکتوری پروژه تبدیل می شود که فایل های شما در آن قرار می گیرند.

export PIPELINE_NAME="my_pipeline"
export PROJECT_DIR=~/tfx/${PIPELINE_NAME}
PIPELINE_NAME="my_pipeline"
import os
# Create a project directory under Colab content directory.
PROJECT_DIR=os.path.join(os.sep,"content",PIPELINE_NAME)

TFX شامل taxi قالب با بسته TFX پایتون. اگر قصد دارید یک مشکل پیش‌بینی نقطه‌ای، از جمله طبقه‌بندی و رگرسیون را حل کنید، این الگو می‌تواند به عنوان نقطه شروع استفاده شود.

tfx template copy CLI نسخه فرمان فایل های قالب را به دایرکتوری پروژه خود را از پیش تعریف شده.

tfx template copy \
   --pipeline_name="${PIPELINE_NAME}" \
   --destination_path="${PROJECT_DIR}" \
   --model=taxi
!tfx template copy \
  --pipeline_name={PIPELINE_NAME} \
  --destination_path={PROJECT_DIR} \
  --model=taxi
2020-09-07 09:09:40.131982: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Copying taxi pipeline template
Traceback (most recent call last):
  File "/home/kbuilder/.local/bin/tfx", line 8, in <module>
    sys.exit(cli_group())
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/commands/template.py", line 73, in copy
    template_handler.copy_template(ctx.flags_dict)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/handler/template_handler.py", line 168, in copy_template
    replace_dict)
  File "/home/kbuilder/.local/lib/python3.6/site-packages/tfx/tools/cli/handler/template_handler.py", line 107, in _copy_and_replace_placeholder_dir
    tf.io.gfile.makedirs(dst)
  File "/tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow/python/lib/io/file_io.py", line 480, in recursive_create_dir_v2
    _pywrap_file_io.RecursivelyCreateDir(compat.as_bytes(path))
tensorflow.python.framework.errors_impl.PermissionDeniedError: /content; Permission denied

زمینه دایرکتوری کاری در این نوت بوک را به دایرکتوری پروژه تغییر دهید.

cd ${PROJECT_DIR}
%cd {PROJECT_DIR}
[Errno 2] No such file or directory: '/content/my_pipeline'
/tmpfs/src/temp/docs/tutorials/tfx

مرحله 3. فایل های منبع کپی شده خود را مرور کنید.

قالب TFX فایل‌های داربست اولیه را برای ساخت یک خط لوله، از جمله کد منبع پایتون، داده‌های نمونه و نوت‌بوک‌های Jupyter برای تجزیه و تحلیل خروجی خط لوله ارائه می‌کند. taxi قالب با استفاده از همان مجموعه داده شیکاگو تاکسی و مدل ML به عنوان جریان هوا آموزش .

در Google Colab، می‌توانید با کلیک کردن روی نماد پوشه در سمت چپ، فایل‌ها را مرور کنید. فایل های باید تحت directoy پروژه، که نام است کپی my_pipeline در این مورد. می‌توانید روی نام‌های دایرکتوری کلیک کنید تا محتوای دایرکتوری را ببینید و روی نام فایل‌ها برای باز کردن آنها دوبار کلیک کنید.

در اینجا به معرفی مختصر هر یک از فایل های پایتون می پردازیم.

  • pipeline - این پوشه شامل تعریف از خط لوله
    • configs.py - ثابت مشترک برای دونده خط لوله را تعریف می کند
    • pipeline.py - تعریف اجزای TFX و یک خط لوله
  • models - این پوشه شامل تعاریف مدل ML.
    • features.py ، features_test.py - تعریف ویژگی های برای مدل
    • preprocessing.py ، preprocessing_test.py - تعریف پیش پردازش شغل با استفاده از tf::Transform
    • estimator - این پوشه شامل یک مدل بر اساس برآورد.
      • constants.py - تعریف ثابت از مدل
      • model.py ، model_test.py - مدل DNN با استفاده از برآوردگر TF تعریف
    • keras - این پوشه شامل یک مدل مبتنی بر Keras.
      • constants.py - تعریف ثابت از مدل
      • model.py ، model_test.py - مدل DNN با استفاده از Keras تعریف
  • beam_dag_runner.py ، kubeflow_dag_runner.py - تعریف دونده برای هر موتور ارکستراسیون

شما ممکن است متوجه شده باشید که برخی از فایل های با _test.py به نام خود. اینها آزمایشات واحد خط لوله هستند و توصیه می شود همزمان با اجرای خطوط لوله خود، آزمایشات واحد بیشتری را اضافه کنید. شما می توانید تست های واحد تهیه شده توسط نام ماژول از فایل های آزمون با اجرای -m پرچم. شما معمولا می توانید یک نام ماژول با حذف از .py گسترش و جایگزین / با . . مثلا:

python -m models.features_test
{sys.executable} -m models.features_test
{sys.executable} -m models.keras.model_test
/tmpfs/src/tf_docs_env/bin/python: Error while finding module specification for 'models.features_test' (ModuleNotFoundError: No module named 'models')
/tmpfs/src/tf_docs_env/bin/python: Error while finding module specification for 'models.keras.model_test' (ModuleNotFoundError: No module named 'models')

مرحله 4. اولین خط لوله TFX خود را اجرا کنید

شما می توانید با استفاده از یک خط لوله ایجاد pipeline create فرمان.

tfx pipeline create --engine=beam --pipeline_path=beam_dag_runner.py
tfx pipeline create --engine=beam --pipeline_path=beam_dag_runner.py
2020-09-07 09:09:45.612839: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating pipeline
Invalid pipeline path: beam_dag_runner.py

سپس شما می توانید این خط لوله ایجاد شده با استفاده اجرا run create فرمان.

tfx run create --engine=beam --pipeline_name="${PIPELINE_NAME}"
tfx run create --engine=beam --pipeline_name={PIPELINE_NAME}
2020-09-07 09:09:50.725339: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

در صورت موفقیت، شما خواهید دید که Component CsvExampleGen is finished. هنگامی که الگو را کپی می کنید، تنها یک جزء، CsvExampleGen، در خط لوله گنجانده می شود.

مرحله 5. اجزایی را برای اعتبارسنجی داده ها اضافه کنید.

در این مرحله، به شما خواهد اجزای سازنده برای اعتبار سنجی داده ها از جمله اضافه کردن StatisticsGen ، SchemaGen و ExampleValidator . اگر شما در اعتبار سنجی داده ها علاقه مند، لطفا به کار با Tensorflow داده ها اعتبار آغاز شده .

ما تعریف خط لوله کپی در تغییر خواهد pipeline/pipeline.py . اگر روی محیط محلی خود کار می کنید، از ویرایشگر مورد علاقه خود برای ویرایش فایل استفاده کنید. اگر روی Google Colab کار می کنید،

کلیک بر روی آیکون پوشه در سمت چپ به باز Files نمایش.

کلیک کنید my_pipeline برای باز کردن پوشه و کلیک کنید pipeline دایرکتوری به باز و دوبار کلیک کنید pipeline.py برای باز کردن فایل.

پیدا کردن و کامنت 3 خط که اضافه کردن StatisticsGen ، SchemaGen و ExampleValidator به خط لوله. (نکته: پیدا نظرات حاوی TODO(step 5): ).

تغییر شما در عرض چند ثانیه به صورت خودکار ذخیره می شود. اطمینان حاصل کنید که * علامت در مقابل pipeline.py در عنوان زبانه ناپدید شد. هیچ دکمه ذخیره یا میانبری برای ویرایشگر فایل در Colab وجود ندارد. فایل های پایتون در ویرایشگر فایل را می توان به محیط زمان اجرا حتی در نجات playground حالت.

اکنون باید خط لوله موجود را با تعریف خط لوله اصلاح شده به روز کنید. استفاده از tfx pipeline update دستور برای به روز رسانی خط لوله خود را، پس از tfx run create دستور برای ایجاد یک اعدام اجرا جدید از خط لوله به روز خود را.

# Update the pipeline
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
# You can run the pipeline the same way.
tfx run create --engine beam --pipeline_name "${PIPELINE_NAME}"
# Update the pipeline
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
# You can run the pipeline the same way.
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:09:55.915484: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:01.148250: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

شما باید بتوانید گزارش خروجی را از اجزای اضافه شده مشاهده کنید. خط لوله ما مصنوعات خروجی در ایجاد tfx_pipeline_output/my_pipeline دایرکتوری.

مرحله 6. اجزاء را برای آموزش اضافه کنید.

در این مرحله، شما قطعات برای آموزش و اعتبار مدل از جمله اضافه کردن Transform ، Trainer ، ResolverNode ، Evaluator و Pusher .

گسترش pipeline/pipeline.py . پیدا کردن و کامنت 5 خط که اضافه کردن Transform ، Trainer ، ResolverNode ، Evaluator و Pusher به خط لوله. (نکته: برای یافتن TODO(step 6): )

همانطور که قبلا انجام دادید، اکنون باید خط لوله موجود را با تعریف خط لوله اصلاح شده به روز کنید. دستورالعمل همان مرحله 5. به روز رسانی این خط لوله با استفاده از می tfx pipeline update ، و ایجاد یک اجرا اعدام با استفاده از tfx run create .

tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name "${PIPELINE_NAME}"
tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:10:06.281753: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:11.333668: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

وقتی این اجرا با موفقیت به پایان رسید، اکنون اولین خط لوله TFX خود را با استفاده از Beam Orchestrator ایجاد و اجرا کرده اید!

مرحله 7. (اختیاری) سعی کنید BigQueryExampleGen.

[BigQuery] یک انبار داده ابری بدون سرور، بسیار مقیاس پذیر و مقرون به صرفه است. BigQuery می تواند به عنوان منبعی برای مثال های آموزشی در TFX استفاده شود. در این مرحله، ما اضافه خواهد شد BigQueryExampleGen به خط لوله.

شما نیاز به یک پلتفرم ابری گوگل حساب برای استفاده از BigQuery مشاهده. لطفا یک پروژه GCP آماده کنید.

ورود به پروژه خود با استفاده از کتابخانه تایید COLAB یا gcloud ابزار.

# You need `gcloud` tool to login in local shell environment.
gcloud auth login
if 'google.colab' in sys.modules:
  from google.colab import auth
  auth.authenticate_user()
  print('Authenticated')

برای دسترسی به منابع BigQuery با استفاده از TFX باید نام پروژه GCP خود را مشخص کنید. مجموعه GOOGLE_CLOUD_PROJECT متغیر محیطی به نام پروژه خود را.

export GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE
# Set your project name below.
# WARNING! ENTER your project name before running this cell.
%env GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE
env: GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_NAME_HERE

گسترش pipeline/pipeline.py . اظهار نظر از CsvExampleGen و کامنت خط که ایجاد یک نمونه از BigQueryExampleGen . همچنین به کامنت نیاز query استدلال از create_pipeline تابع.

ما نیاز به مشخص کنید که کدام پروژه GCP برای استفاده برای BigQuery مشاهده دوباره، و این است که با تنظیم انجام --project در beam_pipeline_args در هنگام ایجاد یک خط لوله است.

گسترش pipeline/configs.py . کامنت تعریف BIG_QUERY__WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGS و BIG_QUERY_QUERY . شما باید شناسه پروژه و مقدار منطقه را در این فایل با مقادیر صحیح پروژه GCP خود جایگزین کنید.

گسترش beam_dag_runner.py . دو استدلال کامنت، query و beam_pipeline_args ، برای روش های create_pipeline ().

اکنون خط لوله آماده استفاده از BigQuery به عنوان منبع نمونه است. خط لوله را به روز کنید و مانند مراحل 5 و 6 یک اجرا ایجاد کنید.

tfx pipeline update --engine=beam --pipeline_path=beam_dag_runner.py
tfx run create --engine beam --pipeline_name {PIPELINE_NAME}
2020-09-07 09:10:16.406635: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Updating pipeline
Invalid pipeline path: beam_dag_runner.py
2020-09-07 09:10:21.439101: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1
CLI
Creating a run for pipeline: my_pipeline
Pipeline "my_pipeline" does not exist.

بعدی: داده های خود را وارد خط لوله کنید.

ما یک خط لوله برای یک مدل با استفاده از مجموعه داده تاکسی شیکاگو ایجاد کردیم. اکنون زمان آن است که داده های خود را در خط لوله قرار دهید.

داده های شما را می توان در هر جایی که خط لوله شما به آن دسترسی داشته باشد ذخیره کرد، از جمله GCS یا BigQuery. برای دسترسی به داده های خود باید تعریف خط لوله را تغییر دهید.

  1. اگر اطلاعات خود را در فایل های ذخیره شده، تغییر DATA_PATH در kubeflow_dag_runner.py یا beam_dag_runner.py و آن را به محل فایل های خود را. اگر اطلاعات خود را در BigQuery مشاهده ذخیره می شود، تغییر BIG_QUERY_QUERY در pipeline/configs.py به درستی پرس و جو برای داده های خود را.
  2. اضافه کردن ویژگی های در models/features.py .
  3. اصلاح models/preprocessing.py به تبدیل داده های ورودی برای آموزش .
  4. اصلاح models/keras/model.py و models/keras/constants.py به توصیف مدل ML خود را .
    • شما می توانید از یک مدل مبتنی بر برآوردگر نیز استفاده کنید. تغییر RUN_FN ثابت به models.estimator.model.run_fn در pipeline/configs.py .

لطفا برای دیدن راهنمای جزء ترینر برای معرفی بیشتر است.