ค้นหาการรันใน MLflow

Khnha Kar Ran Ni Mlflow



เพื่อติดตามและจัดการการทดลองแมชชีนเลิร์นนิง MLflow นำเสนอแพลตฟอร์มที่กว้างขวาง ความสามารถในการค้นหาการดำเนินการเป็นหนึ่งในคุณสมบัติหลักของ MLflow ซึ่งทำให้สามารถระบุการทดลองที่พัฒนาแล้วและจัดระเบียบในลักษณะที่ทำให้ง่ายต่อการค้นหาข้อมูลทุกครั้งที่จำเป็น เราอาจค้นหาการทำงานโดยใช้ API การค้นหา MLflow โดยใช้เกณฑ์ที่แตกต่างกันจำนวนหนึ่งซึ่งอาจรวมถึงสิ่งต่อไปนี้:
  • รหัสหรือชื่อการทดสอบ
  • รันไอดี
  • พารามิเตอร์และค่า
  • ตัวชี้วัดและค่านิยม
  • แท็ก
  • คุณลักษณะอื่นๆ ที่เกี่ยวข้องกับการรัน

การรันสามารถกรองตามสถานะ เวลาเริ่มต้น เวลาสิ้นสุด และระยะเวลาได้โดยใช้ MLflow search API ทำให้ง่ายต่อการกรองการวิ่งหลายรอบและค้นหาการวิ่งเฉพาะที่ผู้ใช้สนใจ

ฟังก์ชั่นการค้นหา MLflow

ใช้ฟังก์ชัน mlflow.search_runs() เพื่อเข้าถึง API การค้นหา MLflow ฟังก์ชันนี้ยอมรับอาร์กิวเมนต์ที่หลากหลายดังต่อไปนี้:







  • รหัสหรือชื่อการทดสอบ
  • กรองสตริงหรือข้อความ
  • จำนวนการรันสูงสุดที่จะส่งคืนระบุโดยอาร์กิวเมนต์ max_results

รูปแบบที่เรียบง่ายของ SQL (Structured Query Language) WHERE clause คือสตริงตัวกรองหรือข้อความ สามารถใช้เพื่อระบุเกณฑ์ที่เราต้องการเรียงลำดับการวิ่ง



ไวยากรณ์ของฟังก์ชัน MLflow Search_Runs()

รหัสจริงหรือชื่อของการทดสอบที่เราต้องการค้นหาจะต้องแทนที่ด้วย 'experiment_id หรือ comparison_name' ในตัวอย่างต่อไปนี้ ตัวแปร search_criteria ช่วยให้สามารถป้อนเกณฑ์การค้นหาได้ตามต้องการ เกณฑ์เหล่านี้อาจกำหนดโดยเมตริก แท็ก พารามิเตอร์ หรือคุณลักษณะเพิ่มเติม ไวยากรณ์พื้นฐานของฟังก์ชัน search_runs() เป็นดังนี้:



# นำเข้า API การค้นหา mlflow เพื่อใช้ฟังก์ชัน search_runs

นำเข้า มลโฟลว์

# ระบุรหัสหรือชื่อการทดสอบ (เป็นทางเลือก; )

exp_id = 'รหัสการทดสอบหรือ NAME'

# กำหนดเกณฑ์การค้นหาสำหรับการวิ่ง

ค้นหา_สตริง = 'metrics.accuracy > 0.8 และ params.learning_rate = '0.01' และ params.efficiency_rate > '80''

#ดำเนินการค้นหา

วิ่ง = มลโฟลว์ ค้นหา_รัน ( การทดลอง_ids = exp_id , filter_string = ค้นหา_สตริง )

#แสดงผลลัพธ์

พิมพ์ ( 'ผลการค้นหา:' )

พิมพ์ ( วิ่ง )

ดำเนินการค้นหาโดยใช้เกณฑ์จำนวนมาก

1. ค้นหาตามค่าเมตริก

