
การทำ Machine Learning (ML) ในระดับองค์กรถือว่ามีความท้าทายในการจัดการให้การทำงานตั้งแต่การเตรียมข้อมูลไปจนถึงการ deploy model สามารถทำงานได้อย่างไหลลื่น มีความเป็นระเบียบ รวมไปถึงการที่สามารถทำให้คนหลาย ๆ คนมาช่วยกันทำงานได้อย่างมีประสิทธิภาพ
บทความนี้จึงจะมาลองใช้เจ้า MLflow ที่ว่ากันว่าเป็นเครื่องมือที่จะมาช่วยให้การทำ ML เป็นเรื่องง่ายตามแบบฉบับมือใหม่หัดใช้กัน . . .
MLflow — An open source platform for the machine learning lifecycle
Introduction MLflow
Mlflow เป็นเครื่องมือยอดนิยมที่มีหลายบริษัทใหญ่ ๆ นำมาใช้งานหรือมีส่วนร่วม เช่น Databricks, Microsoft, Facebook และอีกมากมาย โดย MLflow เป็นตัวช่วยในการจัดการการทำ Machine Learning Lifecycles
MLflow ประกอบไปด้วย 4 องค์ประกอบหลักคือ
- MLflow Tracking
- MLflow Projects
- MLflow Models
- Model Registry

Machine Learning Lifecycle (ML lifecycle) คือ กระบวนการทำ Machine Learning วนซ้ำอย่างต่อเนื่องเริ่มจาก raw data, data prep, training model และ deployment เพื่อให้มีความพร้อมในการนำไปใช้งานสำหรับ user
MLflow Tracking

MLflow Tracking จัดเตรียมกลไกและ UI เพื่อจัดการ metric และ artifacts ที่สร้างขึ้นโดย ML สามารถช่วยในการบันทึกข้อมูลการทำโมเดลได้อย่างมีระเบียบและง่ายต่อการดูข้อมูล โดยข้อมูลที่สามารถบันทึกได้มีดังนี้
Code Version — Git commit hash
Start & End Time — เวลาเริ่มต้นและเวลาสิ้นสุดของการรัน
Source — ชื่อของไฟล์ที่ใช้ในการรันหรือ project name และ entry point
Parameter — Key-value ของ parameter ที่ต้องการ
Metric — Key-value ของ metric ซึ่งแต่ละ metric สามารถอัพเดตได้ และมีการบันทึกเพื่อช่วยให้สามารถดูประวัติทั้งหมดของ metric ที่ได้ในแต่ละการรัน
Artifacts — Output file ในรูปแบบใดก็ได้ ตัวอย่างเช่น สามารถบันทึกรูปภาพ ( PNG), models (scikit-learn model) และไฟล์ข้อมูล (.parquet)
MLflow Projects

MLflow Projects เป็นรูปแบบมาตรฐานที่กำหนดขึ้นมาสำหรับการจัดระเบียบ เพื่อให้ง่ายต่อการนำมาใช้ซ้ำหรือให้คนอื่น ๆ นำไปทำงานต่อได้ง่าย โดยรองรับ: Conda environment, Docker, และ local system
MLflow Models

MLflow Models เป็นองค์ประกอบหลักในการจัดการโมเดลที่แตกต่างกันและ MLflow รองรับ อีกทั้งยังเป็นตัวกลางในการ deploy model ใน environment ที่แตกต่างกัน โดยมีรูปแบบ inbuilt ที่หลากหลายสำหรับการ package models ตาม library เช่น Tensorflow, Sklearn, Keras, H20, XGBoost เป็นต้น
MLflow Registry

MLflow Registry ช่วยให้นักพัฒนา ML มีศูนย์กลางสำหรับการจัดการ ML Lifecycle และสามารถแชร์ สร้าง และเก็บโมเดลในองค์กรร่วมกันได้
เมื่อลงทะเบียนโมเดล จะสามารถใส่คำอธิบายประกอบโมเดลที่ลงทะเบียนด้วย metadata ที่เกี่ยวข้องและจัดการ ML Lifecycle ยกตัวอย่างคือการมีแบบจำลองใน Staging environment และจัดการ life cycle ก่อนนำไปยัง Production

