เริ่ม Design MLOps ให้ ML Service ต้องทำอะไรบ้างนะ?

Chalach Monkhontirapat
Equinox
Published in
7 min readJan 6, 2023

⚫ MLOps คืออะไร ?

Machine Learning Operations (MLOps) เป็นการทำ Operations เกี่ยวกับ Machinen Learning Model โดยมีตั้งแต่ Manual ไปจน Automation ที่มีการ Versioning, Tracking, Testing, Monitoring, รวมไปถึง Feature store และ Model registry อีกด้วย สามารถอ่านเพิ่มเติมได้ที่ Blog ข้างล่างที่เคยเขียนไว้แล้ว

Design MLOps with MLOps Stack Canvas

⚫ MLOps Stack Canvas

MLOps Stack Canvas เป็นตัวช่วยระบุ Architecture และ Infrastructure Stack ของ Machine Learning Operations ซึ่งถูกออกแบบมาให้เข้ากับการพัฒนา Model การพัฒนาแบบ CRISP-ML โดยตัว MLOps Stack Canvas มีส่วนประกอบทั้งหมด 11 Components และจัดเรียงมาให้พร้อมกับ ML Life Cycle และ AI Rediness เพื่อที่จะทำให้เรารู้ว่าจะต้องเลือก MLOps processes และ Technlogy Components ที่เหมาะสมยังไง

CRISP-ML(Q) เป็น Process set of steps ใน Machine learninf development life cycle (อ่านเพิ่มเติมได้ที่นี่)

Mapping the CRISP-ML(Q) process model to the MLOps stack.

MLOps Stack Canvas มี purpose ที่จะช่วยให้การออกแบบ workflow, architecture, infrastructure และ Components ต่างๆ ของ MLOps Stack ใน ML Project เป็นไปตาม Standard ดังนี้

  • ตรวจสอบให้แน่ใจว่า ML Solution นี้ Impact ต่อ Business
  • Planing cost ของ infrastructure components สำหรับ MLOps 3 ส่วน
    - Data and code management
    - ML model management
    - Metadata management
  • Planning cost ของ orchestration ML system life-cycle 3 ส่วน
    - Continuous integration/training/delivery for ML system
    - Monitoring ML system is achieving the business objectives
    - Alerting to deal with model failures
  • Design ML system ให้รองรับ 3 ส่วน
    - Reproducibility(การทำซ้ำ) : versioning, feature store, and pipelines
    - Reliability(ความน่าเชื่อถือ) : models ควรจะใช้งานได้หรือถ้าเกิดมีอะไรพังก็ควรจะ Recover ตัวเองกลับมาได้
    - Efficiency(ประสิทธิภาพ) : model predictions ได้ไวไม่กระทบต่อระบบอื่นๆ และใช้ cost ได้คุ้มค่าที่สุด

⚫ Components of MLOps Stack Canvas

โดยทั่วไปแล้ว MLOps Stack Canvas จะประกอบไปด้วย 3 ส่วนหลักๆ คือ

  1. Data and Code Management
  2. Model Management
  3. Metadata Management

โดยในแต่ละส่วน จะมีส่วนย่อยของตัวเอง ตามภาพข้างล่างนี้

1. Value Proposition

องค์ประกอบหลักใน MLOps Stack Canvas คือการนำเสนอคุณค่า โดยทั่วไป Value Proposition ก็คือ ข้อความ คำแถลง หรือ ข้อเสนอแนะ ว่าลูกค้าหรือผู้ใช้งานระบบนี้จะได้ประโยชน์อะไร อะไรคือจุดแข็ง จุดอ่อนของทีม หรือ Product ลูกค้าใช้แล้วจะได้ Benefits อะไร หรือถ้าทำตามแล้วจะได้อะไร โดยสามารถเขียน Value Proposition ได้ตาม Template ยอดนิยม Geoffrey Moore’s value positioning statement template ก็ได้ดังนี้

For (target customer) who (need or opportunity), our (product/service name) is (product category) that (benefit).”

