Model Serialization (Pickle, Joblib, ONNX)
Train করার পর model কে disk-এ রাখা এবং production-এ আবার load করা — এটাই packaging-এর প্রথম ধাপ।
Trained model — তারপর?
একজন ML Engineer model train করলেন accuracy 96%। কিন্তু সেই model শুধু Jupyter memory-তে রয়ে গেলে production কখনো ব্যবহার করতে পারবে না। দরকার — serialization, অর্থাৎ model কে bytes-এ রূপান্তর করে file আকারে রাখা।
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।
Joblib দিয়ে save ও load
# 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")# 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 থেকে দ্রুত।
ONNX — framework-agnostic format
# 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())# 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-এর জন্য আদর্শ।
কোনটা কখন
Pure Python object, ছোট model।
Sklearn, numpy-heavy model।
Cross-platform, edge, multi-language।
Industry usage
- Microsoft — Office product-এ ONNX runtime।
- Hugging Face — transformers ONNX export support।
- Tesla — edge inference-এ optimized binary।
যেসব ভুল বেশি হয়
- 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 ব্যবহার করুন।
অনুশীলন
- একটি sklearn pipeline (scaler + classifier) save করুন joblib দিয়ে।
- একই model কে ONNX-এ convert করে inference time তুলনা করুন।
- Pickle ও Joblib file size compare করুন।
- Model version metadata (training date, accuracy) JSON-এ save করুন।
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 করে।
এই chapter থেকে যা শিখলাম
- Serialization model কে portable করে।
- Joblib sklearn-এর জন্য default choice।
- ONNX cross-platform deployment-এর standard।
- Version ও environment match করা critical।