TFX ทำให้ง่ายต่อการจัดการเวิร์กโฟลว์การเรียนรู้ของเครื่อง (ML) เป็นไปป์ไลน์ เพื่อ:
- ทำให้กระบวนการ ML ของคุณเป็นแบบอัตโนมัติ ซึ่งช่วยให้คุณฝึกซ้ำ ประเมิน และปรับใช้โมเดลของคุณเป็นประจำ
- สร้างไปป์ไลน์ ML ซึ่งรวมถึงการวิเคราะห์เชิงลึกของประสิทธิภาพของแบบจำลองและการตรวจสอบความถูกต้องของแบบจำลองที่ได้รับการฝึกอบรมใหม่เพื่อให้มั่นใจในประสิทธิภาพและความน่าเชื่อถือ
- ตรวจสอบข้อมูลการฝึกอบรมเพื่อหาความผิดปกติและขจัดความเบ้ในการฝึก
- เพิ่มความเร็วของการทดลองโดยเรียกใช้ไปป์ไลน์ที่มีชุดไฮเปอร์พารามิเตอร์ต่างๆ
กระบวนการพัฒนาไปป์ไลน์ทั่วไปเริ่มต้นในเครื่องท้องถิ่น ด้วยการวิเคราะห์ข้อมูลและการตั้งค่าส่วนประกอบ ก่อนที่จะนำไปใช้ในการผลิต คู่มือนี้อธิบายสองวิธีในการสร้างไปป์ไลน์ในเครื่อง
- ปรับแต่งเทมเพลตไปป์ไลน์ TFX เพื่อให้เหมาะกับความต้องการของเวิร์กโฟลว์ ML ของคุณ เทมเพลตไปป์ไลน์ TFX เป็นเวิร์กโฟลว์ที่สร้างไว้ล่วงหน้าซึ่งแสดงให้เห็นแนวทางปฏิบัติที่ดีที่สุดโดยใช้ส่วนประกอบมาตรฐาน TFX
- สร้างไปป์ไลน์โดยใช้ TFX ในกรณีการใช้งานนี้ คุณกำหนดไปป์ไลน์โดยไม่ต้องเริ่มต้นจากเทมเพลต
ในขณะที่คุณกำลังพัฒนาท่อของคุณคุณสามารถเรียกใช้มันกับ LocalDagRunner
จากนั้น เมื่อส่วนประกอบไปป์ไลน์ได้รับการกำหนดและทดสอบอย่างดีแล้ว คุณจะใช้ออร์เคสตราระดับโปรดักชัน เช่น Kubeflow หรือ Airflow
ก่อนจะเริ่ม
TFX เป็นแพ็คเกจ Python ดังนั้น คุณจะต้องตั้งค่าสภาพแวดล้อมการพัฒนา Python เช่น สภาพแวดล้อมเสมือนหรือคอนเทนเนอร์ Docker แล้ว:
pip install tfx
ถ้าคุณยังใหม่กับท่อ TFX, เรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดหลักสำหรับท่อ TFX ก่อนดำเนินการต่อ
สร้างไปป์ไลน์โดยใช้เทมเพลต
เทมเพลตไปป์ไลน์ TFX ช่วยให้เริ่มต้นการพัฒนาไปป์ไลน์ได้ง่ายขึ้นโดยจัดเตรียมชุดคำจำกัดความไปป์ไลน์ที่สร้างไว้ล่วงหน้าซึ่งคุณปรับแต่งได้สำหรับกรณีการใช้งานของคุณ
ส่วนต่อไปนี้จะอธิบายวิธีสร้างสำเนาของเทมเพลตและปรับแต่งให้ตรงกับความต้องการของคุณ
สร้างสำเนาของเทมเพลตไปป์ไลน์
ดูรายการเทมเพลตไปป์ไลน์ 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
- นี้มักจะมี
ไดเรกทอรีรุ่นที่มีรหัสและรูปแบบการใช้งาน preprocessing
เทมเพลตจะคัดลอกนักวิ่ง DAG สำหรับสภาพแวดล้อมภายในเครื่องและ Kubeflow
เทมเพลตบางตัวยังมี Python Notebooks เพื่อให้คุณสามารถสำรวจข้อมูลและสิ่งประดิษฐ์ของคุณด้วย Machine Learning MetaData
- ไดเรกทอรีท่อด้วย
รันคำสั่งต่อไปนี้ในไดเร็กทอรีไปป์ไลน์ของคุณ:
tfx pipeline create --pipeline_path local_runner.py
tfx run create --pipeline_name pipeline_name
คำสั่งสร้างวิ่งท่อใช้
LocalDagRunner
ซึ่งจะเพิ่มไดเรกทอรีต่อไปนี้เพื่อท่อของคุณ:- ไดเรกทอรี tfx_metadata ซึ่งมีร้านค้า ML เมตาดาต้าที่ใช้ในประเทศ
- ไดเรกทอรี tfx_pipeline_output ซึ่งมีผลไฟล์ท่อของ
เปิดท่อของ
pipeline/configs.py
ไฟล์และตรวจทานเนื้อหา สคริปต์นี้กำหนดตัวเลือกการกำหนดค่าที่ใช้โดยไปป์ไลน์และฟังก์ชันส่วนประกอบ นี่คือที่ที่คุณจะระบุสิ่งต่างๆ เช่น ตำแหน่งของแหล่งข้อมูลหรือจำนวนขั้นตอนการฝึกในการทำงานเปิดท่อของ
pipeline/pipeline.py
ไฟล์และตรวจทานเนื้อหา สคริปต์นี้สร้างไปป์ไลน์ TFX ในขั้นต้นท่อมีเพียงExampleGen
ส่วนประกอบ- ตามคำแนะนำในการแสดงความคิดเห็นสิ่งที่ต้องทำใน
pipeline.py
เพื่อเพิ่มขั้นตอนมากขึ้นในท่อ
- ตามคำแนะนำในการแสดงความคิดเห็นสิ่งที่ต้องทำใน
เปิด
local_runner.py
ไฟล์และทบทวนเนื้อหา สคริปต์นี้จะสร้างการทำงานท่อและระบุพารามิเตอร์การทำงานของเช่นdata_path
และpreprocessing_fn
คุณได้ตรวจสอบนั่งร้านที่สร้างขึ้นโดยแม่แบบและสร้างการทำงานโดยใช้ท่อ
LocalDagRunner
ถัดไป ปรับแต่งเทมเพลตให้เหมาะกับความต้องการของคุณ
ปรับแต่งไปป์ไลน์ของคุณ
ส่วนนี้ให้ภาพรวมเกี่ยวกับวิธีเริ่มต้นปรับแต่งเทมเพลตของคุณ
ออกแบบไปป์ไลน์ของคุณ โครงนั่งร้านที่เทมเพลตจัดเตรียมไว้ช่วยให้คุณใช้ไปป์ไลน์สำหรับข้อมูลแบบตารางโดยใช้ส่วนประกอบมาตรฐาน TFX หากคุณกำลังย้าย ML เวิร์กโฟลว์ที่มีอยู่ในท่อ, คุณอาจต้องแก้ไขโค้ดของคุณจะทำให้การใช้เต็มรูปแบบของ ชิ้นส่วนมาตรฐาน TFX นอกจากนี้คุณยังอาจจำเป็นต้องสร้าง องค์ประกอบที่กำหนดเอง ที่ใช้คุณสมบัติที่เป็นเอกลักษณ์ของเวิร์กโฟลว์ของคุณหรือที่ยังไม่ได้รับการสนับสนุนจากชิ้นส่วนมาตรฐาน TFX
เมื่อคุณออกแบบไปป์ไลน์ของคุณแล้ว ให้ปรับแต่งไปป์ไลน์ซ้ำๆ โดยใช้กระบวนการต่อไปนี้ เริ่มต้นจากองค์ประกอบที่ว่าข้อมูล ingests เข้าไปในท่อของคุณซึ่งโดยปกติจะเป็น
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, ) 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, ) 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
พารามิเตอร์ที่มีรากข้อมูลสร้าง
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.
ดำเนินการต่อเพื่อเพิ่มส่วนประกอบไปยังไปป์ไลน์ของคุณซ้ำๆ