Demo MLflow [Databricks]
มาเริ่มต้นทดลองใช้งานผ่าน Databricks กันเถอะ ถ้าใครยังไม่รู้จัก Databricks สามารถเข้าไปทำความรู้จักได้ที่ https://databricks.com
The Databricks Lakehouse Platform — Unify your data warehousing and AI use cases on a single platform
Defining the experiment
- Problem statement — Predict The Species Of An Iris Flower. An Iris Flower Has Three Different Species: Setosa, Versicolor, Virginica.
- Evaluation — The highest accuracy.
- Model input — The 4 Attribute : SepalLengthCm, SepalWidthCm, PetalLengthCm, PetalWidthCm.
- Model output — The 3 Species Of An Iris Flower: Setosa, Versicolor, Virginica.
สร้าง MLflow Experiment เพื่อใช้งาน MLflow
เริ่มต้นการใช้งาน MLflow ใน Databricks สามารถทำได้ทันทีโดยไม่ต้องติดตั้งอะไรเพิ่มเติมเพียงเลือกแท็บ Machine Learning แล้วไปยัง Workspace เพื่อทำการสร้าง MLflow Experiement สำหรับ log การรันทุกอย่างที่ต้องการบันทึกไว้
ซึ่งขั้นการสร้าง MLflow Experiment สามารถทำได้สองวิธีคือ
- สร้าง MLflow Experiment ขึ้นมาก่อนแล้วค่อยให้ Notebook ชี้ไปตัวที่เราสร้าง
- สร้างแค่ Notebook มาแล้วกำหนดชื่อ MLflow Experiment ตอนรันโค้ดได้เลย (วิธีนี้ถ้าลบ MLflow Experiment ออกจะส่งผลให้ Notebook นั้นจะหายไปด้วย!!!)

โดยในขั้นตอนนี้จะทำการสร้าง MLflow Experiment ชื่อ iris และสร้าง Notebook สำหรับเขียนโค้ดขึ้นมาชื่อ iris_nb เพียงเท่านี้ก็พร้อมสำหรับลุยโค้ดเพื่อทำ ML แล้ว

Preprocess ข้อมูลผ่าน MLflow ก่อนทำโมเดล
ก่อนจะเริ่ม train model ก็ต้องมีการจัดการข้อมูลตั้งแต่การรับข้อมูล, ตรวจสอบและจัดการข้อมูล และการสร้าง feture ใหม่ขึ้นมา โดยในขั้นตอนนี้จะเป็นการจำลองการ run ขึ้นมาเพื่อให้เห็นภาพการทำงาน โดยจะมีการรันผ่าน run ที่ชื่อ preprocess_data และมี run ย่อย ๆ ซึ่งทำให้การทำซ้ำเป็นไปได้ง่ายและถ้าขั้นตอนไหนมีปัญหาก็จะดูผ่านหน้า Experiments ได้ทันที


มาเริ่ม train model ผ่าน MLflow
เมื่อมี MLflow Experiment พร้อมใช้งานแล้ว เราลองมาทำการ train model กับชุดข้อมูล Iris เพื่อทำนายสปีชีส์ของดอก Iris กัน โดยทำการลองหลายวิธีแล้วนำมาเปรียบเทียบกัน ได้แก่ Support Vector Machine (SVM), K-nearest Neighbors (KNN) และ Random Forest เพื่อให้ได้วิธีที่ดีที่สุดนำมาทำโมเดล ซึ่งใช้ Accuracy ในการวัดประสิทธิภาพตามที่กำหนดไว้
เมื่อทำการรันผ่าน MLflow เสร็จแล้วสามารถไปดูผลลัพธ์ได้ใน Experiments
จะเห็นค่าต่าง ๆ ที่ log ไว้ทั้งหมดผ่านคำสั่งmlflow.sklearn.autolog()
ซึ่งเป็นการ log ค่าทั้งหมดหรือจะ log เฉพาะค่าที่สนใจก็สามารถทำได้

