TFX ช่วยให้จัดระเบียบเวิร์กโฟลว์แมชชีนเลิร์นนิง (ML) ของคุณเป็นไปป์ไลน์ได้ง่ายขึ้น เพื่อ:
- ทำให้กระบวนการ ML ของคุณเป็นแบบอัตโนมัติ ซึ่งช่วยให้คุณฝึกฝน ประเมิน และปรับใช้โมเดลของคุณเป็นประจำ
- สร้างไปป์ไลน์ ML ซึ่งรวมถึงการวิเคราะห์เชิงลึกเกี่ยวกับประสิทธิภาพของโมเดลและการตรวจสอบความถูกต้องของโมเดลที่ได้รับการฝึกใหม่ เพื่อให้มั่นใจถึงประสิทธิภาพและความน่าเชื่อถือ
- ตรวจสอบข้อมูลการฝึกอบรมเพื่อหาความผิดปกติ และกำจัดการบิดเบือนการให้บริการการฝึกอบรม
- เพิ่มความเร็วของการทดลองโดยการรันไปป์ไลน์ด้วยชุดไฮเปอร์พารามิเตอร์ที่แตกต่างกัน
กระบวนการพัฒนาไปป์ไลน์ทั่วไปเริ่มต้นบนเครื่องท้องถิ่น พร้อมด้วยการวิเคราะห์ข้อมูลและการตั้งค่าส่วนประกอบ ก่อนที่จะนำไปใช้จริง คู่มือนี้จะอธิบายสองวิธีในการสร้างไปป์ไลน์ภายในเครื่อง
- ปรับแต่งเทมเพลตไปป์ไลน์ TFX ให้เหมาะกับความต้องการของเวิร์กโฟลว์ ML ของคุณ เทมเพลตไปป์ไลน์ TFX เป็นเวิร์กโฟลว์ที่สร้างไว้ล่วงหน้าซึ่งสาธิตแนวทางปฏิบัติที่ดีที่สุดโดยใช้ส่วนประกอบมาตรฐาน TFX
- สร้างไปป์ไลน์โดยใช้ TFX ในกรณีการใช้งานนี้ คุณจะกำหนดไปป์ไลน์โดยไม่ต้องเริ่มจากเทมเพลต
 ขณะที่คุณกำลังพัฒนาไปป์ไลน์ คุณสามารถรันด้วย LocalDagRunner จากนั้น เมื่อส่วนประกอบไปป์ไลน์ได้รับการกำหนดและทดสอบอย่างดีแล้ว คุณจะต้องใช้ตัวจัดการระดับการผลิต เช่น Kubeflow หรือ Airflow
ก่อนที่คุณจะเริ่ม
TFX เป็นแพ็คเกจ Python ดังนั้นคุณจะต้องตั้งค่าสภาพแวดล้อมการพัฒนา Python เช่น สภาพแวดล้อมเสมือนหรือคอนเทนเนอร์ Docker แล้ว:
pip install tfx
หากคุณยังใหม่กับไปป์ไลน์ TFX โปรด เรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดหลักสำหรับไปป์ไลน์ TFX ก่อนดำเนินการต่อ
สร้างไปป์ไลน์โดยใช้เทมเพลต
เทมเพลต TFX Pipeline ช่วยให้เริ่มต้นการพัฒนาไปป์ไลน์ได้ง่ายขึ้น โดยจัดเตรียมชุดคำจำกัดความไปป์ไลน์ที่สร้างไว้ล่วงหน้าซึ่งคุณสามารถปรับแต่งให้เหมาะกับกรณีการใช้งานของคุณได้
ส่วนต่อไปนี้จะอธิบายวิธีสร้างสำเนาของเทมเพลตและปรับแต่งให้ตรงตามความต้องการของคุณ
สร้างสำเนาของเทมเพลตไปป์ไลน์
- ดูรายการเทมเพลตไปป์ไลน์ TFX ที่พร้อมใช้งาน: - tfx template list 
- เลือกเทมเพลตจากรายการ - tfx template copy --model=template --pipeline_name=pipeline-name \ --destination_path=destination-path - แทนที่สิ่งต่อไปนี้: - template : ชื่อของเทมเพลตที่คุณต้องการคัดลอก
- pipeline-name : ชื่อของไปป์ไลน์ที่จะสร้าง
- destination-path : เส้นทางที่จะคัดลอกเทมเพลตไปไว้
 - เรียนรู้เพิ่มเติมเกี่ยวกับ คำสั่ง - tfx template copy
- มีการสร้างสำเนาของเทมเพลตไปป์ไลน์ตามเส้นทางที่คุณระบุ 
สำรวจเทมเพลตไปป์ไลน์
ส่วนนี้จะแสดงภาพรวมของโครงที่สร้างโดยเทมเพลต
- สำรวจไดเรกทอรีและไฟล์ที่ถูกคัดลอกไปยังไดเรกทอรีรากของไปป์ไลน์ของคุณ -  ไดเร็กทอรี ไปป์ไลน์ ด้วย-  pipeline.py- กำหนดไปป์ไลน์และแสดงรายการส่วนประกอบที่ใช้งานอยู่
-  configs.py- เก็บรายละเอียดการกำหนดค่า เช่น ว่าข้อมูลมาจากไหนหรือมีการใช้ออเคสตราใด
 
