'model.fit() হলো, এখন কী?' — Notebook production না, এই ফারাকটা বোঝো

production mindset (Series 09, Episode 01)

🟢 BEGINNER Series 09 — Notebook থেকে Production AI Episode 01 / 09

📑 এই পর্বে যা যা আছে

🎬 ১. গল্প: 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 চাপবে না
Ordercell যেকোনো ক্রমে চালানো যায়hidden state — একই notebook দু'বার ভিন্ন ফল দেয়
Accessশুধু তোমার machine-এঅন্য app/service reach করতে পারে না
Reliabilityerror এলে তুমি দেখোরাত ৩টায় crash করলে কে জানবে?
Scaleএকজন (তুমি)একসাথে ১০০০ request এলে?
Reproducibility"আমার machine-এ চলে"অন্য server-এ library version মেলে না
গুরুত্বপূর্ণ distinction — traininginference:
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-টা খোলো, আর নিজেকে এই প্রশ্নগুলো করো:

বেশিরভাগ "না" হলে — চিন্তার কিছু নেই। এই Series-এর শেষে সব "হ্যাঁ" হবে।

🇧🇩 ৮. বাংলাদেশের বাস্তবতা: কেন এই skill দিয়ে আলাদা হওয়া যায়

বাংলাদেশে অসংখ্য fresh candidate Kaggle notebook দেখাতে পারে — accuracy, plot, confusion matrix। কিন্তু খুব কম candidate একটা model-কে API বানিয়ে deploy করে দেখাতে পারে। এখানেই তুমি আলাদা হয়ে যাও।

👷 ৯. 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 করি:
  1. কী বোঝায়? notebook-এর model-কে এমন একটা চলমান system বানানো যা user/অন্য service ব্যবহার করতে পারে (সাধারণত API হিসেবে, deploy করা অবস্থায়)।
  2. কেন চায়? কারণ deploy না হলে model থেকে কোম্পানির কোনো লাভ নেই — শুধু খরচ।
  3. কোন সমস্যা সমাধান করে? "model তো আছে, কিন্তু কাজে লাগানো যাচ্ছে না" — এই gap।
  4. Junior-এর কী জানা লাগে? model save/load, একটা FastAPI endpoint বানানো, requirements lock করা, বেসিক Docker, আর একটা free cloud-এ deploy করে দেখানো।
  5. এখনই কী master লাগে না? Kubernetes autoscaling, multi-region, GPU cluster, advanced model serving (Triton/BentoML) — এগুলো পরে/চাকরিতে।
  6. GitHub-এ কীভাবে দেখাবে? একটা repo যেখানে train.py, app.py (FastAPI), Dockerfile, README-তে live demo link ও curl example।
  7. 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)-এর প্রথম ধাপ।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.