สร้างท่อส่ง TFX ภายในเครื่อง

TFX ช่วยให้จัดระเบียบเวิร์กโฟลว์แมชชีนเลิร์นนิง (ML) ของคุณเป็นไปป์ไลน์ได้ง่ายขึ้น เพื่อ:

  • ทำให้กระบวนการ ML ของคุณเป็นแบบอัตโนมัติ ซึ่งช่วยให้คุณฝึกฝน ประเมิน และปรับใช้โมเดลของคุณเป็นประจำ
  • สร้างไปป์ไลน์ ML ซึ่งรวมถึงการวิเคราะห์เชิงลึกเกี่ยวกับประสิทธิภาพของโมเดลและการตรวจสอบความถูกต้องของโมเดลที่ได้รับการฝึกใหม่ เพื่อให้มั่นใจถึงประสิทธิภาพและความน่าเชื่อถือ
  • ตรวจสอบข้อมูลการฝึกอบรมเพื่อหาความผิดปกติ และกำจัดการบิดเบือนการให้บริการการฝึกอบรม
  • เพิ่มความเร็วของการทดลองโดยการรันไปป์ไลน์ด้วยชุดไฮเปอร์พารามิเตอร์ที่แตกต่างกัน

กระบวนการพัฒนาไปป์ไลน์ทั่วไปเริ่มต้นบนเครื่องท้องถิ่น พร้อมด้วยการวิเคราะห์ข้อมูลและการตั้งค่าส่วนประกอบ ก่อนที่จะนำไปใช้จริง คู่มือนี้จะอธิบายสองวิธีในการสร้างไปป์ไลน์ภายในเครื่อง

  • ปรับแต่งเทมเพลตไปป์ไลน์ TFX ให้เหมาะกับความต้องการของเวิร์กโฟลว์ ML ของคุณ เทมเพลตไปป์ไลน์ TFX เป็นเวิร์กโฟลว์ที่สร้างไว้ล่วงหน้าซึ่งสาธิตแนวทางปฏิบัติที่ดีที่สุดโดยใช้ส่วนประกอบมาตรฐาน TFX
  • สร้างไปป์ไลน์โดยใช้ TFX ในกรณีการใช้งานนี้ คุณจะกำหนดไปป์ไลน์โดยไม่ต้องเริ่มจากเทมเพลต

ขณะที่คุณกำลังพัฒนาไปป์ไลน์ คุณสามารถรันด้วย LocalDagRunner จากนั้น เมื่อส่วนประกอบไปป์ไลน์ได้รับการกำหนดและทดสอบอย่างดีแล้ว คุณจะต้องใช้ตัวจัดการระดับการผลิต เช่น Kubeflow หรือ Airflow

ก่อนที่คุณจะเริ่ม

TFX เป็นแพ็คเกจ Python ดังนั้นคุณจะต้องตั้งค่าสภาพแวดล้อมการพัฒนา Python เช่น สภาพแวดล้อมเสมือนหรือคอนเทนเนอร์ Docker แล้ว:

pip install tfx

หากคุณยังใหม่กับไปป์ไลน์ TFX โปรดเรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดหลักสำหรับไปป์ไลน์ TFX ก่อนดำเนินการต่อ

สร้างไปป์ไลน์โดยใช้เทมเพลต

เทมเพลต TFX Pipeline ช่วยให้เริ่มต้นการพัฒนาไปป์ไลน์ได้ง่ายขึ้น โดยจัดเตรียมชุดคำจำกัดความไปป์ไลน์ที่สร้างไว้ล่วงหน้าซึ่งคุณสามารถปรับแต่งให้เหมาะกับกรณีการใช้งานของคุณได้

ส่วนต่อไปนี้จะอธิบายวิธีสร้างสำเนาของเทมเพลตและปรับแต่งให้ตรงตามความต้องการของคุณ

สร้างสำเนาของเทมเพลตไปป์ไลน์

  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 runners สำหรับสภาพแวดล้อมท้องถิ่นและ Kubeflow

    • เทมเพลตบางตัวยังรวม Python Notebooks ไว้ด้วย เพื่อให้คุณสามารถสำรวจข้อมูลและอาร์ติแฟกต์ของคุณด้วย MetaData ของ Machine Learning

  2. รันคำสั่งต่อไปนี้ในไดเร็กทอรีไปป์ไลน์ของคุณ:

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

    คำสั่งสร้างไปป์ไลน์ที่รันโดยใช้ LocalDagRunner ซึ่งจะเพิ่มไดเร็กทอรีต่อไปนี้ในไปป์ไลน์ของคุณ:

    • ไดเรกทอรี tfx_metadata ซึ่งมีที่เก็บข้อมูล ML Metadata ที่ใช้ในเครื่อง
    • ไดเรกทอรี 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 และรันไปป์ไลน์ในเครื่องโดยใช้ Local Runner

    สร้างไปป์ไลน์ของคุณซ้ำๆ โดยใช้กระบวนการต่อไปนี้

    1. ปรับแต่งไปป์ไลน์หรือส่วนประกอบให้เหมาะกับกรณีการใช้งานของคุณ การปรับแต่งเหล่านี้อาจรวมถึงการเปลี่ยนแปลงเช่น:

      • การเปลี่ยนพารามิเตอร์ไปป์ไลน์
      • การเพิ่มส่วนประกอบลงในไปป์ไลน์หรือการลบออก
      • การแทนที่ไฟล์อินพุตข้อมูล
      • การเปลี่ยนการกำหนดค่าส่วนประกอบในไปป์ไลน์
      • การเปลี่ยนฟังก์ชันการปรับแต่งส่วนประกอบ
    2. รันคอมโพเนนต์ในเครื่องโดยใช้รันเนอร์ในเครื่องหรือโดยการรันสคริปต์โดยตรง หากสคริปต์ล้มเหลว ให้แก้ไขข้อบกพร่องและลองเรียกใช้สคริปต์อีกครั้ง

    3. เมื่อการปรับแต่งนี้ใช้งานได้แล้ว ให้ไปยังการปรับแต่งถัดไป

    เริ่มจากโหนดแรกในเวิร์กโฟลว์ของไปป์ไลน์ของคุณ โดยทั่วไปแล้วโหนดแรกจะนำเข้าข้อมูลลงในไปป์ไลน์ของคุณ

  3. เพิ่มโหนดแรกในเวิร์กโฟลว์ของคุณไปยังไปป์ไลน์ของคุณ ในตัวอย่างนี้ ไปป์ไลน์ใช้ส่วนประกอบมาตรฐาน ExampleGen เพื่อโหลด CSV จากไดเรกทอรีที่ ./data 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 ที่เส้นทางข้อมูลที่ระบุ โดยการตั้งค่าพารามิเตอร์ input_base ของคอมโพเนนต์ CsvExampleGen ด้วยรูทข้อมูล

  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. เพิ่มส่วนประกอบไปยังไปป์ไลน์ของคุณซ้ำๆ ต่อไป