“สำหรับ (ลูกค้าเป้าหมาย) ที่ (ความต้องการหรือโอกาส) Prodcut ของเรา (ชื่อผลิตภัณฑ์/บริการ) คือ (หมวดหมู่ผลิตภัณฑ์) ซึ่ง(ประโยชน์)”

เช่น

สำหรับ E-commerce platform ที่ต้องการสร้างรายได้ให้มากขึ้นจากเดิม Recommendation system ที่เป็น Machine Learning Model จะช่วยให้ E-commerce platform มี ยอดขายเพิ่มขึ้นจากเดิม X% จากยอดขายทั้งหมด

Value Proposition โดยทั่วไป ในการกำหนดข้อเสนอคุณค่าสำหรับโครงการ ML ควรจะตอบคำถามต่อไปนี้ได้

  • เรากำลังทำอะไรเพื่อ end-users
    (เช่น แนะนำ Products ที่เค้าสนใจ หรือ ตัวที่กำลังมี Promotion)
  • อะไรคือปัญหา ?
    (เช่น ยอดขายไม่ตรงตามเป้า ลูกค้าไม่ได้ Products ที่ตรงตามความต้องการ)
  • ทำไมถึงเป็นปัญหาสำคัญ
    (เช่น ยอดขายไม่ถึงเป้าอาจจะกระทบต่อโครงการอื่นๆ ลูกค้าไม่ชอบ Product ที่ได้ อาจจะเสียลูกค้าไป)
  • ใครเป็นเจ้าของ Machine Learning Model
    (ส่วนนี้เพิ่มจะแตกต่างจาก Value Proposition ที่ไม่ได้เกี่ยวข้องกับ ML system)

2. Data Sources and Data Versioning

Data คือ fundamental part ของ machine learning ดังนั้น การกำหนด Data source และการทำ Data versioning เป็นสิ่งจำเป็นไม่แพ้กับ Value Proposition เพราะช่วยให้เราสามารถ Estimate cost ได้ว่า ต้องใช้ข้อมูลอะไร จะเอาข้อมูลมาจากที่ไหน ดึงมายังไง ไปเก็บที่ไหน

นอกจากนี้การทำ Data versioning จะมี requirement คร่าวๆ ประมาณนี้

  • Data is versioned as a snapshot at training time
    เช่น snapshort data ออกมาทีละ daily weakly monthly ตามแต่ละช่วงเวลาที่ต้องทำการ re-train model
  • Using specialized data versioning systems
    เช่น ไม่มีรอบการ re-train แน่นอน แต่ใช้การติด tag version data ทุกครั้งเมื่อมีการ re-train model

Part Data sources and Data Versioning นี้โดยทั่วไปควรจะตอบคำถามต่อไปนี้ได้

  • ต้องการใช้ข้อมูลอะไรบ้าง และ หาได้จาก Data sources ไหน
  • Data sources ที่จะไปดึงมามีการเก็บอยู่ในรูปแบบไหน
  • ต้องมี Data sources ปลายทางสำหรับการจัดเก็บเพื่อ Model นี้หรือไม่
  • Require data labeling มั้ย ถ้าต้องการใครทำ
  • จะทำ Data versioning ในรูปแบบไหน
  • มี Tools อะไรที่ Support การทำ Data pipelines หรือ Workflows

หากต้องการลง Detail ในส่วนของ Data มากกว่านี้ เราอาจจะสามารถใช้ Data Landscape Canvas เป็นช่วยเพิ่มเติมในการลงรายละเอียด

3. Data Analysis and Experiment Management