การรันสามารถกรองได้ด้วยค่าของตัววัดเฉพาะโดยใช้ช่องตัววัดใน API การค้นหา MLflow ชุดชื่อเมตริกที่คั่นด้วยเครื่องหมายจุลภาคจะปรากฏในช่องเมตริก ตัวอย่างเช่น สตริงตัวกรองต่อไปนี้ค้นหาการรันทั้งหมดที่มีค่าความแม่นยำมากกว่า 0.9:





เมตริก ความแม่นยำ > 0.9

รายการเมตริกทั้งหมดที่พร้อมใช้งานในช่องเมตริกมีดังนี้:

  • ความแม่นยำ
  • อค
  • f1
  • ความแม่นยำ
  • จำ
  • แผนที่
  • ล็อกลอส
  • การจำแนกประเภท_ข้อผิดพลาด
  • multi_class_logloss

นอกจากนี้ ผู้ใช้สามารถกรองการรันตามช่วงค่าของเมตริกโดยใช้ฟิลด์เมตริก ตัวอย่างเช่น สตริงตัวกรองถัดไปจะค้นหาการทำงานทั้งหมดที่มีการวัดความแม่นยำด้วยค่าระหว่าง 0.4 ถึง 0.8:



เมตริก ความแม่นยำ ระหว่าง 0.4 และ 0.8

ในช่องหน่วยเมตริก ตัวดำเนินการ AND และ OR รวมหน่วยเมตริกเพื่อค้นหาการทำงานที่มีความแม่นยำของหน่วยเมตริกและค่า f1 ที่สูงกว่า 0.3 และ 0.8:

เมตริก ความแม่นยำ > 0.3 และตัวชี้วัด f1 > 0.8

2. ค้นหาตามค่าพารามิเตอร์

ใช้ช่องพารามิเตอร์ใน API การค้นหา MLflow เพื่อทำการค้นหาด้วยค่าพารามิเตอร์ ชื่อและค่าพารามิเตอร์แสดงอยู่ในฟิลด์พารามิเตอร์โดยใช้เครื่องหมายจุลภาค ในตัวอย่างนี้ สตริงตัวกรองที่กล่าวมาข้างต้นค้นหาตำแหน่งการรันทั้งหมดด้วยพารามิเตอร์ num_boost_round ที่มีค่า 100:

พารามิเตอร์ num_boost_round = '100'

ตัวอย่างเพิ่มเติมของสตริงการค้นหาสำหรับค่าพารามิเตอร์:

  • params.num_boost_round = 900
  • params.learning_rate ระหว่าง 0.001 ถึง 0.01
  • params.num_boost_round=’70’ และ params.learning_rate=’0.01′

3. ค้นหาด้วยแท็ก

นี่คือตัวอย่างการค้นหาโดยใช้แท็ก:

ค้นหา_เกณฑ์ = 'tags.mlflow.source.type = 'พจนานุกรม''

ตัวอย่างค่า Matric และพารามิเตอร์เพื่อดำเนินการฟังก์ชัน Mlflow.search_runs()

มาดูตัวอย่างการตั้งค่าการทดสอบ MLflow การดำเนินการบันทึก จากนั้นใช้ mlflow.search_runs() เพื่อเริ่มต้นการค้นหา เพื่อให้เข้าใจโค้ดโดยสมบูรณ์ ให้ทำตามขั้นตอนเหล่านี้:

ขั้นตอนที่ 1: สร้างการทดลอง MLflow

เราเริ่มต้นด้วยการตั้งค่าการทดสอบ MLflow โดยจะดึงข้อมูลการทดสอบที่มีอยู่หากมีการทดสอบอยู่แล้ว ถ้าไม่เช่นนั้นก็จะสร้างใหม่

คำอธิบายรหัส:

