হোম/Roadmap/Chapter 1.01
Phase 1 · Chapter 1.01

Model Serialization (Pickle, Joblib, ONNX)

Train করার পর model কে disk-এ রাখা এবং production-এ আবার load করা — এটাই packaging-এর প্রথম ধাপ।

Hook

Trained model — তারপর?

একজন ML Engineer model train করলেন accuracy 96%। কিন্তু সেই model শুধু Jupyter memory-তে রয়ে গেলে production কখনো ব্যবহার করতে পারবে না। দরকার — serialization, অর্থাৎ model কে bytes-এ রূপান্তর করে file আকারে রাখা।

Concept

Serialization কী

Python object (যেমন trained RandomForestClassifier) কে byte stream-এ পরিণত করে file-এ save করা = serialization। উল্টোটা (file → object) = deserialization।

  • Pickle — Python standard, general-purpose।
  • Joblib — large numpy array-এর জন্য fast।
  • ONNX — framework-agnostic, cross-language।
  • SavedModel / TorchScript — TF/PyTorch native।
Step-by-step

Joblib দিয়ে save ও load

pythonproduction
# train.py
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import joblib

X, y = load_iris(return_X_y=True)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)

joblib.dump(model, "model.joblib")
print("saved")
pythonproduction
# load.py
import joblib
model = joblib.load("model.joblib")
print(model.predict([[5.1, 3.5, 1.4, 0.2]]))

ব্যাখ্যা: joblib.dumpnumpy array কে efficiently compress করে save করে — pickle থেকে দ্রুত।

Code

ONNX — framework-agnostic format

pythonproduction
# sklearn → ONNX
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType
import joblib

model = joblib.load("model.joblib")
initial_type = [("input", FloatTensorType([None, 4]))]
onnx_model = convert_sklearn(model, initial_types=initial_type)

with open("model.onnx", "wb") as f:
    f.write(onnx_model.SerializeToString())
pythonproduction
# ONNX runtime দিয়ে inference
import onnxruntime as rt
import numpy as np

sess = rt.InferenceSession("model.onnx")
pred = sess.run(None, {"input": np.array([[5.1, 3.5, 1.4, 0.2]], dtype=np.float32)})
print(pred[0])

ব্যাখ্যা: ONNX file যেকোনো language (C++, Java, JS) থেকে চালানো যায় — edge ও mobile deployment-এর জন্য আদর্শ।

Intuition

কোনটা কখন

Pickle

Pure Python object, ছোট model।

Joblib

Sklearn, numpy-heavy model।

ONNX

Cross-platform, edge, multi-language।

Real-world

Industry usage

  • Microsoft — Office product-এ ONNX runtime।
  • Hugging Face — transformers ONNX export support।
  • Tesla — edge inference-এ optimized binary।
Common Mistakes

যেসব ভুল বেশি হয়

  • Train ও serve environment-এ ভিন্ন sklearn version — load fail।
  • Pickle file untrusted source থেকে load — security risk (arbitrary code execution)।
  • Preprocessor save না করা — শুধু model save করলে inference mismatch।
  • Model size git-এ push — LFS বা artifact storage ব্যবহার করুন।
Practice Tasks

অনুশীলন

  1. একটি sklearn pipeline (scaler + classifier) save করুন joblib দিয়ে।
  2. একই model কে ONNX-এ convert করে inference time তুলনা করুন।
  3. Pickle ও Joblib file size compare করুন।
  4. Model version metadata (training date, accuracy) JSON-এ save করুন।
Mini Project

Mini Project — Model Registry

একটি models/ folder বানান যেখানে version অনুযায়ী file থাকবে: iris_v1.joblib, iris_v2.joblib। একটি registry.json-এ প্রতিটি version-এর accuracy ও timestamp track করুন। Loader function লিখুন যেটি latest version load করে।

Summary

এই chapter থেকে যা শিখলাম

  • Serialization model কে portable করে।
  • Joblib sklearn-এর জন্য default choice।
  • ONNX cross-platform deployment-এর standard।
  • Version ও environment match করা critical।