ساخت قطعات مبتنی بر کانتینر
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
اجزای مبتنی بر کانتینر انعطافپذیری را برای ادغام کد نوشته شده به هر زبانی در خط لوله شما فراهم میکنند، تا زمانی که بتوانید آن کد را در یک ظرف Docker اجرا کنید.
اگر با خطوط لوله TFX تازه کار هستید، درباره مفاهیم اصلی خطوط لوله TFX بیشتر بدانید .
ایجاد یک کامپوننت مبتنی بر کانتینر
اجزای مبتنی بر کانتینر توسط برنامه های خط فرمان کانتینری پشتیبانی می شوند. اگر قبلاً یک تصویر ظرف دارید، میتوانید از TFX برای ایجاد کامپوننت از آن با استفاده از تابع create_container_component
برای اعلام ورودیها و خروجیها استفاده کنید. پارامترهای تابع:
- name: نام جزء.
- ورودی ها: فرهنگ لغتی که نام ورودی ها را به انواع نگاشت می کند. خروجی ها: فرهنگ لغتی که نام های خروجی را به پارامترهای انواع نگاشت می کند: فرهنگ لغتی که نام پارامترها را به انواع نگاشت می کند.
- تصویر: نام تصویر ظرف، و به صورت اختیاری برچسب تصویر.
- فرمان: خط فرمان ورودی کانتینر. در یک پوسته اجرا نمی شود. خط فرمان می تواند از اشیاء مکان نگهدار استفاده کند که در زمان کامپایل با ورودی، خروجی یا پارامتر جایگزین می شوند. اشیاء مکان نگهدار را می توان از
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 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-07-25 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-25 بهوقت ساعت هماهنگ جهانی."],[],[],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 )"]]