เหตุใดจึงมีอยู่และใช้งานอย่างไรใน Beam Pipeline Components

ML Metadata (MLMD) เป็นไลบรารีสำหรับบันทึกและเรียกข้อมูลเมตาที่เกี่ยวข้องกับเวิร์กโฟลว์ของนักพัฒนา ML และนักวิทยาศาสตร์ข้อมูล

TensorFlow Extended (TFX) เป็นแพลตฟอร์มแบบ end-to-end สำหรับการปรับใช้ไปป์ไลน์ ML ที่ใช้งานจริง

เวอร์ชันปัจจุบันของ ML Metadata ณ เวลาที่บทความนี้เผยแพร่คือ v0.22(tfx ก็คือ v0.22 เช่นกัน) API มีความสมบูรณ์เพียงพอที่จะรองรับการใช้งานและการปรับใช้กระแสหลักบนคลาวด์สาธารณะ Tensorflow Extended ใช้สิ่งนี้อย่างกว้างขวางสำหรับส่วนประกอบ เช่น การสื่อสารส่วนประกอบ การติดตาม Lineage และงานอื่นๆ

เราจะใช้งานไปป์ไลน์ง่ายๆ ที่เพิ่งจะสร้างสถิติและสคีมาสำหรับ csv ตัวอย่างของชุดข้อมูล Chicago Taxi Trips ที่มีชื่อเสียง มันเป็นไฟล์ขนาดเล็ก ~10mb และไปป์ไลน์สามารถทำงานได้ในเครื่อง

เรียกใช้หนึ่งครั้งแล้วเปิดไฟล์ metadata_store.db เพื่อตรวจสอบ

ML Metadata จัดเก็บข้อมูลเกี่ยวกับ 3 สิ่ง:

  • ข้อมูลเมตาเกี่ยวกับอาร์ติแฟกต์ที่สร้างขึ้น
  • ข้อมูลเมตาเกี่ยวกับการดำเนินการของส่วนประกอบเหล่านี้ — ขั้นตอน
  • ข้อมูลเมตาเกี่ยวกับไปป์ไลน์และข้อมูลเชื้อสายที่เกี่ยวข้อง

ส่วนประกอบ Apache Beam Pipeline TFX จะไม่ส่งผ่านส่วนไบนารีทั้งหมด (ที่จะประมวลผลโดย ParDo พร้อม IO หลายตัว) โดยโหนดถัดไป แต่ URI ของสิ่งประดิษฐ์จะถูกส่งผ่านไปแทน โดยทั่วไป อาร์ติแฟกต์จะถูกจัดเก็บไว้ในระบบไฟล์บนคลาวด์บางประเภท เช่น ที่เก็บข้อมูลบนคลาวด์

แม้แต่ TFRecord tf.Exampleไฟล์ที่บันทึกไว้ก็ยังถูกมองว่าเป็นสิ่งประดิษฐ์ระดับกลาง มีไฟล์ gzip เพื่อประหยัดพื้นที่

> SELECT * FROM `Artifact`;

คุณจะเห็นว่าไดเร็กทอรีพาเรนต์ที่สร้างขึ้นทั้งหมดเหล่านี้ถูกจัดเก็บไว้ พร้อมด้วยตัวเลข (เพิ่มเติมเกี่ยวกับตัวเลขในภายหลัง) เวลาที่สร้างและอัปเดต

ในกรณีของ CsvExampleGen/examples/1 เรามีไดเร็กทอรีย่อย 2 ไดเร็กทอรี train และ eval ซึ่งจัดเก็บเป็นอาร์ติแฟกต์เดียวกัน ส่วน /examples ของเส้นทางนี้คือชื่อของส่วนที่สร้างขึ้นที่ example_gen สร้างขึ้น (ดูที่โค้ดไปป์ไลน์) ซึ่ง statistics_gen ใช้เป็นอินพุต

ค่า NULL อาจอยู่ระหว่างดำเนินการเนื่องจากร้านค้าอยู่ในเวอร์ชัน v0.xx คุณสามารถดูได้ใน การประกาศบัฟเฟอร์โปรโตคอลซอร์สโค้ดn สามารถเป็น UNKNOWN — PENDING — LIVE — MARKED_FOR_DELETION — DELETED และชื่อนั้นก็คือชื่อ นอกเหนือจาก type_id

ตาราง Types เทียบเท่ากับ type_id ตามที่คาดไว้:

สิ่งประดิษฐ์สนับสนุนแผนที่ของคุณสมบัติเช่นกัน สิ่งเหล่านี้ถูกสรุปไว้ในตาราง ArtifactProperty (เช่น เช็คซัมสำหรับไฟล์ TFRecord ที่บันทึกไว้ ซึ่งใช้ผ่าน TFX เพื่อแคชขั้นตอนกลาง)

  • บริบทประกอบด้วยสิ่งประดิษฐ์ การดำเนินการ และเหตุการณ์หลายรายการ
  • เหตุการณ์ ประกอบด้วยสิ่งประดิษฐ์และการดำเนินการ
  • โดยทั่วไปการดำเนินการจะเป็นขั้นตอนไปป์ไลน์แบบสแตนด์อโลน