Part นี้จะระบุความสำคัญของสิ่งที่จะใช้ในการทำ Experiment ว่าจะทำแบบใดบ้าง ด้วยเทคนิคอะไร แล้วมีการวัดผลอย่างไร เพื่อให้ Products นี้สามารถออกมาได้ตอบโจทย์ลูกค้า โดยทั่วไปควรจะตอบคำถามต่อไปนี้ได้

  • ภาษาโปรแกรมใดที่จะใช้ในการวิเคราะห์ (R, Python, Scala, Julia หรือ SQL เพียงพอสำหรับการวิเคราะห์หรือไม่)
  • มีข้อกำหนดด้านโครงสร้างพื้นฐานอะไรบ้าง สำหรับการ Train Model
  • ต้องเรียนรู้ หรือใช้ ML Framework อะไรบ้าง
  • Metrices ที่ใช้วัดผลจะมีอะไรบ้าง
  • จะสามารถทำให้ Model มี Reproducibility ได้ยังไงบ้าง ใช้ Medata อะไรบ้าง
  • จะเก็บ Model Experiment ในรูปแบบไหนทั้งส่วนของ Develop และ Production
  • มี Tools อะไรที่ Support การทำ Model trainning และ Model Experiment

4. Feature Store and Workflows

เนื่องจาก Process ของ Machine learning, feature engineering คือ Process ในการ Transform raw input data ไปเป็น feature vectors หรือรูปแบบอื่นที่เหมาะสำหรับ input formats ของ machine learning algorithms นั้นๆ ก่อนจะทำการ training และ prediction

MLOps stack ต้องการที่จะ management, reproducibility, discovery, และ reuse of features ระหว่าง ML projects และ Data science teams การจะทำแบบนั้นได้ จึงต้องมีสิ่งที่เรียกว่า Feature store ซึ่งเป็นตัวเก็บ feature ต่างๆ ที่ใช้ในการ train model เก็บไว้นั่นเอง

สำหรับ Part Feature Store and Workflows ควรจะตอบคำถามต่อไปนี้ได้

  • มีการคำนวณหรือหา Feature สำหรับการ training model และ predicton
  • Databases ตัวไหนบ้างที่ involved feature storage?
  • มี API หรือ Library กลางในการทำ Feature engineering หรือไม่
  • มี Tools อะไรที่ Support การทำ Feature store และ Setup workflows ในการเก็บ Feature และการนำไปใช้งาน หรือแบ่งปันกับทีมอื่น

5. Foundations (Reflecting DevOps)

ส่วนนี้จะเป็นส่วนที่ relate กับทุกๆส่วนใน Canvas นี้ เพราะว่า ต้องใช้ DevOps principles ทั้งในส่วนของ Infrastructure และ Raising awareness ในส่วนการ Implement ต่างๆ ML project เช่นการทำ Versioning, Tracking, Testing, Monitoring เป็นต้น

สำหรับ Part Reflcting DevOps ควรจะตอบคำถามต่อไปนี้ได้

  • เราจะมีการ maintain source code / data source ยังไง
  • จะใช้ source / data version control system ตัวไหน
  • เราจะทำ Notebooks versionning หรือไม่
  • Deployment and testing automation: จะทำ CI/CD สำหรับ Codebase ไปในรูปแบบไหน และใช้ Tools อะไรในการทำ
  • เราจะ Track
    - deployment frequency(ความถี่ในการ Deploy)
    - lead time for changes(ระยะเวลาตั้งแต่ตกลงว่าจะมีการแก้จนถึงทำเสร็จส่งมอบ)
    - mean time to restore(ระยะเวลาตั้งแต่ System failed จนถึงการ Restore จนใช้ได้ปกติ)
    - change failure rate metrics? (Change ที่ทำให้ System failed )
    ต่างๆนี้ยังไง และใช้ Tools อะไรในการทำ

6. Continuous Integration, Training, and Deployment: ML Pipeline Orchestration

ต้องเริ่มจากว่า CI/CD ใน ML system นั้นจะมี release cycles ต่างจาก Software delivery ซึ่งจะขึ้นอยู่กับความต้องการของแต่ละ ML system นั้นๆ และยังเพิ่มในส่วนของ CT(Continuous Training) เพราะว่า Model ณ ช่วงเวลานึงก็อาจจะใช้ได้ไม่ดีเหมือนก่อน จึงต้องมีการ re-train model ใหม่ ด้วย data ใหม่ๆ ที่เข้ามา ส่วนนี้จึงเป็นส่วนที่ต่างกับ DevOps นั่นเอง

