בניית רכיבים מבוססי מיכל
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
רכיבים מבוססי מיכל מספקים את הגמישות לשילוב קוד שנכתב בכל שפה בצינור שלך, כל עוד אתה יכול להפעיל את הקוד הזה בקונטיינר Docker.
אם אתה חדש בצינורות TFX, למד עוד על מושגי הליבה של צינורות TFX .
יצירת רכיב מבוסס מיכל
רכיבים מבוססי מיכל מגובים על ידי תוכניות שורת פקודה מכולות. אם כבר יש לך תמונת מיכל, אתה יכול להשתמש ב-TFX כדי ליצור ממנה רכיב על ידי שימוש בפונקציה create_container_component
כדי להכריז על כניסות ופלט. פרמטרים של פונקציה:
- שם: שם הרכיב.
- קלט: מילון הממפה שמות קלט לסוגים. פלטים: מילון שממפה שמות פלט לפרמטרים מסוגים: מילון שממפה שמות פרמטרים לסוגים.
- תמונה: שם תמונת מיכל, ותג תמונה אופציונלי.
- פקודה: שורת הפקודה של נקודת הכניסה של מיכל. לא הוצא להורג בתוך מעטפת. שורת הפקודה יכולה להשתמש באובייקטי מיקום שמוחלפים בזמן ההידור בקלט, הפלט או הפרמטר. ניתן לייבא את אובייקטי המיקום מ-
tfx.dsl.component.experimental.placeholders
. שימו לב שתבניות Jinja אינן נתמכות.
ערך החזרה: מחלקה Component היורשת מ-base_component.BaseComponent שניתן ליצור מופע ולהשתמש בתוך הצינור.
מצייני מקום
עבור רכיב שיש לו כניסות או יציאות, לרוב command
צריכה לכלול מצייני מיקום שמוחלפים בנתונים בפועל בזמן ריצה. מספר מצייני מיקום מסופקים למטרה זו:
InputValuePlaceholder
: מציין מיקום עבור הערך של חפץ הקלט. בזמן ריצה, מציין מיקום זה מוחלף בייצוג המחרוזת של ערך החפץ.
InputUriPlaceholder
: מציין מיקום עבור URI של ארגומנט חפץ הקלט. בזמן ריצה, מציין מיקום זה מוחלף ב-URI של נתוני חפץ הקלט.
OutputUriPlaceholder
: מציין מיקום עבור URI של ארגומנט חפץ הפלט. בזמן ריצה, מציין מיקום זה מוחלף ב-URI שבו הרכיב צריך לאחסן את הנתונים של חפץ הפלט.
למידע נוסף על מצייני מיקום של שורת הפקודה של רכיב TFX .
רכיב מבוסס מיכל לדוגמה
להלן דוגמה לרכיב שאינו פיתון שמוריד, הופך ומעלה את הנתונים:
import tfx.v1 as tfx
grep_component = tfx.dsl.components.create_container_component(
name='FilterWithGrep',
inputs={
'text': tfx.standard_artifacts.ExternalArtifact,
},
outputs={
'filtered_text': tfx.standard_artifacts.ExternalArtifact,
},
parameters={
'pattern': str,
},
# The component code uses gsutil to upload the data to Google Cloud Storage, so the
# container image needs to have gsutil installed and configured.
image='google/cloud-sdk:278.0.0',
command=[
'sh', '-exc',
'''
pattern="$1"
text_uri="$3"/data # Adding suffix, because currently the URI are "directories". This will be fixed soon.
text_path=$(mktemp)
filtered_text_uri="$5"/data # Adding suffix, because currently the URI are "directories". This will be fixed soon.
filtered_text_path=$(mktemp)
# Getting data into the container
gsutil cp "$text_uri" "$text_path"
# Running the main code
grep "$pattern" "$text_path" >"$filtered_text_path"
# Getting data out of the container
gsutil cp "$filtered_text_path" "$filtered_text_uri"
''',
'--pattern', tfx.dsl.placeholders.InputValuePlaceholder('pattern'),
'--text', tfx.dsl.placeholders.InputUriPlaceholder('text'),
'--filtered-text', tfx.dsl.placeholders.OutputUriPlaceholder('filtered_text'),
],
)
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-25 (שעון UTC).
[null,null,["עדכון אחרון: 2025-07-25 (שעון UTC)."],[],[],null,["# Building Container-based components\n\nContainer-based components provide the flexibility to integrate code written in\nany language into your pipeline, so long as you can execute that code in a\nDocker container.\n\nIf you are new to TFX pipelines,\n[learn more about the core concepts of TFX pipelines](/tfx/guide/understanding_tfx_pipelines).\n\nCreating a Container-based Component\n------------------------------------\n\nContainer-based components are backed by containerized command-line programs. If\nyou already have a container image, you can use TFX to create a component from\nit by using the\n[`create_container_component` function](https://github.com/tensorflow/tfx/blob/master/tfx/dsl/component/experimental/container_component.py)\nto declare inputs and outputs. Function parameters:\n\n- **name:** The name of the component.\n- **inputs:** A dictionary that maps input names to types. outputs: A dictionary that maps output names to types parameters: A dictionary that maps parameter names to types.\n- **image:** Container image name, and optionally image tag.\n- **command:** Container entrypoint command line. Not executed within a shell. The command line can use placeholder objects that are replaced at compilation time with the input, output, or parameter. The placeholder objects can be imported from [`tfx.dsl.component.experimental.placeholders`](https://github.com/tensorflow/tfx/blob/master/tfx/dsl/component/experimental/placeholders.py). Note that Jinja templates are not supported.\n\n**Return value:** a Component class inheriting from base_component.BaseComponent\nwhich can be instantiated and used inside the pipeline.\n\n### Placeholders\n\nFor a component that has inputs or outputs, the `command` often needs to have\nplaceholders that are replaced with actual data at runtime. Several placeholders\nare provided for this purpose:\n\n- `InputValuePlaceholder`: A placeholder for the value of the input artifact.\n At runtime, this placeholder is replaced with the string representation of\n the artifact's value.\n\n- `InputUriPlaceholder`: A placeholder for the URI of the input artifact\n argument. At runtime, this placeholder is replaced with the URI of the input\n artifact's data.\n\n- `OutputUriPlaceholder`: A placeholder for the URI of the output artifact\n argument. At runtime, this placeholder is replaced with the URI where the\n component should store the output artifact's data.\n\nLearn more about\n[TFX component command-line placeholders](https://github.com/tensorflow/tfx/blob/master/tfx/dsl/component/experimental/placeholders.py).\n\n### Example Container-based Component\n\nThe following is an example of a non-python component that downloads,\ntransforms, and uploads the data: \n\n import tfx.v1 as tfx\n\n grep_component = tfx.dsl.components.create_container_component(\n name='FilterWithGrep',\n inputs={\n 'text': tfx.standard_artifacts.ExternalArtifact,\n },\n outputs={\n 'filtered_text': tfx.standard_artifacts.ExternalArtifact,\n },\n parameters={\n 'pattern': str,\n },\n # The component code uses gsutil to upload the data to Google Cloud Storage, so the\n # container image needs to have gsutil installed and configured.\n image='google/cloud-sdk:278.0.0',\n command=[\n 'sh', '-exc',\n '''\n pattern=\"$1\"\n text_uri=\"$3\"/data # Adding suffix, because currently the URI are \"directories\". This will be fixed soon.\n text_path=$(mktemp)\n filtered_text_uri=\"$5\"/data # Adding suffix, because currently the URI are \"directories\". This will be fixed soon.\n filtered_text_path=$(mktemp)\n\n # Getting data into the container\n gsutil cp \"$text_uri\" \"$text_path\"\n\n # Running the main code\n grep \"$pattern\" \"$text_path\" \u003e\"$filtered_text_path\"\n\n # Getting data out of the container\n gsutil cp \"$filtered_text_path\" \"$filtered_text_uri\"\n ''',\n '--pattern', tfx.dsl.placeholders.InputValuePlaceholder('pattern'),\n '--text', tfx.dsl.placeholders.InputUriPlaceholder('text'),\n '--filtered-text', tfx.dsl.placeholders.OutputUriPlaceholder('filtered_text'),\n ],\n )"]]