-  
-  ไดเร็กทอรี ข้อมูล-  โดยทั่วไปจะมีไฟล์ data.csvซึ่งเป็นแหล่งที่มาเริ่มต้นสำหรับExampleGenคุณสามารถเปลี่ยนแหล่งข้อมูลในconfigs.py
 
-  โดยทั่วไปจะมีไฟล์ 
- ไดเร็กทอรี โมเดล ที่มีโค้ดการประมวลผลล่วงหน้าและการใช้งานโมเดล 
- เทมเพลตจะคัดลอก DAG runners สำหรับสภาพแวดล้อมท้องถิ่นและ Kubeflow 
- เทมเพลตบางตัวยังรวม Python Notebooks ไว้ด้วย เพื่อให้คุณสามารถสำรวจข้อมูลและอาร์ติแฟกต์ของคุณด้วย MetaData ของ Machine Learning 
 
-  ไดเร็กทอรี ไปป์ไลน์ ด้วย
- รันคำสั่งต่อไปนี้ในไดเร็กทอรีไปป์ไลน์ของคุณ: - tfx pipeline create --pipeline_path local_runner.py - tfx run create --pipeline_name pipeline_name - คำสั่งสร้างไปป์ไลน์ที่รันโดยใช้ - LocalDagRunnerซึ่งจะเพิ่มไดเร็กทอรีต่อไปนี้ในไปป์ไลน์ของคุณ:- ไดเรกทอรี tfx_metadata ซึ่งมีที่เก็บข้อมูล ML Metadata ที่ใช้ในเครื่อง
- ไดเรกทอรี tfx_pipeline_output ซึ่งมีเอาต์พุตไฟล์ของไปป์ไลน์
 
- เปิดไฟล์ - pipeline/configs.pyของไปป์ไลน์และตรวจสอบเนื้อหา สคริปต์นี้กำหนดตัวเลือกการกำหนดค่าที่ใช้โดยไปป์ไลน์และฟังก์ชันส่วนประกอบ นี่คือที่ที่คุณจะระบุสิ่งต่างๆ เช่น ตำแหน่งของแหล่งข้อมูลหรือจำนวนขั้นตอนการฝึกในการวิ่ง
- เปิดไฟล์ - pipeline/pipeline.pyของไปป์ไลน์และตรวจสอบเนื้อหา สคริปต์นี้สร้างไปป์ไลน์ TFX ในตอนแรก ไปป์ไลน์จะมีเพียงส่วนประกอบ- ExampleGenเท่านั้น-  ทำตามคำแนะนำในความคิดเห็น TODO ใน pipeline.pyเพื่อเพิ่มขั้นตอนเพิ่มเติมให้กับไปป์ไลน์
 
-  ทำตามคำแนะนำในความคิดเห็น TODO ใน 
- เปิดไฟล์ - local_runner.pyและตรวจสอบเนื้อหา สคริปต์นี้สร้างการรันไปป์ไลน์และระบุ พารามิเตอร์ ของการรัน เช่น- data_pathและ- preprocessing_fn
- คุณได้ตรวจสอบโครงที่สร้างโดยเทมเพลต และสร้างไปป์ไลน์ที่รันโดยใช้ - LocalDagRunnerจากนั้น ปรับแต่งเทมเพลตให้เหมาะกับความต้องการของคุณ
ปรับแต่งไปป์ไลน์ของคุณ
ส่วนนี้จะแสดงภาพรวมของวิธีเริ่มต้นปรับแต่งเทมเพลตของคุณ
- ออกแบบไปป์ไลน์ของคุณ โครงสร้างที่เทมเพลตจัดเตรียมไว้ช่วยให้คุณใช้ไปป์ไลน์สำหรับข้อมูลแบบตารางโดยใช้ส่วนประกอบมาตรฐาน TFX หากคุณกำลังย้ายเวิร์กโฟลว์ ML ที่มีอยู่ไปยังไปป์ไลน์ คุณอาจต้องแก้ไขโค้ดของคุณเพื่อใช้งาน ส่วนประกอบมาตรฐาน TFX ได้ อย่างเต็มที่ คุณอาจต้องสร้าง ส่วนประกอบที่กำหนดเอง ซึ่งใช้คุณสมบัติเฉพาะสำหรับเวิร์กโฟลว์ของคุณหรือที่ยังไม่รองรับโดยส่วนประกอบมาตรฐาน TFX 
- เมื่อคุณออกแบบไปป์ไลน์แล้ว ให้ปรับแต่งไปป์ไลน์ซ้ำๆ โดยใช้กระบวนการต่อไปนี้ เริ่มจากส่วนประกอบที่นำเข้าข้อมูลเข้าสู่ไปป์ไลน์ของคุณ ซึ่งโดยปกติจะเป็นส่วนประกอบ - ExampleGen- ปรับแต่งไปป์ไลน์หรือส่วนประกอบให้เหมาะกับกรณีการใช้งานของคุณ การปรับแต่งเหล่านี้อาจรวมถึงการเปลี่ยนแปลงเช่น: - การเปลี่ยนพารามิเตอร์ไปป์ไลน์
- การเพิ่มส่วนประกอบลงในไปป์ไลน์หรือการลบออก
- การเปลี่ยนแหล่งป้อนข้อมูล แหล่งข้อมูลนี้อาจเป็นไฟล์หรือค้นหาบริการต่างๆ เช่น BigQuery ก็ได้
- การเปลี่ยนการกำหนดค่าส่วนประกอบในไปป์ไลน์
- การเปลี่ยนฟังก์ชันการปรับแต่งส่วนประกอบ
 
