স্থানীয়ভাবে একটি TFX পাইপলাইন তৈরি করা

TFX আপনার মেশিন লার্নিং (ML) ওয়ার্কফ্লোকে পাইপলাইন হিসাবে সাজানো সহজ করে তোলে, যাতে:

  • আপনার ML প্রক্রিয়া স্বয়ংক্রিয় করুন, যা আপনাকে নিয়মিতভাবে পুনরায় প্রশিক্ষণ, মূল্যায়ন এবং আপনার মডেল স্থাপন করতে দেয়।
  • এমএল পাইপলাইন তৈরি করুন যাতে মডেলের পারফরম্যান্সের গভীর বিশ্লেষণ এবং কর্মক্ষমতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে নতুন প্রশিক্ষিত মডেলের বৈধতা অন্তর্ভুক্ত থাকে।
  • অসঙ্গতিগুলির জন্য প্রশিক্ষণের ডেটা নিরীক্ষণ করুন এবং প্রশিক্ষণ প্রদানকারী তির্যক দূর করুন
  • হাইপারপ্যারামিটারের বিভিন্ন সেট সহ একটি পাইপলাইন চালিয়ে পরীক্ষা-নিরীক্ষার বেগ বাড়ান।

একটি সাধারণ পাইপলাইন উন্নয়ন প্রক্রিয়া একটি স্থানীয় মেশিনে শুরু হয়, ডেটা বিশ্লেষণ এবং উপাদান সেটআপ সহ, উৎপাদনে মোতায়েন করার আগে। এই নির্দেশিকা স্থানীয়ভাবে একটি পাইপলাইন নির্মাণের দুটি উপায় বর্ণনা করে।

  • আপনার ML কর্মপ্রবাহের চাহিদা পূরণ করতে একটি TFX পাইপলাইন টেমপ্লেট কাস্টমাইজ করুন। TFX পাইপলাইন টেমপ্লেটগুলি হল প্রি-বিল্ট ওয়ার্কফ্লো যা TFX স্ট্যান্ডার্ড উপাদানগুলি ব্যবহার করে সেরা অনুশীলনগুলি প্রদর্শন করে।
  • TFX ব্যবহার করে একটি পাইপলাইন তৈরি করুন। এই ব্যবহারের ক্ষেত্রে, আপনি একটি টেমপ্লেট থেকে শুরু না করে একটি পাইপলাইন সংজ্ঞায়িত করুন৷

আপনি যখন আপনার পাইপলাইনটি বিকাশ করছেন, আপনি এটি LocalDagRunner দিয়ে চালাতে পারেন। তারপরে, একবার পাইপলাইনের উপাদানগুলি ভালভাবে সংজ্ঞায়িত এবং পরীক্ষা করা হয়ে গেলে, আপনি একটি প্রোডাকশন-গ্রেড অর্কেস্ট্রেটর যেমন কুবেফ্লো বা এয়ারফ্লো ব্যবহার করবেন।

তুমি শুরু করার আগে

TFX হল একটি পাইথন প্যাকেজ, তাই আপনাকে একটি পাইথন ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে হবে, যেমন একটি ভার্চুয়াল এনভায়রনমেন্ট বা একটি ডকার কন্টেইনার। তারপর:

pip install tfx

আপনি যদি TFX পাইপলাইনে নতুন হন, তাহলে চালিয়ে যাওয়ার আগে TFX পাইপলাইনের মূল ধারণা সম্পর্কে আরও জানুন

একটি টেমপ্লেট ব্যবহার করে একটি পাইপলাইন তৈরি করুন

TFX পাইপলাইন টেমপ্লেটগুলি পাইপলাইন ডেভেলপমেন্টের সাথে শুরু করা সহজ করে তোলে একটি পূর্বনির্মাণ পাইপলাইন সংজ্ঞা প্রদান করে যা আপনি আপনার ব্যবহারের ক্ষেত্রে কাস্টমাইজ করতে পারেন।

নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে একটি টেমপ্লেটের একটি অনুলিপি তৈরি করা যায় এবং আপনার প্রয়োজন মেটাতে এটি কাস্টমাইজ করা যায়।