ไลบรารี MLflow จะถูกนำเข้าในบรรทัดแรกของโค้ด และ Experiment_name ถูกตั้งค่าเป็น “My First MLflow Experiment” ในบรรทัดถัดไป เมื่อส่ง Experiment_name ไปยังฟังก์ชัน “mlflow.get_experiment_by_name” ฟังก์ชันนั้นจะส่งคืน “None” หากไม่มีการทดสอบและวัตถุของการทดสอบเป็นอย่างอื่น

ตรวจสอบการมีอยู่ของการทดลองในคำสั่งแบบมีเงื่อนไข หากมีการทดสอบอยู่แล้ว ให้ตั้งค่าการทดลอง_id มิฉะนั้น ให้ใช้ 'mlflow.create_experiment' เพื่อสร้างการทดสอบใหม่ รหัสการทดสอบจะถูกส่งกลับโดยฟังก์ชันนี้ แสดงรหัสการทดสอบบนคอนโซลหรือหน้าจอเทอร์มินัลเมื่อสิ้นสุดการทดสอบ คัดลอกโค้ดต่อไปนี้ลงในแผ่นจดบันทึกและบันทึกไฟล์ด้วยชื่อที่ต้องการและมีนามสกุล “.py”:

# นำเข้าไลบรารี mlflow

นำเข้า มลโฟลว์

# สร้างหรือดึงข้อมูลการทดสอบ

exp_name = 'การทดลอง MLflow ครั้งแรกของฉัน'

# ดึงข้อมูลการทดลองตามชื่อโดยใช้ฟังก์ชัน mlflow get_experiment_by_name

ประสบการณ์ = มลโฟลว์ get_experiment_by_name ( exp_name )

# ตรวจสอบว่าไม่มีการทดสอบอยู่แล้ว

ถ้า ประสบการณ์ เป็น ไม่มี : :

# สร้างการทดลองใหม่และส่งชื่อการทดลองไปที่ฟังก์ชัน mlflow.create_experiment

exp_id = มลโฟลว์ create_experiment ( exp_name )

# แสดงข้อความแสดงความสำเร็จบนหน้าจอ

พิมพ์ ( 'ไม่มีการทดลอง สร้างการทดสอบสำเร็จแล้ว!' )

อื่น : :

# ดึงข้อมูลการทดลอง_idของการทดสอบที่มีอยู่

exp_id = ประสบการณ์ การทดลอง_id

พิมพ์ ( 'มีการทดลองแล้ว!' )

# แสดงรหัสการทดสอบ

พิมพ์ ( 'รหัสการทดสอบ:' , exp_id )

ตอนนี้ ให้เปิดโปรแกรมในหน้าต่างพร้อมรับคำสั่งหรือหน้าต่างเทอร์มินัลโดยใช้คอมไพเลอร์ Python แล้วพิมพ์ “Python” จากนั้นชื่อไฟล์ซึ่งในกรณีนี้คือ “MyFirstMlflowExperiment.py” เมื่อเรียกใช้การทดสอบครั้งแรก ยังไม่มีการทดสอบดังกล่าว ดังนั้น MLFlow จึงสร้างรหัสการทดลองขึ้นและพิมพ์รหัสการทดลองบนหน้าจอคอนโซล:

เรียกใช้โค้ดอีกครั้งเพื่อยืนยันว่าไม่ได้สร้างการทดสอบใหม่และเพื่อแสดงรหัสของการทดสอบที่มีอยู่แล้ว ภาพหน้าจอต่อไปนี้แสดงว่ามีการทดสอบอยู่แล้ว:

ขั้นตอนที่ 2: บันทึกการวิ่งด้วยหน่วยวัดและพารามิเตอร์