สำหรับ Part CI/CD/CT และ ML Pipeline Orchestation ควรจะตอบคำถามต่อไปนี้ได้

  • Model จะต้องมีการ retrained บ่อยมากแค่ไหน และมีอะไรเป็นตัว trigger ในการ retrained เช่น scheduled, event-based หรือ ad-hoc
  • Process CI/CD/CT แต่ละส่วนเกิดขึ้นที่ on prem หรือ on cloud
  • Workflow อย่างเป็นทางการของที่กำลังจะทำมีหน้าตาเป็นยังไง เช่น
    data prep → data validation → model training → model eval เป็นต้น และทั้ง workflow มีการใช้ tech stack อะไรในแต่ละส่วน
  • Model ที่ train เป็นการ train แบบ distributed มั้ย ถ้าใช่ เรามี infrastructure รองรับหรือยัง
  • จะมีการ test non-fuctional ของ ML model เช่น efficiency, fairness, robustness, interpretability ด้วยมั้ย ถ้ามีจะทำตอนไหนกำหนดให้ชัดเจน

7. Model Registry and Model Versioning

Machine model เป็น code ชุดนึงที่ทำหน้าที่เรียนรู้ข้อมูลชุดนึง ด้วย algorithm ซักตัวนึง ซึ่งก็เป็นเหมือน software code ที่ใช้ในการ implement software ต่างๆ เช่น mobile app หรือ web app เหมือนกัน ดังนั้นต้องมีการเก็บ version ของ model ไว้เหมือนกับเก็บ version ของ feature อย่างใดอย่างนั้น

แล้วการกำหนด version ให้กับ model ช่วยอะไรได้ การกำหนด version นั้นจะช่วยให้ model เราสามารถมี reproducibility ก็คือสามารถนำกลับมาทำใหม่ได้ตลอด หรือสามารถถอยไป version ก่อนหน้าได้ในกรณีที่ของใหม่ ไม่ดีพอ

สำหรับ Part Model Registry and Model Versioning ควรจะตอบคำถามต่อไปนี้ได้

  • การทำ versioning เป็น optional หรือ mandatory สำหรับ project นั้น เพราะถ้า model ไม่มีการ retrained ใช้ครั้งเดียวจบ ก็อาจจะไม่จำเป็น
  • จะมีการทำ model registry ของแต่ละ versions ไว้ที่ไหน
  • จะมีการ tracking model แต่ละ versions ด้วยอะไร และดูได้จากที่ไหน
  • จะมีการกำหนดมาตาฐานของ versions ยังไง

8. Model Deployment

หลังจากที่ทำ Model training และ Model evaluation แล้ว เราก็ต้องนำ Model ของเราไปใช้งานจริง โดยการทำ Model deployment ซึ่งก็จะต้องทำมาตั้งแต่ Dev environment ด้วย CI/CD แต่พอมา Production environment ก็ต้องดูว่า Service ของเรานั้นมีความพร้อมในการทำ CD บน Prod. env มั้ยอีกด้วย

สำหรับ Part Model Deployment ควรจะตอบคำถามต่อไปนี้ได้

  • Format ในการ Delivery model เป็นยังไง
  • Time to changes ที่รับได้ตั้งแต่ commit to prod คือเท่าไหร่
  • Target environment มีอะไรบ้าง
  • Model release policy เป็นยังไง สามารถทำ A/B Testing ได้หรือไม่
  • Deployment strategy เป็นยังไง เช่น shadow/canary deployment required?

8.1 ML Deployment Strategy

ส่วนนี้จะถึงวิธีทั่วไปในการ wrapping model ที่ trained ให้สามารถ deploy ซึ่งต้องยอมรับว่าแต่ละที่ก็จะมี หลากหลายท่าในการกำหนด Strategy นี้ โดยหัวข้อนี้จะพูดถึงท่าพื้นฐานง่ายๆ ซึ่งได้แก่

