تعریف کامپوننت مبتنی بر تابع پایتون با صرفه جویی در تلاش شما برای تعریف یک کلاس مشخصات کامپوننت، کلاس اجراکننده و کلاس رابط کامپوننت، ایجاد مؤلفه های سفارشی TFX را برای شما آسان تر می کند. در این سبک تعریف کامپوننت، شما تابعی می نویسید که با نکات نوع حاشیه نویسی می شود. نکات نوع، مصنوعات ورودی، مصنوعات خروجی و پارامترهای جزء شما را توصیف می کنند.
مانند مثال زیر، نوشتن کامپوننت سفارشی شما در این سبک بسیار ساده است.
class MyOutput(TypedDict):
accuracy: float
@component
def MyValidationComponent(
model: InputArtifact[Model],
blessing: OutputArtifact[Model],
accuracy_threshold: Parameter[int] = 10,
) -> MyOutput:
'''My simple custom model validation component.'''
accuracy = evaluate_model(model)
if accuracy >= accuracy_threshold:
write_output_blessing(blessing)
return {
'accuracy': accuracy
}
در زیر هود، این یک جزء سفارشی را تعریف می کند که زیر کلاس BaseComponent
و کلاس های Spec و Executor آن است.
اگر می خواهید زیر کلاسی از BaseBeamComponent
تعریف کنید که بتوانید از یک خط لوله پرتو با پیکربندی مشترک TFX-pipeline-wise استفاده کنید، به عنوان مثال beam_pipeline_args
هنگام کامپایل خط لوله ( مثال خط لوله تاکسی شیکاگو ) می توانید use_beam=True
در دکوراتور تنظیم کنید. BeamComponentParameter
دیگری با مقدار پیش فرض None
در تابع شما به عنوان مثال زیر:
@component(use_beam=True)
def MyDataProcessor(
examples: InputArtifact[Example],
processed_examples: OutputArtifact[Example],
beam_pipeline: BeamComponentParameter[beam.Pipeline] = None,
) -> None:
'''My simple custom model validation component.'''
with beam_pipeline as p:
# data pipeline definition with beam_pipeline begins
...
# data pipeline definition with beam_pipeline ends
اگر با خطوط لوله TFX تازه کار هستید، درباره مفاهیم اصلی خطوط لوله TFX بیشتر بدانید .
ورودی ها، خروجی ها و پارامترها
در TFX، ورودیها و خروجیها بهعنوان اشیاء مصنوع ردیابی میشوند که مکان و ویژگیهای ابرداده مرتبط با دادههای زیربنایی را توصیف میکنند. این اطلاعات در ML Metadata ذخیره می شود. مصنوعات می توانند انواع داده های پیچیده یا انواع داده های ساده را توصیف کنند، مانند: int، float، بایت ها یا رشته های یونیکد.
یک پارامتر یک آرگومان (int، float، بایت یا رشته یونیکد) برای یک جزء شناخته شده در زمان ساخت خط لوله است. پارامترها برای تعیین آرگومان ها و هایپرپارامترهایی مانند تعداد تکرار آموزش، نرخ انصراف و سایر تنظیمات در مؤلفه شما مفید هستند. هنگامی که در فراداده ML ردیابی می شود، پارامترها به عنوان ویژگی های اجرای اجزا ذخیره می شوند.
تعریف
برای ایجاد یک کامپوننت سفارشی، تابعی بنویسید که منطق سفارشی شما را پیاده سازی کند و آن را با دکوراتور @component
از ماژول tfx.dsl.component.experimental.decorators
تزئین کنید. برای تعریف طرحواره ورودی و خروجی جزء خود، آرگومان های تابع خود را با استفاده از حاشیه نویسی از ماژول tfx.dsl.component.experimental.annotations
حاشیه نویسی کنید:
برای هر ورودی مصنوع ، حاشیه نویسی نوع
InputArtifact[ArtifactType]
را اعمال کنید.ArtifactType
با نوع مصنوع جایگزین کنید، که زیر کلاسtfx.types.Artifact
است. این ورودی ها می توانند آرگومان های اختیاری باشند.برای هر مصنوع خروجی ، حاشیهنویسی نوع
OutputArtifact[ArtifactType]
را اعمال کنید.ArtifactType
با نوع artifact جایگزین کنید، که زیر کلاسtfx.types.Artifact
است. مصنوعات خروجی مؤلفه باید به عنوان آرگومان های ورودی تابع ارسال شوند، به طوری که مؤلفه شما بتواند خروجی ها را در یک مکان مدیریت شده توسط سیستم بنویسد و ویژگی های فراداده آرتیفکت مناسب را تنظیم کند. این آرگومان می تواند اختیاری باشد یا این آرگومان با مقدار پیش فرض تعریف شود.برای هر پارامتر ، از نوع حاشیه نویسی اشاره
Parameter[T]
استفاده کنید. نوع پارامتر را جایگزینT
کنید. ما در حال حاضر فقط از انواع اولیه پایتون پشتیبانی می کنیم:bool
،int
،float
،str
، یاbytes
.برای خط لوله پرتو ، از نوع حاشیه نویسی اشاره
BeamComponentParameter[beam.Pipeline]
استفاده کنید. مقدار پیش فرض را رویNone
قرار دهید. مقدارNone
با خط لوله پرتو نمونه ایجاد شده توسط_make_beam_pipeline()
BaseBeamExecutor
جایگزین می شود.برای هر ورودی نوع داده ساده (
int
،float
،str
یاbytes
) که در زمان ساخت خط لوله شناخته نشده است، از نوع اشارهT
استفاده کنید. توجه داشته باشید که در نسخه TFX 0.22، مقادیر بتن را نمی توان در زمان ساخت خط لوله برای این نوع ورودی ارسال کرد (به جای آن از حاشیه نویسیParameter
همانطور که در بخش قبل توضیح داده شد استفاده کنید). این آرگومان می تواند اختیاری باشد یا این آرگومان با مقدار پیش فرض تعریف شود. اگر کامپوننت شما دارای خروجیهای نوع داده ساده است (int
،float
،str
یاbytes
)، میتوانید این خروجیها را با استفاده ازTypedDict
به عنوان حاشیهنویسی نوع برگشتی و برگرداندن یک شی dict مناسب برگردانید.
در بدنه تابع شما، مصنوعات ورودی و خروجی به عنوان اشیاء tfx.types.Artifact
ارسال می شوند. می توانید uri .uri
آن را بررسی کنید تا مکان مدیریت شده توسط سیستم را دریافت کنید و هر ویژگی را بخوانید/تنظیم کنید. پارامترهای ورودی و ورودی های نوع داده ساده به عنوان اشیایی از نوع مشخص شده ارسال می شوند. خروجیهای نوع داده ساده باید بهعنوان یک فرهنگ لغت بازگردانده شوند، جایی که کلیدها نامهای خروجی مناسب و مقادیر مقادیر بازگشتی مورد نظر هستند.
کامپوننت تابع تکمیل شده می تواند به شکل زیر باشد:
from typing import TypedDict
import tfx.v1 as tfx
from tfx.dsl.component.experimental.decorators import component
class MyOutput(TypedDict):
loss: float
accuracy: float
@component
def MyTrainerComponent(
training_data: tfx.dsl.components.InputArtifact[tfx.types.standard_artifacts.Examples],
model: tfx.dsl.components.OutputArtifact[tfx.types.standard_artifacts.Model],
dropout_hyperparameter: float,
num_iterations: tfx.dsl.components.Parameter[int] = 10
) -> MyOutput:
'''My simple trainer component.'''
records = read_examples(training_data.uri)
model_obj = train_model(records, num_iterations, dropout_hyperparameter)
model_obj.write_to(model.uri)
return {
'loss': model_obj.loss,
'accuracy': model_obj.accuracy
}
# Example usage in a pipeline graph definition:
# ...
trainer = MyTrainerComponent(
examples=example_gen.outputs['examples'],
dropout_hyperparameter=other_component.outputs['dropout'],
num_iterations=1000)
pusher = Pusher(model=trainer.outputs['model'])
# ...
مثال قبلی MyTrainerComponent
به عنوان یک جزء سفارشی مبتنی بر تابع پایتون تعریف می کند. این مولفه یک مصنوع examples
را به عنوان ورودی خود مصرف می کند و یک مصنوع model
را به عنوان خروجی خود تولید می کند. مؤلفه از artifact_instance.uri
برای خواندن یا نوشتن مصنوع در مکان مدیریت شده توسط سیستم خود استفاده می کند. کامپوننت یک پارامتر ورودی num_iterations
و یک مقدار نوع داده ساده dropout_hyperparameter
را می گیرد و کامپوننت معیارهای loss
و accuracy
را به عنوان مقادیر خروجی نوع داده ساده خروجی می گیرد. سپس آرتیفکت model
خروجی توسط مولفه Pusher
استفاده می شود.