ตอนนี้เรามาลองบันทึกการทำงานด้วยเมตริกและพารามิเตอร์สำหรับการทดสอบที่เพิ่งสร้างขึ้นกันดีกว่า ในสถานการณ์จริง เราพัฒนาโมเดลการเรียนรู้ของเครื่องและบันทึกข้อมูลที่เกี่ยวข้อง เช่น ตัวชี้วัดและพารามิเตอร์ เมื่อสิ้นสุดการดำเนินการแต่ละครั้ง ในที่นี้ ความแม่นยำจะถูกใช้เป็นค่าเมทริกซ์ และในกรณีนี้คือ 0.95 ค่าพารามิเตอร์สำหรับการเรียนรู้และอัตราประสิทธิภาพคือ 0.01 และ 90 ตามลำดับ นี่คือรหัส:

# เริ่มเรียกใช้ MLflow เพื่อบันทึกเมตริกและพารามิเตอร์

กับ มลโฟลว์ start_run ( การทดลอง_id = exp_id ) : :

# รหัสการเรียนรู้ของเครื่องของคุณที่นี่ (นี่เป็นเพียงตัวอย่างจำลอง)

รุ่น_ความแม่นยำ = 0.95

อัตราการเรียนรู้ของเครื่องจักร = 0.01

ประสิทธิภาพ_อัตรา = 90

# บันทึกตัวชี้วัดและพารามิเตอร์

มลโฟลว์ log_metric ( 'ความแม่นยำ' , รุ่น_ความแม่นยำ )

มลโฟลว์ log_param ( 'อัตราการเรียนรู้' , อัตราการเรียนรู้ของเครื่องจักร )

มลโฟลว์ log_param ( 'ประสิทธิภาพ_อัตรา' , ประสิทธิภาพ_อัตรา )

ผลลัพธ์เมื่อรันโค้ดข้างต้นจะแสดงที่นี่ ผลลัพธ์ก็เหมือนเดิม:

ขั้นตอนที่ 3: ทำการค้นหาโดยใช้ Mlflow.search_runs()

สุดท้ายนี้ เราจะทำการค้นหาการวิ่งที่บันทึกไว้โดยใช้พารามิเตอร์บางตัว และแสดงผลลัพธ์บนหน้าจอเทอร์มินัล:

# กำหนดเกณฑ์การค้นหาสำหรับการวิ่ง

Defin_search_criteria = 'metrics.accuracy > 0.8 และ params.learning_rate = '0.01' และ params.efficiency_rate = '90''

#ดำเนินการค้นหา

วิ่ง = มลโฟลว์ ค้นหา_รัน ( การทดลอง_ids = exp_id , filter_string = Defin_search_criteria )

#แสดงผลลัพธ์

พิมพ์ ( 'ผลการค้นหา:' )

พิมพ์ ( วิ่ง )

คำเตือนที่เกี่ยวข้องกับเครื่องมือ Git นั้นเกิดจากการเรียกใช้ฟังก์ชัน search_runs:


เพิ่มโค้ดที่ด้านบนของไฟล์ Python เพื่อปิดใช้งานคำเตือนนี้ นี่คือส่วนสั้น ๆ ของรหัส:

นำเข้า มลโฟลว์

นำเข้า คุณ

คุณ . ประมาณ [ 'GIT_PYTHON_REFRESH' ] = 'เงียบ'

ฟังก์ชัน “mlflow.search_runs” จะดำเนินการได้สำเร็จเมื่อมีการเพิ่มบรรทัดโค้ดเหล่านี้:

บทสรุป

ฟังก์ชัน “mlflow.search_runs” ช่วยให้ผู้ใช้สามารถสำรวจและประเมินการทดลองของแมชชีนเลิร์นนิงได้อย่างรวดเร็ว วิเคราะห์การทำงานจำนวนมาก และระบุรูปแบบหรือแบบจำลองไฮเปอร์พารามิเตอร์ที่เหมาะสมที่สุดซึ่งส่งผลให้เกิดผลลัพธ์ที่ต้องการ เป็นเครื่องมือที่มีประสิทธิภาพในการดูแล วางแผน และวิเคราะห์เวิร์กโฟลว์แมชชีนเลิร์นนิง