นอกจากนี้ยังสามารถทำการเลือก run แต่ละตัวแล้วทำการกด Compare เพื่อทำการเปรียบเทียบ Metric หรือ parameter ของแต่ละ run ได้อีกด้วย จะเห็นได้ว่าจากการรันเทียบ 3 โมเดลนั้น Random Forest มีประสิทธิภาพดีที่สุด

ส่อง Artifacts ที่ได้จากการรันโมเดล
หลังจากการรัน model แล้ว MLflow จะมีการสร้าง Artifacts ของ model นั้น ๆ ขึ้นมาให้ โดยสามารถเข้าไปดูได้ใน Experiement แล้วเลือก run ของ model ที่ต้องการจะเห็นว่าใน Artifacts ที่ได้จะมีดังนี้
- MLmodel
- conda.yaml
- model.pkl
- requirements.txt
ส่วน metric_info.json และ training_confusion_matrix.png เป็นไฟล์ที่เก็บเพิ่มเข้ามาเพื่อบันทึกผลลัพธ์ run ของ model อันนี้ไว้

มาลอง Register Model ผ่าน MLflow
จากการเปรียบเทียบจะทำการเลือกRandom Forest นำมา register model เพื่อนำมาใช้งานต่อไป โดยเลือกไปที่ run ของ model ในหน้า Experiments แล้วกด Register

โดยทำการตั้งชื่อโมเดลที่ทำการ register ว่า iris_random_forest ซึ่งหลังจาก register เสร็จแล้ว stage ตั้งต้นจะอยู่ที่ None โดยการเปลี่ยน stage สามารถทำการเปลี่ยนเองได้เลยหรือสามารถเลือก request เพื่อให้คนอื่นรีวิวก่อนเปลี่ยนได้

ทำการ Deploy model เพื่อไปใช้งานกัน
เมื่อมีการ register model ไว้แล้วก็สามารถ deploy model ได้ง่าย ๆ เพียงเลือกโมเดลที่ต้องการ แล้วเลือกแท้บ Serving แล้วกด Enable Serving ก็สามารถ deploy model ได้ทันที (แต่ต้องมีสิทธิในการสร้าง cluster ก่อนนะ ไม่งั้นจะไม่สามารถ Enable ได้)

โดยการใช้งาน MLflow ผ่าน Databricks ก็จะสามารถทำงานร่วมกับคนอื่น ๆ ได้ และมี log การรันทั้งหมดทำให้เรารู้ว่าคนอื่นรันอะไรแล้วประสิทธิภาพเป็นอย่างไร ไปจนถึง deploy model ให้สามารถใช้งานได้ผ่านการยิง API ได้แล้ว
สรุป
MLflow เป็นเครื่องมือที่บริษัทใหญ่ ๆ หลายบริษัทใช้งานเช่น Databricks, Microsoft และ Facebook เป็นต้น ซึ่งหลังจากทดลองใช้ก็จะเห็นได้ว่ามีส่วนช่วยในการทำให้การ train model ไปจนถึงการนำไป deploy เพื่อให้ใช้งานได้ในระดับองค์กรไม่ยากเลย ซึ่งถ้าคนเคยทำสาย Software มาก็จะรู้ว่ามันไม่ใช่เรื่องง่ายในการ deploy ของเข้าไปใช้งานในแต่ละ environment ดังนั้น MLflow ถือว่าเป็นเครื่องมือที่มีความน่าสนใจที่จะนำมาลองใช้งานเพื่อเพิ่มประสิทธิภาพในการทำ ML ส่วนข้อเสียก็คือในการทำ pipeline ยังคงมีความยุ่งยากในการจัดเตรียมเพื่อร้อยเรียง workflow อยู่ แต่ MLflow 2.0 ได้ข่าวว่าจะมี MLflow Pipelines เพิ่มเข้ามาก็ต้องรอดูว่าจะมาเพิ่มความง่ายในการทำ pipeline ได้มากน้อยขนาดไหน