Home »
Blog »
AI/ML Engineer সিরিজ » Series 09 » Episode 01
'model.fit() হলো, এখন কী?' — Notebook production না, এই ফারাকটা বোঝো
production mindset (Series 09, Episode 01)
🟢 BEGINNER
Series 09 — Notebook থেকে Production AI
Episode 01 / 09
📑 এই পর্বে যা যা আছে
- ১. গল্প: Rahim-এর "কাজ শেষ!" মুহূর্ত
- ২. আসল সমস্যা: notebook কারো কাজে লাগছে না
- ৩. কেন notebook production না — মূল কারণগুলো
- ৪. তিন স্তরে বোঝা: notebook বনাম production system
- ৫. Visual: model থেকে production-এর পুরো পথ
- ৬. একটা notebook কীভাবে দেখতে, একটা service কীভাবে দেখতে
- ৭. Experiment: নিজের notebook-এর "production-readiness" যাচাই
- ৮. বাংলাদেশের বাস্তবতা: কেন এই skill দিয়ে আলাদা হওয়া যায়
- ৯. AI Engineer perspective: model ≠ product
- ১০. Boss Question
- ১১. Job Requirement Decoder: "Model deployment / Productionize"
- ১২. সাধারণ ভুল
- ১৩. Interview Prep
- ১৪. হাতে-কলমে
- ১৫. Project Connection: flagship-কে service বানানোর যাত্রা শুরু
- ১৬. সারসংক্ষেপ
- ১৭. পরের পর্বে কী শিখব
🎬 ১. গল্প: Rahim-এর "কাজ শেষ!" মুহূর্ত
Rahim তিন সপ্তাহ ধরে একটা customer churn prediction model নিয়ে কাজ করছিল। শেষ পর্যন্ত
তার Jupyter notebook-এ model.fit() চলল, accuracy এল ৮৭%, confusion matrix সুন্দর দেখাল।
সে খুশিতে টিম চ্যাটে লিখল — "Model ready! Churn prediction ৮৭% accuracy!"
Maya (senior AI engineer) রিপ্লাই দিল:
"চমৎকার! এখন আমাদের marketing team প্রতিদিন সকালে যে ১০,০০০ customer-এর risk score চায় — সেটা তারা
কোথায় পাবে? তোমার notebook কি প্রতিদিন নিজে নিজে চলবে? Marketing-এর dashboard এই score কীভাবে টানবে?
নতুন customer আসলে তার prediction কে দেবে?"
Rahim চুপ। তার model কাজ করে — কিন্তু শুধু তার laptop-এ, তার notebook-এ, সে নিজে run button
চাপলে। বাকি পৃথিবীর কেউ এটা ব্যবহার করতে পারে না।
এই এক মুহূর্তেই Rahim বুঝল — model বানানো আর model কাজে লাগানো দুটো সম্পূর্ণ আলাদা জিনিস। এই পুরো Series 09
সেই gap-টা পূরণ করার জন্য: Model → Application → API → Deployment → Monitoring।
❓ ২. আসল সমস্যা: notebook কারো কাজে লাগছে না
বেশিরভাগ beginner AI course শেষ হয় model.fit()-এ। কিন্তু চাকরিতে ওখান থেকেই আসল কাজ
শুরু হয়। সমস্যাটা এক বাক্যে:
একটা notebook হলো তোমার নিজের জন্য একটা experiment। একটা production system হলো
অন্যদের (user, অন্য service, business) জন্য একটা নির্ভরযোগ্য সেবা, যেটা তুমি ঘুমিয়ে
থাকলেও চলে।
Marketing team Jupyter খুলবে না। Mobile app তোমার .ipynb file import করতে পারে না।
অন্য backend service তোমার notebook-এর cell run করতে পারে না। সবাই একটা জিনিস বোঝে — একটা
API বা একটা চলমান service, যেখানে input পাঠালে output ফেরত আসে।
🔍 ৩. কেন notebook production না — মূল কারণগুলো
Notebook টা experiment-এর জন্য অসাধারণ, কিন্তু production-এ এগুলো সমস্যা তৈরি করে:
| বিষয় | Notebook-এ কী হয় | Production-এ কেন সমস্যা |
| Execution | তুমি হাতে cell run করো | কেউ ২৪/৭ বসে run button চাপবে না |
| Order | cell যেকোনো ক্রমে চালানো যায় | hidden state — একই notebook দু'বার ভিন্ন ফল দেয় |
| Access | শুধু তোমার machine-এ | অন্য app/service reach করতে পারে না |
| Reliability | error এলে তুমি দেখো | রাত ৩টায় crash করলে কে জানবে? |
| Scale | একজন (তুমি) | একসাথে ১০০০ request এলে? |
| Reproducibility | "আমার machine-এ চলে" | অন্য server-এ library version মেলে না |
গুরুত্বপূর্ণ distinction — training ≠ inference:
Notebook-এ তুমি সাধারণত training করো (model শেখানো, একবার/মাঝে মাঝে, ভারী কাজ, GPU লাগতে পারে)।
Production-এ যেটা দরকার সেটা হলো inference (শেখা model দিয়ে দ্রুত prediction দেওয়া, বারবার, দ্রুত)।
এই দুটোকে গুলিয়ে ফেলা junior-দের সবচেয়ে বড় ভুলগুলোর একটা।
🧠 ৪. তিন স্তরে বোঝা: notebook বনাম production system
Level 1 — সহজ intuition:
Notebook হলো তোমার রান্নাঘরে একটা নতুন recipe পরীক্ষা করা। Production হলো একটা রেস্টুরেন্ট খোলা —
যেখানে যে কেউ এসে order দিতে পারে, রান্না প্রতিবার একই স্বাদ হতে হবে, রাঁধুনি অসুস্থ হলেও রান্নাঘর চলতে হবে,
আর একসাথে ৫০ জন customer এলেও সামলাতে হবে।
Level 2 — technical ভাবে কী হচ্ছে:
Production-এ model-টা একটা saved artifact (যেমন model.pkl / model.pt) হিসেবে load হয়,
একটা long-running process (server) memory-তে ধরে রাখে, একটা REST API input নেয়,
preprocessing → prediction → postprocessing চালায়, আর JSON response ফেরত দেয়। পুরোটা একটা নির্দিষ্ট
environment-এ (fixed dependency version) চলে, log লেখে, আর error handle করে।
Level 3 — AI Engineer perspective:
একজন engineer notebook-এর কোডকে ভাগ করে ফেলে পরিষ্কার অংশে — data loading, preprocessing, model loading,
prediction — প্রতিটাকে function/module বানায়। তারপর একটা serving layer (FastAPI) বসায়,
environment lock করে (venv/uv), Docker-এ প্যাক করে, cloud-এ deploy করে, আর monitoring বসায় যাতে model
খারাপ করলে টের পাওয়া যায়। এই পুরো chain-টাই "production AI"।
🗺️ ৫. Visual: model থেকে production-এর পুরো পথ
[ Notebook / Experiment ] <-- এখানে বেশিরভাগ course থামে
|
v
[ পরিষ্কার Python Package ] (function, module, config)
|
v
[ FastAPI Service (REST API) ] (input -> prediction -> JSON)
|
v
[ Docker Container ] (একই environment সব জায়গায়)
|
v
[ Cloud Deployment ] (publicly reachable, scalable)
|
v
[ Monitoring & MLOps ] (drift, retrain, versioning)
|
v
=====> Business Value <===== (marketing, app, dashboard ব্যবহার করে)
এই Series 09-এর প্রতিটা episode এই সিঁড়ির একটা করে ধাপ। আজকের episode হলো mindset —
কেন এই সিঁড়িটা দরকার সেটা বোঝা।
💻 ৬. একটা notebook কীভাবে দেখতে, একটা service কীভাবে দেখতে
পার্থক্যটা concrete করি। প্রথমে একটা সাধারণ notebook-style কোড — যেটা শুধু চলে, কিন্তু কেউ
ব্যবহার করতে পারে না:
# notebook cell (experiment) — শুধু নিজের জন্য
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv("customers.csv")
X = df.drop("churn", axis=1)
y = df["churn"]
model = RandomForestClassifier()
model.fit(X, y) # <-- এখানেই বেশিরভাগ course শেষ
print(model.predict(X.head())) # শুধু আমি দেখি, আর কেউ না
এবার একটু ভেবে দেখি production-এ এই একই model কেমন হবে (পরের episode-গুলোতে আমরা এটা বানাব)। এখানে
কেন FastAPI? কারণ এটা Python-এ দ্রুত, modern, automatic validation দেয়, আর অন্য যেকোনো
app/service HTTP দিয়ে এটাকে call করতে পারে:
# app.py — এটা একটা service, যে কেউ HTTP দিয়ে call করতে পারে (preview)
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
app = FastAPI()
model = joblib.load("model.pkl") # একবার load, বারবার ব্যবহার
class Customer(BaseModel):
tenure: int
monthly_charges: float
contract_type: str
@app.post("/predict")
def predict(c: Customer):
# আসল কোডে preprocessing এখানে বসবে
risk = 0.0 # model.predict_proba(...) থেকে আসবে
return {"churn_risk": risk}
খেয়াল করো — এখানে কোনো model.fit() নেই! Production-এ আমরা train করি না, আমরা
শেখা model load করে inference দিই। এই এক বিন্দু বুঝলেই তুমি অর্ধেক এগিয়ে গেলে।
🧪 ৭. Experiment: নিজের notebook-এর "production-readiness" যাচাই
তোমার সবচেয়ে ভালো notebook project-টা খোলো, আর নিজেকে এই প্রশ্নগুলো করো:
- Kernel restart করে "Run All" দিলে কি কোনো error ছাড়া উপরের-থেকে-নিচে চলে? (hidden state আছে কি?)
- Model কি আলাদা file-এ save করা আছে, নাকি প্রতিবার train করতে হয়?
- একজন নতুন developer কি তোমার
requirements.txt দিয়ে exact environment বানাতে পারবে?
- Input হিসেবে একটা নতুন customer-এর data দিলে prediction পাওয়ার একটা function আছে কি?
- Marketing team প্রশ্ন করলে তুমি কি বলতে পারবে model কীভাবে ব্যবহার করবে?
বেশিরভাগ "না" হলে — চিন্তার কিছু নেই। এই Series-এর শেষে সব "হ্যাঁ" হবে।
🇧🇩 ৮. বাংলাদেশের বাস্তবতা: কেন এই skill দিয়ে আলাদা হওয়া যায়
বাংলাদেশে অসংখ্য fresh candidate Kaggle notebook দেখাতে পারে — accuracy, plot, confusion matrix।
কিন্তু খুব কম candidate একটা model-কে API বানিয়ে deploy করে দেখাতে পারে। এখানেই তুমি
আলাদা হয়ে যাও।
- bKash / Nagad-এর মতো fintech: fraud detection model শুধু notebook-এ থাকলে অচল —
প্রতিটা transaction-এর সময় milliseconds-এ score দরকার, মানে একটা live inference service।
- Daraz-এর মতো e-commerce: recommendation model প্রতিদিন লাখো user-কে serve করে —
notebook দিয়ে অসম্ভব।
- Local health/agri startup: একটা image model যদি ডাক্তার/কৃষক ব্যবহার করবে, তবে
সেটা একটা app/API হিসেবে থাকতে হবে, notebook নয়।
👷 ৯. AI Engineer perspective: model ≠ product
Model ≠ Production System। Model হলো একটা component (যেমন গাড়ির engine)। Production
system হলো পুরো গাড়ি — engine + steering + brake + dashboard + জ্বালানি ব্যবস্থা। একজন AI Engineer-এর
কাজ শুধু engine বানানো না, চলন্ত গাড়ি delivery দেওয়া।
তাই একজন engineer notebook-এ কাজ শেষ হলে জিজ্ঞেস করে: এটা কে ব্যবহার করবে? কীভাবে reach করবে? কত দ্রুত
উত্তর দিতে হবে (latency)? কতজন একসাথে (scale)? খারাপ prediction দিলে বুঝব কীভাবে (monitoring)? — এই
প্রশ্নগুলোই junior থেকে engineer হওয়ার সীমারেখা।
💼 ১০. Boss Question
💼 Boss: "তুমি বললে model ৮৭% accurate। ঠিক আছে। কিন্তু এই মুহূর্তে এটা দিয়ে
আমার কোম্পানির একটা টাকাও তো বাঁচছে না বা আসছে না। এটা business-এ কবে থেকে কাজে লাগবে?"
উত্তর: ঠিক বলেছেন। accuracy হলো সম্ভাবনা, business value নয়। Value তখনই আসবে যখন এই
model marketing team-এর হাতে প্রতিদিন high-risk customer-এর তালিকা তুলে দেবে, যাতে তারা offer পাঠিয়ে
churn ঠেকাতে পারে। সেটার জন্য model-টাকে একটা service/API বানিয়ে তাদের dashboard-এর
সাথে যুক্ত করতে হবে — আর এই Series-এ আমরা ঠিক সেটাই করব। মানে: notebook = খরচ, deployed system = আয়।
🔎 ১১. Job Requirement Decoder: "Model deployment / Productionize ML models"
JD-তে খুব common একটা লাইন:
"Experience deploying and productionizing machine learning models."
চলো decode করি:
- কী বোঝায়? notebook-এর model-কে এমন একটা চলমান system বানানো যা user/অন্য service
ব্যবহার করতে পারে (সাধারণত API হিসেবে, deploy করা অবস্থায়)।
- কেন চায়? কারণ deploy না হলে model থেকে কোম্পানির কোনো লাভ নেই — শুধু খরচ।
- কোন সমস্যা সমাধান করে? "model তো আছে, কিন্তু কাজে লাগানো যাচ্ছে না" — এই gap।
- Junior-এর কী জানা লাগে? model save/load, একটা FastAPI endpoint বানানো, requirements
lock করা, বেসিক Docker, আর একটা free cloud-এ deploy করে দেখানো।
- এখনই কী master লাগে না? Kubernetes autoscaling, multi-region, GPU cluster,
advanced model serving (Triton/BentoML) — এগুলো পরে/চাকরিতে।
- GitHub-এ কীভাবে দেখাবে? একটা repo যেখানে
train.py, app.py
(FastAPI), Dockerfile, README-তে live demo link ও curl example।
- Interview-তে কী জিজ্ঞেস করতে পারে? "একটা trained model কীভাবে production-এ নেবে?",
"training আর inference-এর পার্থক্য?", "deploy করার আগে কী কী ঠিক করে নেবে?"
⚠️ ১২. সাধারণ ভুল
ভুল ১: মনে করা "model.fit() হলেই কাজ শেষ"। →
বাস্তবে ওখান থেকেই engineering শুরু।
ভুল ২: production API-তে প্রতিবার model train করা। →
একবার train করো, save করো, শুধু load করে inference দাও।
ভুল ৩: notebook-এর random cell-ভিত্তিক কোড সরাসরি copy-paste করে deploy করা। →
আগে function/module-এ ভাগ করো (পরের episode)।
ভুল ৪: requirements.txt ছাড়া deploy করা। →
"আমার machine-এ চলছিল" সমস্যা তৈরি হবে (Docker episode-এ সমাধান)।
ভুল ৫: monitoring ছাড়া deploy করে ভুলে যাওয়া। →
model নীরবে খারাপ হতে থাকে, কেউ টের পায় না।
🎤 ১৩. Interview Prep
প্রশ্ন ১: "একটা trained model কীভাবে production-এ নেবে?"
উত্তর: model save (joblib/torch.save) → পরিষ্কার Python package → FastAPI serving layer → dependency
lock → Docker → cloud deploy → monitoring। ধাপে ধাপে বলা।
প্রশ্ন ২: "training আর inference-এর পার্থক্য কী?"
উত্তর: training = data থেকে model শেখানো (ভারী, একবার/মাঝে মাঝে); inference = শেখা model দিয়ে
prediction (হালকা, বারবার, দ্রুত)। Production-এ মূলত inference চলে।
প্রশ্ন ৩: "কেন notebook production-এ ব্যবহার করা যায় না?"
উত্তর: hidden state, manual execution, শুধু local access, no reliability/scale/monitoring —
তাই এটাকে একটা service-এ রূপ দিতে হয়।
প্রশ্ন ৪: "Model আর production system কি একই জিনিস?"
উত্তর: না। Model একটা component; production system = model + API + environment + deploy + monitoring।
✍️ ১৪. হাতে-কলমে
Mini exercise:
১. তোমার আগের যেকোনো ML notebook নাও (যেমন Series 05-এর churn model)।
২. Kernel restart → "Run All" দাও। কোনো cell fail করে? কেন? (এটাই hidden state-এর প্রমাণ)।
৩. Model-টা joblib.dump(model, "model.pkl") দিয়ে save করো।
৪. নতুন একটা খালি notebook-এ শুধু joblib.load("model.pkl") করে একটা নতুন input-এ
prediction দাও — train না করেই। এটাই inference-এর প্রথম স্বাদ।
৫. এক লাইনে লেখো: "আমার model-টা কে ব্যবহার করবে আর কীভাবে reach করবে?"
🚀 ১৫. Project Connection: flagship-কে service বানানোর যাত্রা শুরু
আমাদের flagship "Bangladesh Tech Career Assistant" এতক্ষণে অনেক দূর এসেছে —
V1 CLI, V2 data analysis, V3 ML model, তারপর NLP/LLM/RAG (V5–V7)। কিন্তু এখনো এটা মূলত script আর
notebook-এ বাস করে। এই Series-এ আমরা একে V8 (FastAPI) → V9 (Docker) → V10 (cloud + monitoring)
পর্যন্ত নিয়ে যাব।
আজকের কাজ: flagship-এর যে অংশটা "job description থেকে skill বের করে / role predict করে", সেটাকে চিহ্নিত
করো — এটাই হবে আমাদের প্রথম inference endpoint। পরের episode-এ এটাকে FastAPI দিয়ে
একটা real API বানাব (Project P9-এর ভিত্তি)।
📌 ১৬. সারসংক্ষেপ
এই episode-এ আমরা শিখলাম:
✓ model.fit() কাজের শেষ নয়, শুরু — production-এ ওখান থেকেই আসল engineering
✓ notebook = personal experiment; production system = নির্ভরযোগ্য সেবা যা তুমি ঘুমালেও চলে
✓ training ≠ inference — production-এ মূলত inference চলে (একবার train, বারবার load)
✓ model ≠ production system — model একটা component মাত্র
✓ পথটা: Notebook → Package → FastAPI → Docker → Cloud → Monitoring → Business Value
✓ এই skill বাংলাদেশের job market-এ তোমাকে অন্য candidate থেকে আলাদা করে
➡️ ১৭. পরের পর্বে কী শিখব
পরের episode-এ আমরা হাতে-কলমে FastAPI দিয়ে model serving শিখব — একটা saved model load
করে, Pydantic দিয়ে input validate করে, একটা /predict REST endpoint বানাব। মানে Rahim-এর
notebook অবশেষে একটা এমন API হবে, যেটা marketing team বা যেকোনো app HTTP দিয়ে ব্যবহার করতে পারবে।
এটাই আমাদের Project P9 (Production AI API)-এর প্রথম ধাপ।