ส่วนประกอบฟังก์ชัน Python แบบกำหนดเอง

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

การเขียนองค์ประกอบที่คุณกำหนดเองในรูปแบบนี้ตรงไปตรงมามาก ดังตัวอย่างต่อไปนี้

class MyOutput(TypedDict):
  accuracy: float

@component
def MyValidationComponent(
    model: InputArtifact[Model],
    blessing: OutputArtifact[Model],
    accuracy_threshold: Parameter[int] = 10,
) -> MyOutput:
  '''My simple custom model validation component.'''

  accuracy = evaluate_model(model)
  if accuracy >= accuracy_threshold:
    write_output_blessing(blessing)

  return {
    'accuracy': accuracy
  }

ภายใต้ประทุน สิ่งนี้จะกำหนดองค์ประกอบแบบกำหนดเองที่เป็นคลาสย่อยของ BaseComponent รวมถึงคลาส Spec และ Executor

หากคุณต้องการกำหนดคลาสย่อยของ BaseBeamComponent เพื่อให้คุณสามารถใช้บีมไปป์ไลน์ที่มีการกำหนดค่าที่ใช้ร่วมกันของ TFX-pipeline-wise เช่น beam_pipeline_args เมื่อรวบรวมไปป์ไลน์ ( ตัวอย่าง Chicago Taxi Pipeline ) คุณสามารถตั้ง use_beam=True ในมัณฑนากรและเพิ่ม BeamComponentParameter อื่นที่มีค่าเริ่มต้น None ในฟังก์ชันของคุณ ดังตัวอย่างต่อไปนี้:

@component(use_beam=True)
def MyDataProcessor(
    examples: InputArtifact[Example],
    processed_examples: OutputArtifact[Example],
    beam_pipeline: BeamComponentParameter[beam.Pipeline] = None,
    ) -> None:
  '''My simple custom model validation component.'''

  with beam_pipeline as p:
    # data pipeline definition with beam_pipeline begins
    ...
    # data pipeline definition with beam_pipeline ends

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

อินพุต เอาต์พุต และพารามิเตอร์

ใน TFX อินพุตและเอาต์พุตจะถูกติดตามเป็นออบเจ็กต์ Artifact ซึ่งอธิบายตำแหน่งของและคุณสมบัติเมทาดาทาที่เกี่ยวข้องกับข้อมูลพื้นฐาน ข้อมูลนี้ถูกเก็บไว้ใน ML Metadata อาร์ติแฟกต์สามารถอธิบายประเภทข้อมูลที่ซับซ้อนหรือประเภทข้อมูลแบบง่าย เช่น int, float, bytes หรือสตริง Unicode

พารามิเตอร์คืออาร์กิวเมนต์ (int, float, bytes หรือ Unicode string) ไปยังส่วนประกอบที่รู้จัก ณ เวลาที่สร้างไปป์ไลน์ พารามิเตอร์มีประโยชน์สำหรับการระบุอาร์กิวเมนต์และไฮเปอร์พารามิเตอร์ เช่น จำนวนการวนซ้ำของการฝึก อัตราการออกกลางคัน และการกำหนดค่าอื่นๆ ให้กับส่วนประกอบของคุณ พารามิเตอร์จะถูกจัดเก็บเป็นคุณสมบัติของการดำเนินการส่วนประกอบเมื่อมีการติดตามใน ML Metadata

คำนิยาม

