মূল content-এ যাও

MLOps/MLOps-এর ভিত্তি/Lesson 03

Model versioning

Train করা model file-এ save করা (joblib), সাথে metadata (version, metric, feature, hash), আর একটা ছোট model registry যেটা প্রতিটা নতুন model-কে version নম্বর দেয় আর production-এ কোনটা চলছে মনে রাখে।

সময়
24 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

Training শেষ হলে model থাকে memory-তে। Program বন্ধ করলেই হারিয়ে যায়। তাই model-কে file-এ save করতে হয়, যাতে পরে, অন্য computer-এ বা server-এ load করা যায়।

কিন্তু শুধু file যথেষ্ট না। model_final_v2_NEW_use_this.joblib-এর মতো নাম থেকে কিছু বোঝা যায় না। Model versioning মানে:

  • প্রতিটা model-এর একটা স্পষ্ট version নম্বর
  • সাথে metadata: কোন data, কোন feature, কোন metric
  • আর একটা registry, যেটা জানে কোন version এখন production-এ

কেন দরকার?

  • Rollback: নতুন model খারাপ করলে আগেরটায় এক মুহূর্তে ফেরা যায়
  • Audit: "এই loan কেন reject হলো?" কোন model সিদ্ধান্তটা নিয়েছিল, তা জানা যায়
  • নিরাপত্তা: কেউ model file বদলে দিলে hash মিলিয়ে ধরা যায়

Save আর load: joblib

scikit-learn model save করার প্রচলিত উপায় হলো joblib:

main.py

Load করা model হুবহু আগের মতো কাজ করে। কিন্তু খেয়াল করো, prediction দিতে জানতে হচ্ছে feature কোনগুলো আর কোন ক্রমে। এই তথ্য file-এ নেই। তাই metadata লাগে।

Metadata

main.py

sha256 হলো file-এর আঙুলের ছাপ। File-এর একটা byte বদলালেও hash পুরো বদলে যায়। Load করার আগে hash মিলিয়ে নিলে নিশ্চিত হওয়া যায় যে file-টা ঠিক সেটাই যেটা register করা হয়েছিল।

Registry: version আর stage

registry/
  index.json      {"versions": [v1, v2, v3], "production": 2}
  v1.joblib
  v2.joblib       ← এখন production
  v3.joblib       ← নতুন, পরীক্ষাধীন

নতুন model আসে, register হয়, যাচাই হয় (আগের lesson-এর deploy gate), তারপর promote হয়ে production-এ যায়। সমস্যা হলে আবার আগের version-কে promote করলেই rollback হয়ে যায়।

⚠️ Pickle-এর ঝুঁকি

joblib ভেতরে pickle ব্যবহার করে। অবিশ্বস্ত উৎসের pickle file load করলে যেকোনো code চলতে পারে। Internet থেকে নামানো model file কখনো অন্ধভাবে load করবে না। Deep learning-এ এজন্য safetensors format জনপ্রিয়: এটা শুধু সংখ্যা রাখে, code রাখে না।

Exercise

Exercise

Save আর load

+20 XP

students_clean.csv-এর study_hours আর attendance দিয়ে passed প্রেডিক্ট করতে একটা LogisticRegression() train করো, পুরো data দিয়ে।

  • Model-টা "model.joblib"-এ save করো (joblib.dump)
  • আবার load করে loaded variable-এ রাখো (joblib.load)
  • প্রথম ৫টা ছাত্রের জন্য loaded-এর prediction preds-এ রাখো
solution.py

Quiz

  1. Q1Model file-এর সাথে metadata (version, metric, feature-এর নাম, তারিখ) রাখা কেন জরুরি?
  2. Q2joblib/pickle file নিয়ে নিরাপত্তার কোন সতর্কতা আছে?
  3. Q3Production-এ নতুন model খারাপ করছে। Registry থাকলে কী করা সহজ হয়?
0/3 answered

Challenge

Challenge

একটা ছোট model registry

+50 XP

একটা folder-ভিত্তিক registry। registry/index.json file-এ সব version-এর তালিকা থাকবে:

{"versions": [{"version": 1, "file": "...", "sha256": "...", "metrics": {...}}, ...], "production": null বা version নম্বর}

তিনটা function লেখো:

  1. register(model, metrics, root="registry") — model-কে root/v{n}.joblib-এ save করবে। n = এখন পর্যন্ত যতগুলো version, তার পরেরটা (প্রথমটা 1)। File-এর sha256 hash (hex) সহ index-এ entry যোগ করবে, তারপর n return করবে। Folder বা index না থাকলে তৈরি করবে (শুরুতে production None)।
  2. promote(version, root="registry") — production-কে এই version বানাবে। Version না থাকলে ValueError।
  3. load_production(root="registry") — production model load করবে। তার আগে file-এর hash index-এর সাথে মিলিয়ে দেখবে, আর না মিললে ValueError raise করবে, কারণ file বদলে গেছে বা নষ্ট হয়েছে। Production না থাকলেও ValueError।
solution.py

বাস্তবে কোথায় ব্যবহার হয়?

MLflow Model Registry ঠিক তোমার challenge-এর কাজ করে, সাথে UI আর permission দেয়:

import mlflow

result = mlflow.register_model("runs:/<run_id>/model", "student-pass-predictor")
client = mlflow.MlflowClient()
client.set_registered_model_alias("student-pass-predictor", "production", result.version)

model = mlflow.pyfunc.load_model("models:/student-pass-predictor@production")

Hugging Face Hub-ও একধরনের registry। প্রতিটা model-এর git-এর মতো version history থাকে।

Interview প্রশ্ন

  • Beginner: Model কীভাবে save আর load করবে?
  • Intermediate: Model registry কী? Model-এর সাথে কোন metadata রাখবে?
  • Advanced: Pickle-এর নিরাপত্তা ঝুঁকি কী? Production-এ model artifact-এর অখণ্ডতা (integrity) কীভাবে নিশ্চিত করবে?

এরপর কী?

Model version হলো। কিন্তু ৬ মাস পরে v2-কে আবার হুবহু বানাতে পারবে কি? একই data, একই code আর একই random seed লাগবে। পরের lesson: Reproducibility।