Deploying ML Models as Docker Containers

เนื่องจากยุคสมัยนี้ถ้าทำ Product ขึ้นใหม่ก็คงไม่พ้นการทำให้เป็น Container เพราะด้วยความง่ายในการ pack ที่จะเอาไป deploy ที่ไหนก็ได้แล้วยัง stateless, lightweight and idempotent อีกด้วย ซึ่งหมายความว่าเจ้า Container ตัวนี้จะถูกนำไป deploy ได้ทั้ง on-prem หรือ on-cloud ได้ด้วยมาตราฐานเดียวกัน

อย่างรูปด้านล่างนี้ ก็จะเป็นการนำ ML Model pack to docker container แล้วก็นำไป deploy ภายใต้ k8s ซึ่งก็ขึ้นอยู่กับว่าเราจะใช้ on-prem หรือ on-cloud เช่น AWS EKS, AWS Fargate, Azure Kubernetes Service เป็นต้น จากนั้นก็ใช้งานผ่าน Rest api ที่เขียนไว้ด้วย framework ต่างๆ เช่น Flask api หรือ Fast api เป็นต้น

Deploying ML Models as Docker Containers

Deploying ML Models as Serverless Functions

Cloud provider หลายเจ้ามี serverless platform ไว้รองรับการ deploy อยู่แล้ว เช่น Amazon AWS Sagemaker, Google Cloud AI Platform, Azure Machine Learning Studio, and IBM Watson Machine Learning เป็นต้น

ซึ่งการ Deploy ก็แสนง่าย ยกตัวอย่างเช่น AWS Lamda เราแค่นำ ML Service ของเราขึ้นไป Deploy ที่ AWS Lamda โดยไม่ต้อง Setup infrastructure ใดๆ และยังสามารถ Scale ได้อย่างง่าย และค่าใช้จ่ายก็เป็น Pay-as-you-use อีกด้วย

Deploying ML Models as Serverless Functions

9. Prediction Serving

ส่วนนี้คือส่วนที่รับ new input data เพื่อมาใช้ ML Service ที่เราได้ทำการ deploy ขึ้นไป โดยทั่วไปเราจะแยกตามการใช้งาน เช่น online service, offline service ในการทำ prediction โดยหลักๆ จะแบ่งออกเป็น Patterns ในการทำ Model in production ได้แก่

Model-as-Service

Model-as-Service Pattern เป็นท่าที่ง่าย และนิยมมากที่สุด เพราะใช้ Concepts เดียวกับทางด้าน Software Development โดยการทำ ML service ให้เป็น api ด้วยภาษาต่างๆ ตามถนัด เช่น python ก็จะนิยมใช้ Flask, Fast เป็นหลัก จากนั้นก็ไป Read model ที่ pack ไว้ โดยสามารถทำให้รองรับได้ทั้ง Rest api และ gRPC อีกด้วยขึ้นอยู่กับการใช้งาน

Model-as-Service

Model-as-Dependency

Model-as-Dependency Pattern เป็นท่าที่จริงๆแล้วไม่ค่อยเหมาะกับการใช้งานจริง on-prod แต่นิยมนำมาใช้ในการ Test เสียมากกว่า โดยจะเป็นการนำ ML model มา Pack เป็น dependency file เช่น .jar file เป็นต้น จากนั้นก็ import เข้าไปในโปรแกรมที่รับ new input data เข้ามา แล้วก็ไปเรียกใช้ function ใน jar เพียงเท่านั้น

Model-as-Dependency

Precompute Serving Pattern

