ML Metadata (MLMD) คือไลบรารีสำหรับบันทึกและเรียกค้นข้อมูลเมตาที่เกี่ยวข้องกับเวิร์กโฟลว์ของนักพัฒนา ML และนักวิทยาศาสตร์ข้อมูล MLMD เป็นส่วนหนึ่งของ TensorFlow Extended (TFX) แต่ได้รับการออกแบบมาเพื่อให้สามารถใช้งานได้อย่างอิสระ
ทุกการดำเนินการของไปป์ไลน์ ML การผลิตจะสร้างข้อมูลเมตาที่มีข้อมูลเกี่ยวกับส่วนประกอบต่างๆของไปป์ไลน์การดำเนินการ (เช่นการฝึกซ้อม) และสิ่งประดิษฐ์ที่เป็นผลลัพธ์ ในกรณีที่มีลักษณะการทำงานหรือข้อผิดพลาดไปป์ไลน์ที่ไม่คาดคิดข้อมูลเมตานี้สามารถนำมาใช้เพื่อวิเคราะห์เชื้อสายของส่วนประกอบไปป์ไลน์และปัญหาการดีบักให้คิดว่าข้อมูลเมตานี้เทียบเท่ากับการบันทึกในการพัฒนาซอฟต์แวร์
MLMD ช่วยให้คุณเข้าใจและวิเคราะห์ส่วนที่เชื่อมต่อกันทั้งหมดของไปป์ไลน์ ML ของคุณแทนที่จะวิเคราะห์แยกต่างหากและสามารถช่วยคุณตอบคำถามเกี่ยวกับท่อ ML ของคุณเช่น:
- โมเดลนี้ใช้ชุดข้อมูลใดบ้าง
- ไฮเปอร์พารามิเตอร์ที่ใช้ในการฝึกโมเดลคืออะไร
- ไปป์ไลน์ใดที่สร้างโมเดล
- การฝึกซ้อมแบบใดที่นำไปสู่โมเดลนี้
- TensorFlow รุ่นใดที่สร้างโมเดลนี้
- ผลักดันโมเดลที่ล้มเหลวเมื่อใด
ที่เก็บข้อมูลเมตา
MLMD ลงทะเบียนประเภทของข้อมูลเมตาต่อไปนี้ในฐานข้อมูลที่เรียกว่า Metadata Store
- ข้อมูลเมตาเกี่ยวกับสิ่งประดิษฐ์ที่สร้างขึ้นผ่านส่วนประกอบ / ขั้นตอนของไปป์ไลน์ ML ของคุณ
- ข้อมูลเมตาเกี่ยวกับการดำเนินการของส่วนประกอบ / ขั้นตอนเหล่านี้
- ข้อมูลเมตาเกี่ยวกับท่อและข้อมูลเชื้อสายที่เกี่ยวข้อง
Metadata Store จัดเตรียม API เพื่อบันทึกและดึงข้อมูลเมตาเข้าและออกจากแบ็กเอนด์ที่เก็บ แบ็กเอนด์พื้นที่เก็บข้อมูลสามารถเสียบได้และสามารถขยายได้ MLMD จัดเตรียมการใช้งานอ้างอิงสำหรับ SQLite (ซึ่งรองรับในหน่วยความจำและดิสก์) และ MySQL นอกกรอบ
ภาพนี้แสดงภาพรวมระดับสูงของส่วนประกอบต่างๆที่เป็นส่วนหนึ่งของ MLMD
แบ็กเอนด์การจัดเก็บข้อมูลเมตาและจัดเก็บการกำหนดค่าการเชื่อมต่อ
อ็อบเจ็กต์ MetadataStore
ได้รับการกำหนดค่าการเชื่อมต่อที่สอดคล้องกับแบ็กเอนด์หน่วยเก็บข้อมูลที่ใช้
- ฐานข้อมูลปลอม จัดเตรียม DB ในหน่วยความจำ (โดยใช้ SQLite) สำหรับการทดลองที่รวดเร็วและการรันภายในเครื่อง ฐานข้อมูลจะถูกลบเมื่อวัตถุที่เก็บถูกทำลาย
- SQLite อ่านและเขียนไฟล์จากดิสก์
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.sqlite.filename_uri = '...'
connection_config.sqlite.connection_mode = 3 # READWRITE_OPENCREATE
store = metadata_store.MetadataStore(connection_config)
- MySQL เชื่อมต่อกับเซิร์ฟเวอร์ MySQL
connection_config = metadata_store_pb2.ConnectionConfig()
connection_config.mysql.host = '...'
connection_config.mysql.port = '...'
connection_config.mysql.database = '...'
connection_config.mysql.user = '...'
connection_config.mysql.password = '...'
store = metadata_store.MetadataStore(connection_config)
แบบจำลองข้อมูล
ที่เก็บข้อมูลเมตาใช้โมเดลข้อมูลต่อไปนี้เพื่อบันทึกและดึงข้อมูลเมตาจากแบ็กเอนด์ที่เก็บข้อมูล
-
ArtifactType
อธิบายประเภทของสิ่งประดิษฐ์และคุณสมบัติที่เก็บไว้ในที่เก็บข้อมูลเมตา คุณสามารถลงทะเบียนประเภทเหล่านี้ได้ทันทีกับที่เก็บข้อมูลเมตาในรหัสหรือคุณสามารถโหลดในร้านค้าจากรูปแบบอนุกรม เมื่อคุณลงทะเบียนประเภทแล้วคำจำกัดความจะสามารถใช้ได้ตลอดอายุการใช้งานของร้านค้า -
Artifact
อธิบายอินสแตนซ์เฉพาะของArtifactType
และคุณสมบัติที่เขียนไปยังที่เก็บข้อมูลเมตา -
ExecutionType
อธิบายประเภทขององค์ประกอบหรือขั้นตอนในเวิร์กโฟลว์และพารามิเตอร์รันไทม์ -
Execution
คือเร็กคอร์ดของการรันคอมโพเนนต์หรือขั้นตอนในเวิร์กโฟลว์ ML และพารามิเตอร์รันไทม์ การดำเนินการสามารถคิดได้ว่าเป็นตัวอย่างของExecutionType
การดำเนินการจะถูกบันทึกเมื่อคุณเรียกใช้ไปป์ไลน์ ML หรือขั้นตอน -
Event
คือบันทึกความสัมพันธ์ระหว่างสิ่งประดิษฐ์และการประหารชีวิต เมื่อการดำเนินการเกิดขึ้นเหตุการณ์จะบันทึกทุกอาร์ติแฟกต์ที่ถูกใช้โดยการดำเนินการและทุกอาร์ติแฟกต์ที่สร้างขึ้น บันทึกเหล่านี้อนุญาตให้มีการติดตามเชื้อสายตลอดเวิร์กโฟลว์ เมื่อดูเหตุการณ์ทั้งหมด MLMD จะรู้ว่าการประหารชีวิตเกิดขึ้นและสิ่งที่สร้างขึ้นเป็นผลมาจากอะไร MLMD สามารถเรียกคืนจากสิ่งประดิษฐ์ใด ๆ ไปยังอินพุตต้นน้ำทั้งหมด -
ContextType
อธิบายประเภทของกลุ่มแนวคิดของสิ่งประดิษฐ์และการดำเนินการในเวิร์กโฟลว์และคุณสมบัติโครงสร้าง ตัวอย่างเช่นโครงการการเดินท่อการทดลองเจ้าของ ฯลฯ -
Context
เป็นตัวอย่างของContextType
รวบรวมข้อมูลที่แชร์ภายในกลุ่ม ตัวอย่างเช่นชื่อโปรเจ็กต์, รายการการเปลี่ยนแปลงรหัสคอมมิต, คำอธิบายประกอบการทดลอง ฯลฯ มีชื่อเฉพาะที่ผู้ใช้กำหนดเองภายในContextType
- การ
Attribution
คือการบันทึกความสัมพันธ์ระหว่างสิ่งประดิษฐ์และบริบท - การ
Association
คือการบันทึกความสัมพันธ์ระหว่างการประหารชีวิตและบริบท
ฟังก์ชัน MLMD
การติดตามอินพุตและเอาต์พุตของส่วนประกอบ / ขั้นตอนทั้งหมดในเวิร์กโฟลว์ ML และเชื้อสายของพวกเขาทำให้แพลตฟอร์ม ML สามารถเปิดใช้งานคุณสมบัติที่สำคัญต่างๆได้ รายการต่อไปนี้ให้ภาพรวมโดยละเอียดของประโยชน์หลักบางประการ
- แสดงรายการ Artifact ทั้งหมดในประเภทเฉพาะ ตัวอย่าง: โมเดลทั้งหมดที่ได้รับการฝึกอบรม
- โหลด Artifact สองชิ้นที่เป็นประเภทเดียวกันเพื่อเปรียบเทียบ ตัวอย่าง: เปรียบเทียบผลลัพธ์จากการทดลองสองครั้ง
- แสดง DAG ของการดำเนินการที่เกี่ยวข้องทั้งหมดและสิ่งประดิษฐ์อินพุตและเอาต์พุตของบริบท ตัวอย่าง: แสดงภาพขั้นตอนการทำงานของการทดสอบสำหรับการดีบักและการค้นพบ
- ย้อนกลับไปดูเหตุการณ์ทั้งหมดเพื่อดูว่าอาร์ติแฟกต์ถูกสร้างขึ้นอย่างไร ตัวอย่าง: ดูว่าข้อมูลใดเข้าสู่โมเดล บังคับใช้แผนการเก็บรักษาข้อมูล
- ระบุอาร์ติแฟกต์ทั้งหมดที่สร้างขึ้นโดยใช้อาร์ติแฟกต์ที่กำหนด ตัวอย่าง: ดูโมเดลทั้งหมดที่ได้รับการฝึกฝนจากชุดข้อมูลเฉพาะ ทำเครื่องหมายโมเดลตามข้อมูลที่ไม่ดี
- ตรวจสอบว่ามีการรันการดำเนินการกับอินพุตเดียวกันมาก่อนหรือไม่ ตัวอย่าง: ตรวจสอบว่าองค์ประกอบ / ขั้นตอนได้เสร็จสิ้นการทำงานเดียวกันแล้วหรือไม่และเอาต์พุตก่อนหน้านี้สามารถใช้ซ้ำได้
- บันทึกและสอบถามบริบทของการรันเวิร์กโฟลว์ ตัวอย่าง: ติดตามเจ้าของและรายการการเปลี่ยนแปลงที่ใช้สำหรับการรันเวิร์กโฟลว์ จัดกลุ่มเชื้อสายตามการทดลอง จัดการสิ่งประดิษฐ์ตามโครงการ
ดู บทช่วยสอน MLMD สำหรับตัวอย่างที่แสดงวิธีใช้ MLMD API และที่เก็บข้อมูลเมตาเพื่อดึงข้อมูลเชื้อสาย
รวมข้อมูลเมตา ML เข้ากับเวิร์กโฟลว์ ML ของคุณ
หากคุณเป็นนักพัฒนาแพลตฟอร์มที่สนใจในการผสานรวม MLMD เข้ากับระบบของคุณให้ใช้เวิร์กโฟลว์ตัวอย่างด้านล่างเพื่อใช้ MLMD API ระดับต่ำเพื่อติดตามการดำเนินการของงานฝึก คุณยังสามารถใช้ Python API ระดับสูงกว่าในสภาพแวดล้อมของโน้ตบุ๊กเพื่อบันทึกข้อมูลเมตาของการทดสอบ
1) ลงทะเบียนประเภทสิ่งประดิษฐ์
# Create ArtifactTypes, e.g., Data and Model
data_type = metadata_store_pb2.ArtifactType()
data_type.name = "DataSet"
data_type.properties["day"] = metadata_store_pb2.INT
data_type.properties["split"] = metadata_store_pb2.STRING
data_type_id = store.put_artifact_type(data_type)
model_type = metadata_store_pb2.ArtifactType()
model_type.name = "SavedModel"
model_type.properties["version"] = metadata_store_pb2.INT
model_type.properties["name"] = metadata_store_pb2.STRING
model_type_id = store.put_artifact_type(model_type)
2) ลงทะเบียนประเภทการดำเนินการสำหรับขั้นตอนทั้งหมดในเวิร์กโฟลว์ ML
# Create an ExecutionType, e.g., Trainer
trainer_type = metadata_store_pb2.ExecutionType()
trainer_type.name = "Trainer"
trainer_type.properties["state"] = metadata_store_pb2.STRING
trainer_type_id = store.put_execution_type(trainer_type)
3) สร้าง Artifact ของ DataSet ArtifactType
# Create an input artifact of type DataSet
data_artifact = metadata_store_pb2.Artifact()
data_artifact.uri = 'path/to/data'
data_artifact.properties["day"].int_value = 1
data_artifact.properties["split"].string_value = 'train'
data_artifact.type_id = data_type_id
data_artifact_id = store.put_artifacts([data_artifact])[0]
4) สร้างการดำเนินการสำหรับ Trainer run (โดยทั่วไปคือ tfx.components.Trainer
ExecutionType)
trainer_run = metadata_store_pb2.Execution()
trainer_run.type_id = trainer_type_id
trainer_run.properties["state"].string_value = "RUNNING"
run_id = store.put_executions([trainer_run])[0]
5) กำหนดเหตุการณ์อินพุตและอ่านข้อมูล
# Define the input event
input_event = metadata_store_pb2.Event()
input_event.artifact_id = data_artifact_id
input_event.execution_id = run_id
input_event.type = metadata_store_pb2.Event.DECLARED_INPUT
# Record the input event in the metadata store
store.put_events([input_event])
6) ประกาศสิ่งประดิษฐ์ผลลัพธ์
# Declare the output artifact of type SavedModel
model_artifact = metadata_store_pb2.Artifact()
model_artifact.uri = 'path/to/model/file'
model_artifact.properties["version"].int_value = 1
model_artifact.properties["name"].string_value = 'MNIST-v1'
model_artifact.type_id = model_type_id
model_artifact_id = store.put_artifacts([model_artifact])[0]
7) บันทึกเหตุการณ์ที่ส่งออก
# Declare the output event
output_event = metadata_store_pb2.Event()
output_event.artifact_id = model_artifact_id
output_event.execution_id = run_id
output_event.type = metadata_store_pb2.Event.DECLARED_OUTPUT
# Submit output event to the Metadata Store
store.put_events([output_event])
8) ทำเครื่องหมายการดำเนินการว่าเสร็จสิ้น
trainer_run.id = run_id
trainer_run.properties["state"].string_value = "COMPLETED"
store.put_executions([trainer_run])
9) จัดกลุ่มสิ่งประดิษฐ์และการดำเนินการภายใต้บริบทโดยใช้สิ่งประดิษฐ์และการยืนยัน
# Create a ContextType, e.g., Experiment with a note property
experiment_type = metadata_store_pb2.ContextType()
experiment_type.name = "Experiment"
experiment_type.properties["note"] = metadata_store_pb2.STRING
experiment_type_id = store.put_context_type(experiment_type)
# Group the model and the trainer run to an experiment.
my_experiment = metadata_store_pb2.Context()
my_experiment.type_id = experiment_type_id
# Give the experiment a name
my_experiment.name = "exp1"
my_experiment.properties["note"].string_value = "My first experiment."
experiment_id = store.put_contexts([my_experiment])[0]
attribution = metadata_store_pb2.Attribution()
attribution.artifact_id = model_artifact_id
attribution.context_id = experiment_id
association = metadata_store_pb2.Association()
association.execution_id = run_id
association.context_id = experiment_id
store.put_attributions_and_associations([attribution], [association])
ใช้ MLMD กับเซิร์ฟเวอร์ gRPC ระยะไกล
คุณสามารถใช้ MLMD กับเซิร์ฟเวอร์ gRPC ระยะไกลดังที่แสดงด้านล่าง:
- เริ่มเซิร์ฟเวอร์
bazel run -c opt --define grpc_no_ares=true //ml_metadata/metadata_store:metadata_store_server
- สร้างต้นขั้วไคลเอนต์และใช้ใน Python
from grpc import insecure_channel
from ml_metadata.proto import metadata_store_pb2
from ml_metadata.proto import metadata_store_service_pb2
from ml_metadata.proto import metadata_store_service_pb2_grpc
channel = insecure_channel('localhost:8080')
stub = metadata_store_service_pb2_grpc.MetadataStoreServiceStub(channel)
- ใช้ MLMD กับการโทร RPC
# Create ArtifactTypes, e.g., Data and Model
data_type = metadata_store_pb2.ArtifactType()
data_type.name = "DataSet"
data_type.properties["day"] = metadata_store_pb2.INT
data_type.properties["split"] = metadata_store_pb2.STRING
request = metadata_store_service_pb2.PutArtifactTypeRequest()
request.all_fields_match = True
request.artifact_type.CopyFrom(data_type)
stub.PutArtifactType(request)
model_type = metadata_store_pb2.ArtifactType()
model_type.name = "SavedModel"
model_type.properties["version"] = metadata_store_pb2.INT
model_type.properties["name"] = metadata_store_pb2.STRING
request.artifact_type.CopyFrom(model_type)
stub.PutArtifactType(request)
ทรัพยากร
ไลบรารี MLMD มี API ระดับสูงที่คุณสามารถใช้กับท่อ ML ของคุณได้ทันที ดู เอกสาร MLMD API สำหรับรายละเอียดเพิ่มเติม
ดู บทแนะนำ MLMD เพื่อเรียนรู้วิธีใช้ MLMD เพื่อติดตามเชื้อสายของส่วนประกอบท่อของคุณ