คำจำกัดความส่วนประกอบตามฟังก์ชัน 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
เอาต์พุต