Precompute Serving Pattern นั้นเป็นการ pre-compute ไว้ก่อนที่จะนำไปใช้จริง โดยเมื่อทำการ pre-compute เสร็จมักจะนำไปใส่ไว้ใน Database ตามแต่ละ Business ที่ใช้งาน เช่น Food Delivery จะ Recommend อาหาร หรือ ร้านอาหาร ที่ลูกค้าสนใจแบบวันต่อวัน ซึ่งท่านี้ก็จะช่วยให้ลดเวลาในการ compute prediction ไปได้มากเพราะเป็นการ select แทนการ prediction นั่นเอง

Precompute Serving Pattern

Model-on-Demand

Model-on-Demand Pattern เป็นการนำ Message Broker เข้ามาช่วย เช่น Kafka หรือ RabbitMQ เป็นต้น โดยจะทำการส่ง request เข้าไปไว้ใน broker queue ก่อน แล้วหลังจากถึง queue ของ request นั้นแล้วก็ส่งไป prediction ที่ event processor วิธีนี้จะเหมาะกับการ prediction ที่ไม่ต้องรอผล ณ เดี้ยวนั้นทันที เช่น การ recommend สินค้าที่คล้ายๆกบัที่ลูกค้าดู อาจจะทำเป็นแบบ async ได้เรื่อยๆ ที่ลูกค้า click ดูสินค้าต่างๆ ไม่ต้องทำเป็นแบบ sync ที่จะต้องรอผลลัพธ์นั้นทันที เช่น Credit Scoring เป็นต้น

Model-on-Demand

10. ML Model, Data, and System Monitoring

เมื่อนำ Model ไป deploy ใช้งานจริงแล้ว ก็จะต้องมีการ Monitored เพื่อให้มั่นใจได้ว่า Performance ของ Model ที่ใช้จริงนั้น ยังตอบโจทย์อยู่และถูกต้อง

สำหรับ Part ML Model, Data, and System Monitoring ควรจะตอบคำถามต่อไปนี้ได้

  • จำเป็นต้องมี Alert system เมื่อ Model performance ต่ำกว่าที่ต้องการไว้มั้ย และจะกำหนด Thresholds ยังไร
  • จำเป็นต้องให้ Model ได้รับการ re-train เมื่อถึง event-based ตามที่ต้องการไว้หรือไม่ และจะกำหนด event อะไรบ้างที่ต้องการ
  • ML metrics ที่ใช้ในการตรวจสอบ Performance มีอะไรบ้าง มี Domain ไหนบ้าง
  • ต้อง Monitor model prediction latency ด้วยมั้ย และ CPU/RAM ต้องดูควบคู่กันมั้ย และเรามีสิทธิ์ในการเข้าถึงได้หรือไม่
  • อะไรคือตัว Trigger ให้ model ไป retrained ?

11. Metadata Store

การจัดการข้อมูล Metadata มักจะจัดการข้อมูลเกี่ยวกับการ execution ของแต่ละ experiment โดยแต่ละครั้งที่มีการ run model data pipeline ก็จะเก็บไว้ใช้สำหรับการ reproduce, และ debug errors

สำหรับ Part Metadata Store ควรจะตอบคำถามต่อไปนี้ได้

  • จะต้องเก็บข้อมูล metadata อะไรบ้าง เช่น id ของ pipeline , trigger, performed steps, start/end timestamps, train/test dataset split, hyperparameters, model object, various statistics/profiling เป็นต้น
  • ML governance จำเป็นมั้ยในส่วนมี ถ้าจำเป็นต้องทำอะไรบ้าง
  • จะเขียน Document สำหรับ Metadata Store ยังไง
  • จะต้องเก็บ operational metrics อะไรบ้าง

⚫ Conclusion

Blog นี้เป็นเพียงแค่หนึ่งในวิธีการ Design MLOps process ซึ่งในแต่ละขั้นตอนในการ Design ก็จะมีทั้งที่เป็น Mandatory และ Optional ซึ่งก็ขึ้นอยู่กับแต่ละ Business ความพร้อมทางด้าน Infrastrucure และ Knowledge ของ Machine Learning Engineer ในบริษัทว่ามีความพร้อมที่จะทำ MLOps มากแค่ไหน

--

--