การสร้างท่อส่ง TFX ในพื้นที่

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

TFX ทำให้ง่ายต่อการจัดการเวิร์กโฟลว์การเรียนรู้ของเครื่อง (ML) เป็นไปป์ไลน์ เพื่อ:

  • ทำให้กระบวนการ 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 รายละเอียดการกำหนดค่าถือเช่นข้อมูลที่มาจากหรือที่ประพันธ์จะถูกใช้ -
    • ไดเรกทอรีข้อมูล
      • นี้มักจะมี data.csv ไฟล์ซึ่งเป็นแหล่งเริ่มต้นสำหรับ ExampleGen คุณสามารถเปลี่ยนแหล่งข้อมูลใน configs.py
    • ไดเรกทอรีรุ่นที่มีรหัสและรูปแบบการใช้งาน preprocessing

    • เทมเพลตจะคัดลอกนักวิ่ง DAG สำหรับสภาพแวดล้อมภายในเครื่องและ Kubeflow

    • เทมเพลตบางตัวยังมี Python Notebooks เพื่อให้คุณสามารถสำรวจข้อมูลและสิ่งประดิษฐ์ของคุณด้วย 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 ส่วนประกอบ

    • ตามคำแนะนำในการแสดงความคิดเห็นสิ่งที่ต้องทำใน pipeline.py เพื่อเพิ่มขั้นตอนมากขึ้นในท่อ
  5. เปิด local_runner.py ไฟล์และทบทวนเนื้อหา สคริปต์นี้จะสร้างการทำงานท่อและระบุพารามิเตอร์การทำงานของเช่น data_path และ preprocessing_fn

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

ปรับแต่งไปป์ไลน์ของคุณ

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

  1. ออกแบบไปป์ไลน์ของคุณ โครงนั่งร้านที่เทมเพลตจัดเตรียมไว้ช่วยให้คุณใช้ไปป์ไลน์สำหรับข้อมูลแบบตารางโดยใช้ส่วนประกอบมาตรฐาน TFX หากคุณกำลังย้าย ML เวิร์กโฟลว์ที่มีอยู่ในท่อ, คุณอาจต้องแก้ไขโค้ดของคุณจะทำให้การใช้เต็มรูปแบบของ ชิ้นส่วนมาตรฐาน TFX นอกจากนี้คุณยังอาจจำเป็นต้องสร้าง องค์ประกอบที่กำหนดเอง ที่ใช้คุณสมบัติที่เป็นเอกลักษณ์ของเวิร์กโฟลว์ของคุณหรือที่ยังไม่ได้รับการสนับสนุนจากชิ้นส่วนมาตรฐาน TFX

  2. เมื่อคุณออกแบบไปป์ไลน์ของคุณแล้ว ให้ปรับแต่งไปป์ไลน์ซ้ำๆ โดยใช้กระบวนการต่อไปนี้ เริ่มต้นจากองค์ประกอบที่ว่าข้อมูล ingests เข้าไปในท่อของคุณซึ่งโดยปกติจะเป็น 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. เรียกใช้คอมโพเนนต์ในเครื่องโดยใช้ Local runner หรือเรียกใช้สคริปต์โดยตรง หากสคริปต์ล้มเหลว ให้ดีบักความล้มเหลวและลองเรียกใช้สคริปต์อีกครั้ง

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