צור צינור TFX באמצעות תבניות עם תזמור Beam

מבוא

מסמך זה יספק הוראות ליצירת TensorFlow המורחב (TFX) צינור באמצעות תבניות אשר מסופקות עם חבילת TFX Python. רוב ההוראות הן פקודות מעטפת לינוקס, וכנגד תאים קוד מחברת Jupyter אשר להפעיל פקודות אלה באמצעות ! מסופקים.

תוכלו לבנות צינור באמצעות מוניות Trips הנתונים שפורסמו על ידי עיריית שיקגו. אנו ממליצים לך בחום לנסות לבנות צינור משלך באמצעות מערך הנתונים שלך על ידי שימוש בצינור זה כבסיס.

אנחנו נבנינו צינור באמצעות Apache Beam Orchestrator . אם אתה מעוניין להשתמש Kubeflow Orchestrator על Google Cloud, ראה TFX על הדרכת צינורות בפלטפורמת ענן AI .

דרישות מוקדמות

  • לינוקס / MacOS
  • Python >= 3.5.3

אתה יכול לקבל את כל התנאים המוקדמים בקלות על ידי מפעיל מחברת זה ב- Google 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

שגיאה: חבילה מסויימת 0.some_version.1 כוללת דרישה חבילה אחרת!=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 תבנית עם חבילת python 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 מספקת קבצי פיגום בסיסיים לבניית צינור, כולל קוד מקור של Python, נתונים לדוגמה ומחברות Jupyter לניתוח הפלט של הצינור. taxi התבנית משתמשת במערך הזהה שיקגו מוניות מודל ML כמו הדרכת Airflow .

ב-Google Colab, אתה יכול לעיין בקבצים על ידי לחיצה על סמל תיקיה בצד שמאל. קבצים צריכים להיות מועתקים תחת פרויקט directoy, ששם הוא my_pipeline במקרה הזה. אתה יכול ללחוץ על שמות ספריות כדי לראות את תוכן הספרייה, וללחוץ פעמיים על שמות קבצים כדי לפתוח אותם.

הנה מבוא קצר לכל אחד מקבצי Python.

  • 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 . מצא uncomment 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 בצנרת.

אתה צריך Google Cloud Platform חשבון לשימוש BigQuery. נא להכין פרויקט GCP.

כניסה לפרויקט באמצעות ספריית auth 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')

עליך לציין את שם פרויקט ה-GCP שלך כדי לגשת למשאבי BigQuery באמצעות TFX. סט 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 ו uncomment הקו אשר יוצרים מופע של BigQueryExampleGen . אתה גם צריך uncomment query הטיעון של create_pipeline פונקציה.

אנחנו צריכים לפרט איזה פרויקט GCP להשתמש עבור BigQuery שוב, והדבר נעשה על ידי הגדרת --project ב beam_pipeline_args בעת יצירת צינור.

פתיחת pipeline/configs.py . ההגדרה בטל הערה של BIG_QUERY__WITH_DIRECT_RUNNER_BEAM_PIPELINE_ARGS ו BIG_QUERY_QUERY . עליך להחליף את מזהה הפרויקט ואת ערך האזור בקובץ זה בערכים הנכונים עבור פרויקט ה-GCP שלך.

Open 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.

מה הלאה: הכנס את הנתונים שלך לצינור.

יצרנו צינור למודל באמצעות מערך הנתונים של Chicago Taxi. עכשיו הגיע הזמן להכניס את הנתונים שלך לצינור.

ניתן לאחסן את הנתונים שלך בכל מקום שהצינור שלך יכול לגשת אליו, כולל 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 .

אנא ראה מדריך רכיב מאמן עבור הקדמה יותר.