পাইপলাইন টেমপ্লেটের একটি অনুলিপি তৈরি করুন

  1. উপলব্ধ TFX পাইপলাইন টেমপ্লেটের তালিকা দেখুন:

    tfx template list
    
  2. তালিকা থেকে একটি টেমপ্লেট নির্বাচন করুন

    tfx template copy --model=template --pipeline_name=pipeline-name \
    --destination_path=destination-path
    

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • template : আপনি যে টেমপ্লেটটি কপি করতে চান তার নাম।
    • pipeline-name : তৈরি করা পাইপলাইনের নাম।
    • destination-path : টেমপ্লেটটি কপি করার পথ।

    tfx template copy কমান্ড সম্পর্কে আরও জানুন।

  3. আপনার নির্দিষ্ট করা পথে পাইপলাইন টেমপ্লেটের একটি অনুলিপি তৈরি করা হয়েছে।

পাইপলাইন টেমপ্লেট অন্বেষণ করুন

এই বিভাগটি একটি টেমপ্লেট দ্বারা তৈরি ভারাগুলির একটি ওভারভিউ প্রদান করে।

  1. আপনার পাইপলাইনের রুট ডিরেক্টরিতে কপি করা ডিরেক্টরি এবং ফাইলগুলি অন্বেষণ করুন৷

    • সঙ্গে একটি পাইপলাইন ডিরেক্টরি
      • pipeline.py - পাইপলাইন সংজ্ঞায়িত করে এবং কোন উপাদান ব্যবহার করা হচ্ছে তা তালিকাভুক্ত করে
      • configs.py - কনফিগারেশনের বিশদ ধরে রাখুন যেমন ডেটা কোথা থেকে আসছে বা কোন অর্কেস্ট্রেটর ব্যবহার করা হচ্ছে
    • একটি ডেটা ডিরেক্টরি
      • এটিতে সাধারণত একটি data.csv ফাইল থাকে, যা ExampleGen এর জন্য ডিফল্ট উৎস। আপনি configs.py এ ডেটা উৎস পরিবর্তন করতে পারেন।
    • প্রিপ্রসেসিং কোড এবং মডেল বাস্তবায়ন সহ একটি মডেল ডিরেক্টরি

    • টেমপ্লেটটি স্থানীয় পরিবেশ এবং কুবেফ্লো-এর জন্য DAG রানারদের অনুলিপি করে।

    • কিছু টেমপ্লেটে পাইথন নোটবুকও রয়েছে যাতে আপনি মেশিন লার্নিং মেটাডেটা দিয়ে আপনার ডেটা এবং শিল্পকর্মগুলি অন্বেষণ করতে পারেন।

  2. আপনার পাইপলাইন ডিরেক্টরিতে নিম্নলিখিত কমান্ডগুলি চালান:

    tfx pipeline create --pipeline_path local_runner.py
    
    tfx run create --pipeline_name pipeline_name
    

    কমান্ডটি LocalDagRunner ব্যবহার করে একটি পাইপলাইন তৈরি করে, যা আপনার পাইপলাইনে নিম্নলিখিত ডিরেক্টরি যোগ করে:

    • একটি tfx_metadata ডিরেক্টরি যেখানে স্থানীয়ভাবে ব্যবহৃত ML মেটাডেটা স্টোর রয়েছে।
    • একটি tfx_pipeline_output ডিরেক্টরি যা পাইপলাইনের ফাইল আউটপুট ধারণ করে।
  3. আপনার পাইপলাইনের pipeline/configs.py ফাইলটি খুলুন এবং বিষয়বস্তু পর্যালোচনা করুন। এই স্ক্রিপ্টটি পাইপলাইন এবং কম্পোনেন্ট ফাংশন দ্বারা ব্যবহৃত কনফিগারেশন বিকল্পগুলিকে সংজ্ঞায়িত করে। এখানে আপনি ডেটাসোর্সের অবস্থান বা একটি দৌড়ে প্রশিক্ষণের ধাপের সংখ্যার মতো জিনিসগুলি নির্দিষ্ট করবেন।

  4. আপনার পাইপলাইনের pipeline/pipeline.py ফাইলটি খুলুন এবং বিষয়বস্তু পর্যালোচনা করুন৷ এই স্ক্রিপ্টটি TFX পাইপলাইন তৈরি করে। প্রাথমিকভাবে, পাইপলাইনে শুধুমাত্র একটি ExampleGen উপাদান থাকে।

    • পাইপলাইনে আরও ধাপ যোগ করতে pipeline.pyTODO মন্তব্যে নির্দেশাবলী অনুসরণ করুন।
  5. local_runner.py ফাইল খুলুন এবং বিষয়বস্তু পর্যালোচনা করুন। এই স্ক্রিপ্টটি একটি পাইপলাইন রান তৈরি করে এবং রানের প্যারামিটারগুলি নির্দিষ্ট করে, যেমন data_path এবং preprocessing_fn

  6. আপনি টেমপ্লেট দ্বারা তৈরি স্ক্যাফোল্ডিং পর্যালোচনা করেছেন এবং LocalDagRunner ব্যবহার করে একটি পাইপলাইন তৈরি করেছেন। এরপরে, আপনার প্রয়োজনীয়তার সাথে মানানসই টেমপ্লেটটি কাস্টমাইজ করুন।

