צינורות TFX מאפשרים לך לתזמן את זרימת העבודה של למידת מכונה (ML) שלך על מתזמרים, כגון: Apache Airflow, Apache Beam ו-Kubeflow Pipelines. צינורות מארגנים את זרימת העבודה שלך לרצף של רכיבים, כאשר כל רכיב מבצע שלב בזרימת העבודה שלך ב-ML. רכיבי תקן TFX מספקים פונקציונליות מוכחת כדי לעזור לך להתחיל לבנות זרימת עבודה של ML בקלות. אתה יכול גם לכלול רכיבים מותאמים אישית בזרימת העבודה שלך. רכיבים מותאמים אישית מאפשרים לך להרחיב את זרימת העבודה שלך ב-ML על ידי:
- בניית רכיבים המותאמים לצרכים שלך, כגון הכנסת נתונים ממערכת קניינית.
- החלת הגדלת נתונים, דגימה מעלה או דגימה מופחתת.
- בצע זיהוי חריגות על סמך רווחי סמך או שגיאת רפרודוקציה של מקודד אוטומטי.
- התממשקות עם מערכות חיצוניות כגון עמדות סיוע להתרעה וניטור.
- החלת תוויות על דוגמאות ללא תווית.
- שילוב כלים שנבנו עם שפות אחרות מלבד Python בזרימת העבודה שלך ב-ML, כגון ביצוע ניתוח נתונים באמצעות R.
על ידי ערבוב של רכיבים סטנדרטיים ורכיבים מותאמים אישית, אתה יכול לבנות זרימת עבודה ML העונה על הצרכים שלך תוך ניצול השיטות המומלצות המובנות ברכיבים הסטנדרטיים של TFX.
מדריך זה מתאר את המושגים הנדרשים להבנת רכיבי TFX מותאמים אישית, ואת הדרכים השונות שבהן ניתן לבנות רכיבים מותאמים אישית.
אנטומיה של רכיב TFX
סעיף זה מספק סקירה ברמה גבוהה של ההרכב של רכיב TFX. אם אתה חדש בצינורות TFX, למד את מושגי הליבה על ידי קריאת המדריך להבנת צינורות TFX .
רכיבי TFX מורכבים ממפרט רכיב ומחלקת executor אשר ארוזים במחלקת ממשק רכיבים.
מפרט רכיב מגדיר את חוזה הקלט והפלט של הרכיב. חוזה זה מפרט את חפצי הקלט והפלט של הרכיב, ואת הפרמטרים המשמשים לביצוע הרכיב.
מחלקת הביצוע של רכיב מספקת את המימוש לעבודה שמבצע הרכיב.
מחלקת ממשק רכיבים משלבת את מפרט הרכיב עם המבצע לשימוש כרכיב בצינור TFX.
רכיבי TFX בזמן ריצה
כאשר צינור מריץ רכיב TFX, הרכיב מבוצע בשלושה שלבים:
- ראשית, מנהל ההתקן משתמש במפרט הרכיב כדי לאחזר את החפצים הנדרשים ממאגר המטא נתונים ולהעביר אותם לרכיב.
- לאחר מכן, ה-Executor מבצע את עבודת הרכיב.
- לאחר מכן, ה-Publisher משתמש במפרט הרכיב ובתוצאות מהמבצע כדי לאחסן את הפלטים של הרכיב במאגר המטא נתונים.
רוב יישומי הרכיבים המותאמים אישית אינם דורשים ממך להתאים אישית את מנהל ההתקן או את המפרסם. בדרך כלל, יש צורך בשינויים במנהל ההתקן וב-Publisher רק אם ברצונך לשנות את האינטראקציה בין רכיבי הצינור שלך לבין מאגר המטא נתונים. אם אתה רוצה לשנות רק את הכניסות, היציאות או הפרמטרים עבור הרכיב שלך, אתה רק צריך לשנות את מפרט הרכיב .
סוגי רכיבים מותאמים אישית
ישנם שלושה סוגים של רכיבים מותאמים אישית: רכיבים מבוססי פונקציות של Python, רכיבים מבוססי מיכל ורכיבים מותאמים אישית לחלוטין. הסעיפים הבאים מתארים את סוגי הרכיבים השונים ואת המקרים שבהם עליך להשתמש בכל גישה.
רכיבים מבוססי פונקציות Python
קל יותר לבנות רכיבים מבוססי פונקציות של Python מאשר רכיבים מבוססי קונטיינר או רכיבים מותאמים אישית לחלוטין. מפרט הרכיבים מוגדר בארגומנטים של פונקציית Python באמצעות הערות סוג המתארות אם ארגומנט הוא חפץ קלט, חפץ פלט או פרמטר. גוף הפונקציה מגדיר את המבצע של הרכיב. ממשק הרכיבים מוגדר על ידי הוספת ה- @component
decorator לפונקציה שלך.
על ידי עיטור הפונקציה שלך ב- @component
decorator והגדרת הארגומנטים של הפונקציה עם הערות סוג, תוכל ליצור רכיב ללא המורכבות של בניית מפרט רכיב, executor וממשק רכיב.
למד כיצד לבנות רכיבים מבוססי פונקציות של Python .
רכיבים מבוססי מיכל
רכיבים מבוססי מיכל מספקים את הגמישות לשילוב קוד שנכתב בכל שפה בצינור שלך, כל עוד אתה יכול להפעיל את הקוד הזה בקונטיינר Docker. כדי ליצור רכיב מבוסס קונטיינר, עליך לבנות תמונת קונטיינר של Docker המכילה את קוד ההפעלה של הרכיב שלך. לאחר מכן עליך לקרוא לפונקציה create_container_component
כדי להגדיר:
- הכניסות, היציאות והפרמטרים של מפרט הרכיבים שלך.
- תמונת המכולה והפקודה שמפעיל הרכיב מריץ.
פונקציה זו מחזירה מופע של רכיב שאתה יכול לכלול בהגדרת הצינור שלך.
גישה זו מורכבת יותר מבניית רכיב מבוסס פונקציות Python, מכיוון שהיא דורשת אריזה של הקוד שלך כתמונת קונטיינר. גישה זו מתאימה ביותר לכלול קוד שאינו פייתון בצינור שלך, או לבניית רכיבי Python עם סביבות ריצה מורכבות או תלות.
למד כיצד לבנות רכיבים מבוססי קונטיינר .
רכיבים מותאמים אישית לחלוטין
רכיבים מותאמים אישית לחלוטין מאפשרים לך לבנות רכיבים על ידי הגדרת מפרט הרכיבים, המבצעים ומחלקות ממשק הרכיבים. גישה זו מאפשרת לך לעשות שימוש חוזר ולהרחיב רכיב סטנדרטי שיתאים לצרכים שלך.
אם רכיב קיים מוגדר עם אותן כניסות ויציאות כמו הרכיב המותאם אישית שאתה מפתח, אתה יכול פשוט לעקוף את מחלקת ה-Executor של הרכיב הקיים. זה אומר שאתה יכול לעשות שימוש חוזר במפרט רכיב וליישם executor חדש שנובע מרכיב קיים. בדרך זו, אתה עושה שימוש חוזר בפונקציונליות המובנית ברכיבים קיימים ומיישם רק את הפונקציונליות הנדרשת.
אם לעומת זאת, הכניסות והיציאות של הרכיב החדש שלך הם ייחודיים, אתה יכול להגדיר מפרט רכיב חדש לגמרי.
גישה זו היא הטובה ביותר לשימוש חוזר במפרטי רכיבים קיימים ובמבצעים.
למד כיצד לבנות רכיבים מותאמים אישית לחלוטין .