- เรียกใช้คอมโพเนนต์ในเครื่องโดยใช้สคริปต์ - local_runner.pyหรือรันเนอร์ DAG อื่นที่เหมาะสม หากคุณใช้ออเคสตราอื่น หากสคริปต์ล้มเหลว ให้แก้ไขข้อบกพร่องและลองเรียกใช้สคริปต์อีกครั้ง
- เมื่อการปรับแต่งนี้ใช้งานได้แล้ว ให้ไปยังการปรับแต่งถัดไป 
 
- การทำงานซ้ำๆ คุณสามารถปรับแต่งแต่ละขั้นตอนในเวิร์กโฟลว์เทมเพลตให้ตรงกับความต้องการของคุณได้ 
สร้างไปป์ไลน์แบบกำหนดเอง
ใช้คำแนะนำต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการสร้างไปป์ไลน์แบบกำหนดเองโดยไม่ต้องใช้เทมเพลต
- ออกแบบไปป์ไลน์ของคุณ ส่วนประกอบมาตรฐาน TFX มอบฟังก์ชันการทำงานที่ได้รับการพิสูจน์แล้วเพื่อช่วยให้คุณปรับใช้เวิร์กโฟลว์ ML ที่สมบูรณ์ได้ หากคุณกำลังย้ายเวิร์กโฟลว์ ML ที่มีอยู่ไปยังไปป์ไลน์ คุณอาจต้องแก้ไขโค้ดของคุณเพื่อใช้งานส่วนประกอบมาตรฐาน TFX ได้อย่างเต็มที่ คุณอาจต้องสร้าง องค์ประกอบที่กำหนดเอง ซึ่งใช้ฟีเจอร์ต่างๆ เช่น การเพิ่มข้อมูล - เรียนรู้เพิ่มเติมเกี่ยวกับ ส่วนประกอบ TFX มาตรฐาน
- เรียนรู้เพิ่มเติมเกี่ยวกับ ส่วนประกอบที่กำหนดเอง
 
- สร้างไฟล์สคริปต์เพื่อกำหนดไปป์ไลน์ของคุณโดยใช้ตัวอย่างต่อไปนี้ คู่มือนี้อ้างถึงไฟล์นี้เป็น - 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, <!-- needed? --> ) 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- สร้างไปป์ไลน์ของคุณซ้ำๆ โดยใช้กระบวนการต่อไปนี้ - ปรับแต่งไปป์ไลน์หรือส่วนประกอบให้เหมาะกับกรณีการใช้งานของคุณ การปรับแต่งเหล่านี้อาจรวมถึงการเปลี่ยนแปลงเช่น: - การเปลี่ยนพารามิเตอร์ไปป์ไลน์
- การเพิ่มส่วนประกอบลงในไปป์ไลน์หรือการลบออก
- การแทนที่ไฟล์อินพุตข้อมูล
- การเปลี่ยนการกำหนดค่าส่วนประกอบในไปป์ไลน์
- การเปลี่ยนฟังก์ชันการปรับแต่งส่วนประกอบ
 
- รันคอมโพเนนต์ในเครื่องโดยใช้รันเนอร์ในเครื่องหรือโดยการรันสคริปต์โดยตรง หากสคริปต์ล้มเหลว ให้แก้ไขข้อบกพร่องและลองเรียกใช้สคริปต์อีกครั้ง 
- เมื่อการปรับแต่งนี้ใช้งานได้แล้ว ให้ไปยังการปรับแต่งถัดไป 
 - เริ่มจากโหนดแรกในเวิร์กโฟลว์ของไปป์ไลน์ของคุณ โดยทั่วไปแล้วโหนดแรกจะนำเข้าข้อมูลลงในไปป์ไลน์ของคุณ 
- เพิ่มโหนดแรกในเวิร์กโฟลว์ของคุณไปยังไปป์ไลน์ของคุณ ในตัวอย่างนี้ ไปป์ไลน์ใช้ส่วนประกอบมาตรฐาน - 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, <!-- needed? --> ) 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ด้วยรูทข้อมูล
- สร้างไดเร็กทอรี - dataในไดเร็กทอรีเดียวกันกับ- my_pipeline.pyเพิ่มไฟล์ CSV ขนาดเล็กลงในไดเร็กทอรี- data
- ใช้คำสั่งต่อไปนี้เพื่อเรียกใช้สคริปต์ - 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. 
- เพิ่มส่วนประกอบไปยังไปป์ไลน์ของคุณซ้ำๆ ต่อไป