بناء خط أنابيب TFX محليًا

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

تعمل TFX على تسهيل تنظيم سير عمل التعلم الآلي (ML) الخاص بك كخط أنابيب ، من أجل:

  • أتمتة عملية التعلم الآلي الخاصة بك ، مما يتيح لك إعادة تدريب نموذجك وتقييمه ونشره بانتظام.
  • قم بإنشاء خطوط أنابيب ML التي تتضمن تحليلًا عميقًا لأداء النموذج والتحقق من صحة النماذج المدربة حديثًا لضمان الأداء والموثوقية.
  • مراقبة بيانات التدريب بحثًا عن الانحرافات والقضاء على الانحراف في خدمة التدريب
  • قم بزيادة سرعة التجريب عن طريق تشغيل خط أنابيب بمجموعات مختلفة من المعلمات الفائقة.

تبدأ عملية تطوير خط الأنابيب النموذجية على جهاز محلي ، مع تحليل البيانات وإعداد المكونات ، قبل نشرها في الإنتاج. يصف هذا الدليل طريقتين لبناء خط أنابيب محليًا.

  • قم بتخصيص قالب خط أنابيب TFX ليلائم احتياجات سير عمل ML الخاص بك. قوالب خطوط أنابيب TFX عبارة عن تدفقات عمل تم إنشاؤها مسبقًا توضح أفضل الممارسات باستخدام مكونات TFX القياسية.
  • بناء خط أنابيب باستخدام TFX. في حالة الاستخدام هذه ، يمكنك تحديد مسار بدون البدء من قالب.

كما يتم تطوير خط أنابيب الخاص بك، يمكنك تشغيله مع LocalDagRunner . بعد ذلك ، بمجرد تحديد مكونات خطوط الأنابيب واختبارها جيدًا ، يمكنك استخدام منسق من الدرجة الإنتاجية مثل Kubeflow أو Airflow.

قبل ان تبدأ

TFX عبارة عن حزمة Python ، لذلك ستحتاج إلى إعداد بيئة تطوير Python ، مثل بيئة افتراضية أو حاوية Docker. ثم:

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 - عقد تفاصيل التكوين مثل حيث البيانات القادمة من أو التي تشرف يستخدم
    • A دليل البيانات
      • وهذا يتضمن عادة data.csv الملف، والذي هو مصدر الافتراضي ل ExampleGen . يمكنك تغيير مصدر البيانات في configs.py .
    • والدليل النماذج مع تجهيزها رمز ونموذج التنفيذ

    • ينسخ القالب عداء DAG للبيئة المحلية و Kubeflow.

    • تتضمن بعض القوالب أيضًا دفاتر Python بحيث يمكنك استكشاف بياناتك والتحف باستخدام Machine Learning MetaData.

  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 المكون.

    • اتبع الإرشادات الواردة في التعليقات TODO في pipeline.py لإضافة المزيد من الخطوات لخط الانابيب.
  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 وظائف مثبتة لمساعدتك في تنفيذ سير عمل ML كامل. إذا كنت تنقل سير عمل ML الحالي إلى خط أنابيب ، فقد تحتاج إلى مراجعة التعليمات البرمجية الخاصة بك للاستفادة الكاملة من مكونات 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. أضف العقدة الأولى في سير عملك إلى خط الأنابيب الخاص بك. في هذا المثال، يستخدم خط أنابيب لل ExampleGen مكون قياسي لتحميل CSV من دليل على ./data .

    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. إنشاء data الدليل في نفس الدليل my_pipeline.py . إضافة ملف CSV صغير إلى data الدليل.

  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. استمر في إضافة المكونات بشكل متكرر إلى خط الأنابيب الخاص بك.