আপনার পাইপলাইন কাস্টমাইজ করুন

এই বিভাগটি আপনার টেমপ্লেট কাস্টমাইজ করা শুরু করার একটি ওভারভিউ প্রদান করে।

  1. আপনার পাইপলাইন ডিজাইন করুন। একটি টেমপ্লেট যে ভারা প্রদান করে তা আপনাকে TFX স্ট্যান্ডার্ড উপাদানগুলি ব্যবহার করে ট্যাবুলার ডেটার জন্য একটি পাইপলাইন বাস্তবায়নে সহায়তা করে। আপনি যদি একটি বিদ্যমান ML ওয়ার্কফ্লোকে একটি পাইপলাইনে নিয়ে যাচ্ছেন, তাহলে TFX স্ট্যান্ডার্ড উপাদানগুলির সম্পূর্ণ ব্যবহার করার জন্য আপনাকে আপনার কোড সংশোধন করতে হতে পারে। আপনাকে এমন কাস্টম উপাদানগুলিও তৈরি করতে হতে পারে যা বৈশিষ্ট্যগুলি প্রয়োগ করে যা আপনার কর্মপ্রবাহের জন্য অনন্য বা যেগুলি এখনও TFX স্ট্যান্ডার্ড উপাদান দ্বারা সমর্থিত নয়৷

  2. একবার আপনি আপনার পাইপলাইন ডিজাইন করার পরে, নিম্নলিখিত প্রক্রিয়াটি ব্যবহার করে পুনরাবৃত্তভাবে পাইপলাইনটি কাস্টমাইজ করুন। আপনার পাইপলাইনে ডেটা ইনজেস্ট করে এমন উপাদান থেকে শুরু করুন, যা সাধারণত ExampleGen উপাদান।

    1. আপনার ব্যবহারের ক্ষেত্রে ফিট করার জন্য পাইপলাইন বা একটি উপাদান কাস্টমাইজ করুন। এই কাস্টমাইজেশনগুলির মধ্যে পরিবর্তনগুলি অন্তর্ভুক্ত থাকতে পারে যেমন:

      • পাইপলাইনের পরামিতি পরিবর্তন করা হচ্ছে।
      • পাইপলাইনে উপাদান যোগ করা বা অপসারণ করা।
      • তথ্য ইনপুট উৎস প্রতিস্থাপন. এই ডেটা সোর্সটি হয় একটি ফাইল হতে পারে বা BigQuery-এর মতো পরিষেবাগুলিতে প্রশ্ন করতে পারে।
      • পাইপলাইনে একটি উপাদানের কনফিগারেশন পরিবর্তন করা হচ্ছে।
      • একটি উপাদান এর কাস্টমাইজেশন ফাংশন পরিবর্তন.
    2. স্থানীয়ভাবে স্থানীয়ভাবে কম্পোনেন্ট চালান local_runner.py স্ক্রিপ্ট, অথবা অন্য উপযুক্ত DAG রানার যদি আপনি একটি ভিন্ন অর্কেস্ট্রেটর ব্যবহার করেন। স্ক্রিপ্ট ব্যর্থ হলে, ব্যর্থতা ডিবাগ করুন এবং স্ক্রিপ্ট চালানোর জন্য পুনরায় চেষ্টা করুন।

    3. একবার এই কাস্টমাইজেশন কাজ করে, পরবর্তী কাস্টমাইজেশনে যান।

  3. পুনরাবৃত্তিমূলকভাবে কাজ করে, আপনি আপনার প্রয়োজন মেটাতে টেমপ্লেট ওয়ার্কফ্লোতে প্রতিটি ধাপ কাস্টমাইজ করতে পারেন।