สำหรับการติดตามการดำเนินการของสิ่งประดิษฐ์และความสามารถในการติดตามเชื้อสาย (เช่น การบอกว่าโมเดลหรือสถิติใดสอดคล้องกับชุดข้อมูลหรือไปป์ไลน์ใดที่ทำงาน) เราต้องจัดการกับเหตุการณ์ บริบท และการดำเนินการ

  • กิจกรรม เชื่อมโยง artifact_ids กับ execution_ids
  • การดำเนินการติดตามเฉพาะ type_ids และการประทับเวลา
  • บริบทมีความสัมพันธ์ type_ids กับการเรียกใช้ไปป์ไลน์และข้อมูลการประทับเวลา

ตาราง การดำเนินการคุณสมบัติ และ บริบทคุณสมบัติ มีข้อมูลเพิ่มเติมในรูปแบบคีย์ — ค่า

  • ExecutionPropertiesมีการกำหนดค่าอินพุตและเอาต์พุตที่ส่งผ่านไปยังแต่ละส่วนประกอบ พร้อมด้วยไปป์ไลน์และไดเร็กทอรีรูทขั้นตอน และตำแหน่ง IO ของส่วนต่างๆ
  • ContextPropertiesเชื่อมโยง context_ids กับชื่อส่วนประกอบไปป์ไลน์และการประทับเวลา

อาร์ติแฟกต์ที่สร้างขึ้นมีรูปแบบเดียวกันไม่มากก็น้อยสำหรับขั้นตอนอื่นๆ ของไปป์ไลน์ที่ใหญ่กว่า เช่น การตรวจสอบโมเดลและการอวยพร

การเข้าถึงข้อมูล

มีข้อมูลจำนวนมหาศาล เพียงสำหรับไปป์ไลน์ 3 ขั้นตอนง่ายๆ ที่ทำงานภายในเครื่อง ไปป์ไลน์นี้สามารถทำงานบนคลาวด์บนรันเนอร์ Dataflow ได้ เช่น โดยมีการเปลี่ยนแปลงการกำหนดค่าขั้นต่ำ

ในสถานการณ์นี้ การใช้ข้อมูลที่จัดเก็บไว้ในฐานข้อมูลจะง่ายกว่ามาก แทนที่จะเรียกดูที่เก็บข้อมูลบนคลาวด์และ VM บนเซิร์ฟเวอร์ฟาร์ม

จากจุดนี้ไป คุณสามารถเชื่อมต่อกับที่เก็บข้อมูลเมตา ML จากการเชื่อมต่อ SQL โดยตรง หรือโดย gRPC (ผ่าน stub หรือการเรียกแบบเก่าธรรมดา) จากนั้น ก็เป็นเรื่องของการเลือกประเภทข้อมูลที่คุณต้องการตรวจสอบด้วยตนเอง นี่อาจเป็นสคีมาหรือโปรโตบัฟทางสถิติ เป็นต้น

โดยทั่วไป คุณจะต้องเข้าถึงตัวระบุทรัพยากรของทรัพยากรเท่านั้น คุณควรเข้าถึงได้ผ่าน URI เท่านั้นหากอยู่ในสภาพแวดล้อมเดียวกัน (เช่น โน้ตบุ๊กภายใน GCP Project VM)

ตัวอย่างการใช้งาน

สมมติว่าคุณมีไปป์ไลน์ที่ทำงานในช่วงเวลาหนึ่ง (หรือการทริกเกอร์ตามเหตุการณ์) และในบางครั้ง คุณต้องการดูสถิติข้อมูลของไปป์ไลน์ล่าสุดโดยเปรียบเทียบกับการทำงานครั้งก่อน

  • คุณต้องมี StatisticsGen/statisticsสิ่งประดิษฐ์ของการเรียกใช้ไปป์ไลน์ 2 รายการที่แตกต่างกัน (นี่คือประเภท ExampleStatistics โดยมี type_id 8) สามารถดูได้จากตาราง Artifact
  • คุณต้องเข้าถึงอาร์ติแฟกต์จากการเรียกใช้ไปป์ไลน์ที่ถูกต้องด้วย ตาราง Attribution เชื่อมโยง context_id กับ artifact_id สิ่งเดียวที่ขาดหายไปคือระบุ 2 context_id ที่คุณต้องการเพื่อสร้างแบบสอบถามแบบใช้เลือกข้อมูลอย่างง่าย
  • ตาราง Context ยังมีข้อมูลการประทับเวลาด้วย ตัวอย่างเช่น แถว Pipeline .2020–07–14T23:45:00.508181.StatisticsGen มี context_id 5

รหัสบริบท 5 สอดคล้องกับรหัสวัตถุ 3 จากตารางการระบุแหล่งที่มา Artifact Id 3 เป็นสิ่งประดิษฐ์ทางสถิติที่เราต้องการ

โชคดีที่ไปป์ไลน์ kubeflow ทำการแสดงภาพนี้โดยอัตโนมัติแล้ว

บทสรุป

ตอนนี้คุณควรมีความเข้าใจอย่างแน่ชัดแล้วว่าที่เก็บข้อมูลเมตาของ ML ประกอบด้วยอะไรบ้าง และเหตุใดจึงเป็นองค์ประกอบที่มีประโยชน์ของระบบนิเวศ TFX

ขอบคุณที่อ่านจนจบ!

สิ่งประดิษฐ์ที่กำหนดเอง

รองรับสิ่งประดิษฐ์ที่กำหนดเอง เราจะไม่เจาะลึกเรื่องนี้ที่นี่ เนื่องจากสิ่งนี้มุ่งเน้นไปที่ระบบนิเวศของ TFX สำหรับข้อมูลเพิ่มเติม โปรดดูที่นี่