Apache Beam ו-TFX

Apache Beam מספקת מסגרת להפעלת משימות עיבוד נתונים אצווה והזרמת הפועלות על מגוון מנועי ביצוע. כמה מספריות TFX משתמשות ב-Beam להפעלת משימות, מה שמאפשר רמה גבוהה של מדרגיות בין אשכולות מחשוב. Beam כולל תמיכה במגוון מנועי ביצוע או "רץ", כולל רץ ישיר שפועל על צומת מחשוב בודד ושימושי מאוד לפיתוח, בדיקות או פריסות קטנות. Beam מספקת שכבת הפשטה המאפשרת ל-TFX לפעול על כל רץ נתמך ללא שינויי קוד. TFX משתמש ב-Beam Python API, כך שהוא מוגבל לרצים הנתמכים על ידי Python API.

פריסה ומדרגיות

ככל שדרישות עומס העבודה גדלות, Beam יכולה להתרחב לפריסות גדולות מאוד על פני אשכולות מחשוב גדולים. זה מוגבל רק על ידי המדרגיות של הרץ הבסיסי. רצים בפריסות גדולות ייפרסו בדרך כלל למערכת תזמור קונטיינרים כגון Kubernetes או Apache Mesos לאוטומציה של פריסת יישומים, קנה מידה וניהול.

עיין בתיעוד של Apache Beam למידע נוסף על Apache Beam.

עבור משתמשי Google Cloud, Dataflow הוא הרץ המומלץ, המספק פלטפורמה נטולת שרתים וחסכונית באמצעות קנה מידה אוטומטי של משאבים, איזון עבודה דינמי מחדש, אינטגרציה עמוקה עם שירותי Google Cloud אחרים, אבטחה מובנית וניטור.

קוד Python ותלות מותאמים אישית

אחת המורכבות הבולטת של השימוש ב-Beam בצינור TFX היא טיפול בקוד מותאם אישית ו/או בתלות הדרושה ממודולי Python נוספים. הנה כמה דוגמאות למקרים שבהם זה עשוי להיות בעיה:

  • preprocessing_fn צריך להתייחס למודול Python של המשתמש עצמו
  • חולץ מותאם אישית עבור רכיב Evaluator
  • מודולים מותאמים אישית אשר מסווגים משנה מרכיב TFX

TFX מסתמך על התמיכה של Beam בניהול תלות בצנרת של Python כדי לטפל בתלות של Python. נכון לעכשיו יש שתי דרכים לנהל את זה:

  1. מתן קוד Python ותלות כחבילת מקור
  2. [זרימת נתונים בלבד] שימוש בתמונת מיכל כעובד

אלה נדונים בהמשך.

מתן קוד Python ותלות כחבילת מקור

זה מומלץ למשתמשים ש:

  1. מכירים את אריזות Python ו
  2. השתמש רק בקוד המקור של Python (כלומר, ללא מודולי C או ספריות משותפות).

אנא עקוב אחר אחד מהנתיבים בניהול התלות בצנרת של Python כדי לספק זאת באמצעות אחד מה-beam_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
  • דחף את התמונה שנבנתה ל-Container Image Registry אשר נגיש על ידי הפרויקט המשמש את 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 , להרחבת ה-args beam רמת הצינור לכל רכיב:

example_gen = CsvExampleGen(input_base=data_root).with_beam_pipeline_args([...])