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