একটি কাস্টম পাইপলাইন তৈরি করুন

একটি টেমপ্লেট ব্যবহার না করে একটি কাস্টম পাইপলাইন নির্মাণ সম্পর্কে আরও জানতে নিম্নলিখিত নির্দেশাবলী ব্যবহার করুন৷

  1. আপনার পাইপলাইন ডিজাইন করুন। TFX স্ট্যান্ডার্ড উপাদানগুলি আপনাকে একটি সম্পূর্ণ এমএল ওয়ার্কফ্লো বাস্তবায়নে সহায়তা করার জন্য প্রমাণিত কার্যকারিতা প্রদান করে। আপনি যদি একটি বিদ্যমান এমএল ওয়ার্কফ্লোকে একটি পাইপলাইনে স্থানান্তরিত করেন, তাহলে TFX স্ট্যান্ডার্ড উপাদানগুলির সম্পূর্ণ ব্যবহার করার জন্য আপনাকে আপনার কোড সংশোধন করতে হতে পারে। আপনাকে কাস্টম উপাদানগুলি তৈরি করতে হতে পারে যা ডেটা বৃদ্ধির মতো বৈশিষ্ট্যগুলি প্রয়োগ করে।

  2. নিম্নলিখিত উদাহরণ ব্যবহার করে আপনার পাইপলাইন সংজ্ঞায়িত করতে একটি স্ক্রিপ্ট ফাইল তৈরি করুন। এই নির্দেশিকাটি এই ফাইলটিকে my_pipeline.py হিসাবে উল্লেখ করে।

    import os
    from typing import Optional, Text, List
    from absl import logging
    from ml_metadata.proto import metadata_store_pb2
    import tfx.v1 as tfx
    
    PIPELINE_NAME = 'my_pipeline'
    PIPELINE_ROOT = os.path.join('.', 'my_pipeline_output')
    METADATA_PATH = os.path.join('.', 'tfx_metadata', PIPELINE_NAME, 'metadata.db')
    ENABLE_CACHE = True
    
    def create_pipeline(
      pipeline_name: Text,
      pipeline_root:Text,
      enable_cache: bool,
      metadata_connection_config: Optional[
        metadata_store_pb2.ConnectionConfig] = None,
      beam_pipeline_args: Optional[List[Text]] = None
    ):
      components = []
    
      return tfx.dsl.Pipeline(
            pipeline_name=pipeline_name,
            pipeline_root=pipeline_root,
            components=components,
            enable_cache=enable_cache,
            metadata_connection_config=metadata_connection_config,
            beam_pipeline_args=beam_pipeline_args, 
        )
    
    def run_pipeline():
      my_pipeline = create_pipeline(
          pipeline_name=PIPELINE_NAME,
          pipeline_root=PIPELINE_ROOT,
          enable_cache=ENABLE_CACHE,
          metadata_connection_config=tfx.orchestration.metadata.sqlite_metadata_connection_config(METADATA_PATH)
          )
    
      tfx.orchestration.LocalDagRunner().run(my_pipeline)
    
    if __name__ == '__main__':
      logging.set_verbosity(logging.INFO)
      run_pipeline()
    

    আগামী ধাপে, আপনি create_pipeline এ আপনার পাইপলাইন সংজ্ঞায়িত করুন এবং স্থানীয় রানার ব্যবহার করে স্থানীয়ভাবে আপনার পাইপলাইন চালান।

    নিম্নলিখিত প্রক্রিয়াটি ব্যবহার করে পুনরাবৃত্তিমূলকভাবে আপনার পাইপলাইন তৈরি করুন।

    1. আপনার ব্যবহারের ক্ষেত্রে ফিট করার জন্য পাইপলাইন বা একটি উপাদান কাস্টমাইজ করুন। এই কাস্টমাইজেশনগুলির মধ্যে পরিবর্তনগুলি অন্তর্ভুক্ত থাকতে পারে যেমন:

      • পাইপলাইনের পরামিতি পরিবর্তন করা হচ্ছে।
      • পাইপলাইনে উপাদান যোগ করা বা অপসারণ করা।
      • একটি ডেটা ইনপুট ফাইল প্রতিস্থাপন.
      • পাইপলাইনে একটি উপাদানের কনফিগারেশন পরিবর্তন করা হচ্ছে।
      • একটি উপাদান এর কাস্টমাইজেশন ফাংশন পরিবর্তন.
    2. স্থানীয় রানার ব্যবহার করে বা সরাসরি স্ক্রিপ্ট চালিয়ে স্থানীয়ভাবে উপাদানটি চালান। স্ক্রিপ্ট ব্যর্থ হলে, ব্যর্থতা ডিবাগ করুন এবং স্ক্রিপ্ট চালানোর জন্য পুনরায় চেষ্টা করুন।

    3. একবার এই কাস্টমাইজেশন কাজ করে, পরবর্তী কাস্টমাইজেশনে যান।

    আপনার পাইপলাইনের ওয়ার্কফ্লোতে প্রথম নোড থেকে শুরু করুন, সাধারণত প্রথম নোড আপনার পাইপলাইনে ডেটা প্রবেশ করে।

  3. আপনার পাইপলাইনে আপনার ওয়ার্কফ্লোতে প্রথম নোড যোগ করুন। এই উদাহরণে, পাইপলাইনটি ./data এ একটি ডিরেক্টরি থেকে একটি CSV লোড করতে ExampleGen স্ট্যান্ডার্ড উপাদান ব্যবহার করে।

    from tfx.components import CsvExampleGen
    
    DATA_PATH = os.path.join('.', 'data')
    
    def create_pipeline(
      pipeline_name: Text,
      pipeline_root:Text,
      data_path: Text,
      enable_cache: bool,
      metadata_connection_config: Optional[
        metadata_store_pb2.ConnectionConfig] = None,
      beam_pipeline_args: Optional[List[Text]] = None
    ):
      components = []
    
      example_gen = tfx.components.CsvExampleGen(input_base=data_path)
      components.append(example_gen)
    
      return tfx.dsl.Pipeline(
            pipeline_name=pipeline_name,
            pipeline_root=pipeline_root,
            components=components,
            enable_cache=enable_cache,
            metadata_connection_config=metadata_connection_config,
            beam_pipeline_args=beam_pipeline_args, 
        )
    
    def run_pipeline():
      my_pipeline = create_pipeline(
        pipeline_name=PIPELINE_NAME,
        pipeline_root=PIPELINE_ROOT,
        data_path=DATA_PATH,
        enable_cache=ENABLE_CACHE,
        metadata_connection_config=tfx.orchestration.metadata.sqlite_metadata_connection_config(METADATA_PATH)
        )
    
      tfx.orchestration.LocalDagRunner().run(my_pipeline)
    

    CsvExampleGen নির্দিষ্ট ডেটা পাথে CSV-এর ডেটা ব্যবহার করে ধারাবাহিক উদাহরণ রেকর্ড তৈরি করে। ডেটা রুটের সাথে CsvExampleGen কম্পোনেন্টের input_base প্যারামিটার সেট করে।

  4. my_pipeline.py হিসাবে একই ডিরেক্টরিতে একটি data ডিরেক্টরি তৈরি করুন। data ডিরেক্টরিতে একটি ছোট CSV ফাইল যোগ করুন।

  5. আপনার my_pipeline.py স্ক্রিপ্ট চালানোর জন্য নিম্নলিখিত কমান্ডটি ব্যবহার করুন।

    python my_pipeline.py
    

    ফলাফল নিম্নলিখিত মত কিছু হওয়া উচিত:

    INFO:absl:Component CsvExampleGen depends on [].
    INFO:absl:Component CsvExampleGen is scheduled.
    INFO:absl:Component CsvExampleGen is running.
    INFO:absl:Running driver for CsvExampleGen
    INFO:absl:MetadataStore with DB connection initialized
    INFO:absl:Running executor for CsvExampleGen
    INFO:absl:Generating examples.
    INFO:absl:Using 1 process(es) for Local pipeline execution.
    INFO:absl:Processing input csv data ./data/* to TFExample.
    WARNING:root:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.
    INFO:absl:Examples generated.
    INFO:absl:Running publisher for CsvExampleGen
    INFO:absl:MetadataStore with DB connection initialized
    INFO:absl:Component CsvExampleGen is finished.
    
  6. আপনার পাইপলাইনে পুনরাবৃত্তভাবে উপাদান যোগ করা চালিয়ে যান।