পাইথন ফাংশন-ভিত্তিক কম্পোনেন্ট ডেফিনেশন আপনার জন্য 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 এবং এর স্পেক এবং এক্সিকিউটর ক্লাসের একটি সাবক্লাস।
 আপনি যদি BaseBeamComponent এর একটি সাবক্লাস সংজ্ঞায়িত করতে চান যাতে আপনি TFX-পাইপলাইন-ভিত্তিক শেয়ার্ড কনফিগারেশনের সাথে একটি বিম পাইপলাইন ব্যবহার করতে পারেন, যেমন, পাইপলাইন কম্পাইল করার সময় beam_pipeline_args ( শিকাগো ট্যাক্সি পাইপলাইন উদাহরণ ) আপনি ডেকোরেটরে use_beam=True সেট করতে পারেন এবং যোগ করতে পারেন নিম্নলিখিত উদাহরণ হিসাবে আপনার ফাংশনে ডিফল্ট মান None সহ আরেকটি BeamComponentParameter :
@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 মেটাডেটা সংরক্ষণ করা হয়. আর্টিফ্যাক্টগুলি জটিল ডেটা টাইপ বা সাধারণ ডেটা টাইপ বর্ণনা করতে পারে, যেমন: int, ফ্লোট, বাইট বা ইউনিকোড স্ট্রিং।
একটি প্যারামিটার হল একটি আর্গুমেন্ট (int, ফ্লোট, বাইট, বা ইউনিকোড স্ট্রিং) একটি উপাদান যা পাইপলাইন নির্মাণের সময় পরিচিত। প্যারামিটারগুলি আর্গুমেন্ট এবং হাইপারপ্যারামিটার যেমন প্রশিক্ষণের পুনরাবৃত্তি গণনা, ড্রপআউট রেট এবং আপনার উপাদানের অন্যান্য কনফিগারেশন নির্দিষ্ট করার জন্য দরকারী। ML মেটাডেটাতে ট্র্যাক করার সময় পরামিতিগুলি উপাদান নির্বাহের বৈশিষ্ট্য হিসাবে সংরক্ষণ করা হয়।
সংজ্ঞা
 একটি কাস্টম উপাদান তৈরি করতে, একটি ফাংশন লিখুন যা আপনার কাস্টম যুক্তি প্রয়োগ করে এবং tfx.dsl.component.experimental.decorators মডিউল থেকে @component ডেকোরেটর দিয়ে সাজান। আপনার কম্পোনেন্টের ইনপুট এবং আউটপুট স্কিমা সংজ্ঞায়িত করতে, tfx.dsl.component.experimental.annotations মডিউল থেকে টীকা ব্যবহার করে আপনার ফাংশনের আর্গুমেন্ট এবং রিটার্ন মান টীকা করুন:
- প্রতিটি আর্টিফ্যাক্ট ইনপুটের জন্য, - InputArtifact[ArtifactType]টাইপ ইঙ্গিত টীকা প্রয়োগ করুন।- ArtifactTypeartifact এর টাইপ দিয়ে প্রতিস্থাপন করুন, যা- tfx.types.Artifactএর একটি সাবক্লাস। এই ইনপুট ঐচ্ছিক আর্গুমেন্ট হতে পারে.
- প্রতিটি আউটপুট আর্টিফ্যাক্টের জন্য, - OutputArtifact[ArtifactType]টাইপ ইঙ্গিত টীকা প্রয়োগ করুন।- ArtifactTypeartifact এর টাইপ দিয়ে প্রতিস্থাপন করুন, যা- tfx.types.Artifactএর একটি সাবক্লাস। কম্পোনেন্ট আউটপুট আর্টিফ্যাক্টগুলিকে ফাংশনের ইনপুট আর্গুমেন্ট হিসাবে পাস করা উচিত, যাতে আপনার উপাদান একটি সিস্টেম-পরিচালিত অবস্থানে আউটপুট লিখতে পারে এবং উপযুক্ত আর্টিফ্যাক্ট মেটাডেটা বৈশিষ্ট্য সেট করতে পারে। এই যুক্তি ঐচ্ছিক হতে পারে বা এই যুক্তিটিকে একটি ডিফল্ট মান দিয়ে সংজ্ঞায়িত করা যেতে পারে।
- প্রতিটি প্যারামিটারের জন্য, টাইপ ইঙ্গিত টীকা - Parameter[T]। প্যারামিটারের ধরন দিয়ে- Tপ্রতিস্থাপন করুন। আমরা বর্তমানে শুধুমাত্র আদিম পাইথন প্রকারগুলিকে সমর্থন করি:- bool,- int,- float,- str, বা- bytes৷
- বিম পাইপলাইনের জন্য, টাইপ ইঙ্গিত টীকা ব্যবহার করুন - BeamComponentParameter[beam.Pipeline]। ডিফল্ট মানটি- Noneহিসাবে সেট করুন।- BaseBeamExecutor- _make_beam_pipeline()দ্বারা তৈরি একটি তাত্ক্ষণিক বিম পাইপলাইন দ্বারা- Noneমানটি প্রতিস্থাপিত হবে না
- প্রতিটি সাধারণ ডেটা টাইপ ইনপুট ( - int,- float,- strবা- bytes) যা পাইপলাইন নির্মাণের সময় জানা যায় না, টাইপ ইঙ্গিত- Tব্যবহার করুন। মনে রাখবেন যে TFX 0.22 রিলিজে, এই ধরনের ইনপুটের জন্য পাইপলাইন নির্মাণের সময় কংক্রিট মান পাস করা যাবে না (এর পরিবর্তে- Parameterটীকা ব্যবহার করুন, যেমনটি পূর্ববর্তী বিভাগে বর্ণিত হয়েছে)। এই যুক্তি ঐচ্ছিক হতে পারে বা এই যুক্তিটিকে একটি ডিফল্ট মান দিয়ে সংজ্ঞায়িত করা যেতে পারে। যদি আপনার কম্পোনেন্টে সাধারণ ডেটা টাইপ আউটপুট থাকে (- int,- float,- strবা- bytes), আপনি এই আউটপুটগুলিকে একটি- TypedDictএকটি রিটার্ন টাইপ টীকা হিসাবে ব্যবহার করে এবং একটি উপযুক্ত ডিক্ট অবজেক্ট ফিরিয়ে দিতে পারেন।
 আপনার ফাংশনের মূল অংশে, ইনপুট এবং আউটপুট আর্টিফ্যাক্টগুলি tfx.types.Artifact অবজেক্ট হিসাবে পাস করা হয়; আপনি এর সিস্টেম-পরিচালিত অবস্থান পেতে এর .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 Python ফাংশন-ভিত্তিক কাস্টম উপাদান হিসাবে সংজ্ঞায়িত করে। এই উপাদানটি তার ইনপুট হিসাবে একটি examples আর্টিফ্যাক্ট গ্রহণ করে এবং এর আউটপুট হিসাবে একটি model আর্টিফ্যাক্ট তৈরি করে। উপাদানটি তার সিস্টেম-পরিচালিত অবস্থানে আর্টিফ্যাক্ট পড়তে বা লিখতে artifact_instance.uri ব্যবহার করে। উপাদানটি একটি num_iterations ইনপুট প্যারামিটার এবং একটি dropout_hyperparameter সাধারণ ডেটা টাইপ মান নেয় এবং উপাদানটি সাধারণ ডেটা টাইপ আউটপুট মান হিসাবে loss এবং accuracy মেট্রিক্স আউটপুট করে। আউটপুট model আর্টিফ্যাক্ট তারপর Pusher উপাদান দ্বারা ব্যবহার করা হয়.