หากต้องการสร้างส่วนประกอบที่กำหนดเอง ให้เขียนฟังก์ชันที่ใช้ตรรกะที่คุณกำหนดเองและตกแต่งด้วย @component มัณฑนากร จากโมดูล tfx.dsl.component.experimental.decorators หากต้องการกำหนดสคีมาอินพุตและเอาต์พุตของส่วนประกอบ ให้ใส่คำอธิบายประกอบอาร์กิวเมนต์ของฟังก์ชันและส่งคืนค่าโดยใช้คำอธิบายประกอบจากโมดูล tfx.dsl.component.experimental.annotations :

  • สำหรับ อินพุตอาร์ติแฟกต์ แต่ละรายการ ให้ใช้คำอธิบายประกอบคำแนะนำประเภท InputArtifact[ArtifactType] แทนที่ ArtifactType ด้วยประเภทของสิ่งประดิษฐ์ ซึ่งเป็นคลาสย่อยของ tfx.types.Artifact อินพุตเหล่านี้อาจเป็นอาร์กิวเมนต์เพิ่มเติมได้

  • สำหรับ อาร์ติแฟกต์เอาต์พุต แต่ละรายการ ให้ใช้คำอธิบายประกอบคำแนะนำประเภท OutputArtifact[ArtifactType] แทนที่ ArtifactType ด้วยประเภทของสิ่งประดิษฐ์ ซึ่งเป็นคลาสย่อยของ tfx.types.Artifact อาร์ติแฟกต์เอาต์พุตของคอมโพเนนต์ควรถูกส่งผ่านเป็นอาร์กิวเมนต์อินพุตของฟังก์ชัน เพื่อให้คอมโพเนนต์ของคุณสามารถเขียนเอาต์พุตไปยังตำแหน่งที่จัดการโดยระบบ และตั้งค่าคุณสมบัติเมตาดาต้าของส่วนที่เหมาะสม อาร์กิวเมนต์นี้เป็นทางเลือกหรืออาร์กิวเมนต์นี้สามารถกำหนดด้วยค่าเริ่มต้นได้

  • สำหรับแต่ละ พารามิเตอร์ ให้ใช้ประเภทคำอธิบายประกอบคำอธิบาย Parameter[T] แทนที่ T ด้วยประเภทของพารามิเตอร์ ขณะนี้เรารองรับเฉพาะประเภทหลามดั้งเดิม: bool , int , float , str หรือ bytes

  • สำหรับ บีมไปป์ไลน์ ให้ใช้คำอธิบายประกอบประเภท BeamComponentParameter[beam.Pipeline] ตั้งค่าเริ่มต้นให้เป็น None ค่า None จะถูกแทนที่ด้วยไปป์ไลน์ลำแสงที่สร้างโดย _make_beam_pipeline() ของ BaseBeamExecutor

  • สำหรับ อินพุตประเภทข้อมูลอย่างง่าย แต่ละประเภท ( int , float , str หรือ bytes ) ซึ่งไม่ทราบเวลาการก่อสร้างไปป์ไลน์ ให้ใช้ประเภทคำแนะนำ T โปรดทราบว่าในรุ่น TFX 0.22 ไม่สามารถส่งค่าที่เป็นรูปธรรม ณ เวลาก่อสร้างไปป์ไลน์สำหรับอินพุตประเภทนี้ได้ (ใช้คำอธิบายประกอบ Parameter แทน ตามที่อธิบายไว้ในส่วนก่อนหน้า) อาร์กิวเมนต์นี้เป็นทางเลือกหรืออาร์กิวเมนต์นี้สามารถกำหนดด้วยค่าเริ่มต้นได้ หากส่วนประกอบของคุณมีเอาต์พุตประเภทข้อมูลแบบธรรมดา ( int , float , str หรือ bytes ) คุณสามารถส่งคืนเอาต์พุตเหล่านี้ได้โดยใช้ TypedDict เป็นคำอธิบายประกอบประเภทส่งคืน และส่งคืนอ็อบเจ็กต์ dict ที่เหมาะสม

ในเนื้อความของฟังก์ชัน อาร์ติแฟกต์อินพุตและเอาท์พุตจะถูกส่งผ่านเป็นอ็อบเจ็กต์ tfx.types.Artifact คุณสามารถตรวจสอบ .uri เพื่อรับตำแหน่งที่ระบบจัดการและอ่าน/ตั้งค่าคุณสมบัติใดๆ พารามิเตอร์อินพุตและอินพุตประเภทข้อมูลอย่างง่ายจะถูกส่งผ่านเป็นออบเจ็กต์ประเภทที่ระบุ เอาต์พุตประเภทข้อมูลอย่างง่ายควรส่งคืนเป็นพจนานุกรม โดยที่คีย์คือชื่อเอาต์พุตที่เหมาะสม และค่าคือค่าส่งคืนที่ต้องการ

ส่วนประกอบฟังก์ชันที่สมบูรณ์สามารถมีลักษณะดังนี้:

from typing import TypedDict
import tfx.v1 as tfx
from tfx.dsl.component.experimental.decorators import component

class MyOutput(TypedDict):
  loss: float
  accuracy: float

@component
def MyTrainerComponent(
    training_data: tfx.dsl.components.InputArtifact[tfx.types.standard_artifacts.Examples],
    model: tfx.dsl.components.OutputArtifact[tfx.types.standard_artifacts.Model],
    dropout_hyperparameter: float,
    num_iterations: tfx.dsl.components.Parameter[int] = 10
) -> MyOutput:
  '''My simple trainer component.'''

  records = read_examples(training_data.uri)
  model_obj = train_model(records, num_iterations, dropout_hyperparameter)
  model_obj.write_to(model.uri)

  return {
    'loss': model_obj.loss,
    'accuracy': model_obj.accuracy
  }

# Example usage in a pipeline graph definition:
# ...
trainer = MyTrainerComponent(
    examples=example_gen.outputs['examples'],
    dropout_hyperparameter=other_component.outputs['dropout'],
    num_iterations=1000)
pusher = Pusher(model=trainer.outputs['model'])
# ...

ตัวอย่างก่อนหน้านี้กำหนด MyTrainerComponent เป็นส่วนประกอบที่กำหนดเองตามฟังก์ชัน Python ส่วนประกอบนี้ใช้สิ่งประดิษฐ์ examples เป็นอินพุต และสร้างสิ่งประดิษฐ์ model เป็นเอาต์พุต คอมโพเนนต์ใช้ artifact_instance.uri เพื่ออ่านหรือเขียนอาร์ติแฟกต์ในตำแหน่งที่ระบบจัดการ ส่วนประกอบใช้พารามิเตอร์อินพุต num_iterations และค่าประเภทข้อมูลแบบง่าย dropout_hyperparameter และส่วนประกอบจะส่งออกค่าเมตริก loss และ accuracy เป็นค่าเอาต์พุตประเภทข้อมูลแบบง่าย จากนั้นส่วนประกอบของ Pusher จะใช้สิ่งประดิษฐ์ model เอาต์พุต