Flagship transformation: Notebook → Package → FastAPI → Docker → Cloud → Monitoring

Project P10 — production platform (Series 09, Episode 09)

🔴 ADVANCED Series 09 — Notebook থেকে Production AI Episode 09 / 09

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

🎬 ১. গল্প: Rahim-এর ৩ মাসের যাত্রা এক ছবিতে

তিন মাস আগে Rahim গর্বের সাথে লিখেছিল "Model ready! ৮৭% accuracy!" — আর তার model তার laptop-এর notebook-এ বন্দি ছিল। আজ সে Boss-কে একটা link পাঠাল:

"Boss, এই যে আমাদের Career Assistant — https://career-assistant.onrender.com। marketing team তাদের dashboard থেকে ব্যবহার করছে, API key দিয়ে সুরক্ষিত, common query cached, Docker-এ চলছে তাই যেকোনো server-এ deploy হয়, MLflow-তে সব model tracked, আর monitoring বলে দিচ্ছে কখন retrain লাগবে।"

Maya চুপচাপ হাসল। এই এক প্যারাগ্রাফটাই Rahim-কে একজন "model বানানো ছেলে" থেকে একজন production AI engineer-এ রূপান্তরিত করেছে। আজকের episode সেই পুরো যাত্রাটা এক জায়গায় জোড়া লাগানো।

🔄 ২. আমরা কোথা থেকে কোথায় এলাম

Episodeযা যোগ হলোflagship version
E01production mindset (notebook ≠ product)
E02FastAPI serving (REST API)V8
E03package, config, logging, secretsV8+
E04auth, caching, rate limitingV8++
E05Docker containerV9
E06cloud deploy, CPU/GPU, latency/costV9+
E07MLflow tracking, registry, DVCV10
E08monitoring, drift, retraining, CI/CDV10+
E09সব একসাথে — P10 production platformV10 ✅

🏗️ ৩. সম্পূর্ণ architecture — এক নজরে

[ Client: Dashboard / App / Phone ] | HTTPS + API key v ┌───────────────────────────────────────────────┐ │ Cloud Platform (Docker container চলছে) │ │ │ │ FastAPI service │ │ ├── /health (monitoring probe) │ │ ├── /analyze (auth + rate limit) │ │ │ | │ │ │ ├─> Cache (Redis) --HIT--> দ্রুত উত্তর │ │ │ └─> MISS: model/LLM inference │ │ │ | │ │ │ └─> log(input, prediction) │ │ └── config/secrets <- env vars │ └───────────────────────────────────────────────┘ | | v v [ Model Registry (MLflow) ] [ Prediction logs ] ^ | | v [ Retrain: DVC data + [ Monitoring + Drift check ] MLflow track ] <----alert----------┘

এই একটা ছবিই এখন তুমি একটা whiteboard-এ এঁকে interview-তে "production ML system" ব্যাখ্যা করতে পারবে।

📦 ৪. Stage 1: Notebook → পরিষ্কার Package

যাত্রা শুরু হয় messy notebook-কে function/module-এ ভাগ করে (E03):

# আগে (notebook): সব এক জায়গায়, hidden state, শুধু নিজের জন্য # পরে (package): প্রতিটা দায়িত্ব আলাদা module-এ # app/model.py import joblib def load_model(path: str): return joblib.load(path) def analyze_jd(model, jd_text: str) -> dict: # preprocessing + inference (train-এর হুবহু একই preprocessing) skills = extract_skills(jd_text) role = model.predict([vectorize(jd_text)])[0] return {"skills": skills, "probable_role": role}
মূল শিক্ষা: inference logic-কে একটা পরিষ্কার function-এ আলাদা করা — যাতে API, test, ও batch job সবাই একই function ব্যবহার করে (training-serving skew এড়ানো)।

🌐 ৫. Stage 2: Package → FastAPI service

# app/main.py — সেই function-কে API দিয়ে wrap from fastapi import FastAPI, Depends from app.config import settings from app.model import load_model, analyze_jd from app.schemas import JobDescription, Analysis from app.auth import verify_api_key app = FastAPI(title="Bangladesh Tech Career Assistant") model = load_model(settings.model_path) # startup-এ একবার @app.get("/health") def health(): return {"status": "ok"} @app.post("/analyze", response_model=Analysis, dependencies=[Depends(verify_api_key)]) def analyze(jd: JobDescription): return analyze_jd(model, jd.text)

🔧 ৬. Stage 3: Config, Logging, Auth, Caching

🐳 ৭. Stage 4: Docker container

# Dockerfile (E05) — সংক্ষেপে FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY ./app ./app COPY ./models ./models EXPOSE 8000 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

+ docker-compose.yml দিয়ে API + Redis একসাথে (E05)। এখন "works on my machine" সমস্যা শেষ।

☁️ ৮. Stage 5: Cloud deployment

📊 ৯. Stage 6: MLOps — tracking, versioning, monitoring

এই ৬টা stage একসাথে = একটা জীবন্ত, নিরাপদ, সাশ্রয়ী, নির্ভরযোগ্য, reproducible AI system। এটাই "production AI"।

📁 ১০. সম্পূর্ণ repository structure (P10)

career-assistant/ ├── app/ │ ├── main.py # FastAPI routes │ ├── config.py # pydantic-settings │ ├── schemas.py # Pydantic in/out │ ├── model.py # load + analyze_jd (inference) │ ├── auth.py # API key │ ├── cache.py # Redis caching │ └── logging_conf.py # structured logging ├── training/ │ ├── train.py # MLflow tracked training │ └── evaluate.py # model validation ├── monitoring/ │ └── drift_check.py # reference vs live ├── models/ # (ছোট artifact; বড় হলে registry/DVC) ├── data/ # DVC-tracked (pointer only) ├── tests/ │ ├── test_api.py │ └── test_model.py # ML-specific: min accuracy ├── Dockerfile ├── docker-compose.yml ├── .env.example ├── .gitignore ├── requirements.txt ├── .github/workflows/ci.yml # CI: test + build + deploy └── README.md # architecture diagram + demo link
এই structure-টাই তোমার GitHub-এ থাকলে recruiter এক নজরে বোঝে — তুমি শুধু model বানাও না, তুমি ship করতে পারো। এটাই Series 10-এর portfolio-র মূল অস্ত্র।

🇧🇩 ১১. Bangladesh real-world: এটাই তোমার আসল portfolio

বাংলাদেশের interview-তে হাজারো candidate Kaggle notebook বা "৯০% accuracy" দেখায়। কিন্তু যখন তুমি একটা live URL দাও, একটা Dockerfile দেখাও, একটা architecture diagram এঁকে বোঝাও "কীভাবে auth, caching, monitoring কাজ করে" — তখন তুমি আর সাধারণ candidate থাকো না। Enosis, BJIT, Brain Station 23, বা যেকোনো serious AI team ঠিক এই deployment ও engineering maturity খোঁজে। একটা deployed project দশটা notebook-এর চেয়ে বেশি ওজন বহন করে।

👷 ১২. AI Engineer perspective: এখন তুমি কী বলতে পারো

এই Series শেষে তুমি সততার সাথে বলতে পারো —
✓ "আমি একটা model-কে FastAPI দিয়ে API বানাতে পারি"
✓ "আমি config ও secret নিরাপদে সামলাই, structured logging করি"
✓ "আমি API-তে auth, caching, rate limiting যোগ করতে পারি"
✓ "আমি service Docker-এ প্যাক করে cloud-এ deploy করতে পারি"
✓ "আমি জানি কখন CPU যথেষ্ট, কখন GPU লাগে, আর latency/cost কীভাবে ভাবতে হয়"
✓ "আমি MLflow-তে experiment track করি, model version করি"
✓ "আমি জানি model নীরবে খারাপ হয়, আর monitoring/drift/retraining দিয়ে সেটা সামলাই"

💼 ১৩. Boss Question

💼 Boss: "তিন মাস আগের সেই notebook আর আজকের এই system — আমার business-এর জন্য পার্থক্যটা এক লাইনে বলো।"

উত্তর: তিন মাস আগে model ছিল একটা খরচ — শুধু আমার laptop-এ বসে থাকত, কেউ ব্যবহার করতে পারত না। আজ এটা একটা চলমান business capability — marketing, app, যে কেউ ২৪/৭ ব্যবহার করছে, নিরাপদ, সাশ্রয়ী, আর খারাপ হলে আমরা আগেই টের পাই। মানে model এখন সরাসরি টাকা তৈরি ও বাঁচাতে কাজ করছে, শুধু একটা সুন্দর accuracy সংখ্যা নয়।

🧩 ১৪. System Design প্রশ্নের জন্য প্রস্তুতি

Interview-তে জিজ্ঞেস করলে "Design a production ML system" — তুমি এখন এই কাঠামোতে উত্তর দিতে পারো:

  1. Requirement: কে ব্যবহার করবে, কত load, latency target, CPU না GPU?
  2. Serving: model → FastAPI → (batch?) → auth + rate limit।
  3. Performance/cost: caching, right-sizing, ছোট model।
  4. Packaging/deploy: Docker → registry → cloud → HTTPS।
  5. MLOps: experiment tracking, model/data versioning, registry।
  6. Reliability: monitoring (system + model), drift detection, retraining, CI/CD।
এই ৬টা bullet মুখস্থ থাকলে যেকোনো "production ML/RAG/chatbot design করো" প্রশ্নে তুমি একটা পরিষ্কার, engineer-সুলভ উত্তর দিতে পারবে। Series 10-এ আমরা এটা আরও গভীরে practice করব।

⚠️ ১৫. সাধারণ ভুল (পুরো journey জুড়ে)

ভুল ১: notebook-এ থেমে যাওয়া। → deploy পর্যন্ত নিয়ে যাও, তবেই portfolio মূল্যবান।

ভুল ২: সব একসাথে perfect করার চেষ্টা। → ধাপে ধাপে (এই Series-এর মতো) এগোও।

ভুল ৩: secret/monitoring "পরে দেখব" বলে skip করা। → এগুলোই production-এ সবচেয়ে বেশি সমস্যা করে।

ভুল ৪: over-engineering — junior project-এ Kubernetes/GPU টেনে আনা। → দরকার অনুযায়ী রাখো।

ভুল ৫: README-তে live demo link ও architecture diagram না দেওয়া। → recruiter সেটাই আগে দেখে।

🎤 ১৬. Interview Prep

প্রশ্ন ১: "একটা notebook model-কে production-এ নেওয়ার পুরো পথ বলো।"
উত্তর: package → FastAPI → config/secret/logging → auth/cache → Docker → cloud → MLflow tracking/registry → monitoring/drift/retrain।

প্রশ্ন ২: "একটা production ML system design করো।"
উত্তর: উপরের ৬-bullet framework (requirement → serving → cost → deploy → MLOps → reliability)।

প্রশ্ন ৩: "তোমার সবচেয়ে ভালো project কোনটা, ব্যাখ্যা করো।"
উত্তর: এই flagship — live URL, Docker, auth, caching, MLflow, monitoring; সমস্যা→সমাধান→ফল গল্পে বলো।

প্রশ্ন ৪: "model vs production system?"
উত্তর: model একটা component; production system = model + API + deploy + MLOps + monitoring।

✍️ ১৭. হাতে-কলমে: তোমার নিজের P10

Capstone exercise (Project P10):
১. তোমার যেকোনো একটা model (churn/house price/JD analyzer) নিয়ে উপরের repo structure বানাও।
২. অন্তত এই ধাপগুলো সম্পন্ন করো: FastAPI + config/secret + Docker + একটা free cloud-এ deploy (live URL)।
৩. যোগ করো: API key auth, একটা cache, prediction logging।
৪. MLflow দিয়ে অন্তত ৩টা experiment track করে best model নাও।
৫. README-তে দাও: architecture diagram (উপরেরটার মতো), live demo link, curl example, "কীভাবে চালাবে"।
৬. এটাই হবে তোমার portfolio-র flagship — Series 10-এ আমরা এটাকে CV ও interview-তে কীভাবে উপস্থাপন করবে শেখাব।

📌 ১৮. সারসংক্ষেপ ও Series 10-এর দিকে

এই Series 09-এ আমরা Rahim-এর notebook-কে একটা সম্পূর্ণ production platform বানালাম:
✓ Notebook → Package → FastAPI → Docker → Cloud → MLOps/Monitoring
✓ নিরাপত্তা (auth, secret), গতি ও খরচ (cache, CPU/GPU), reproducibility (MLflow/DVC), নির্ভরযোগ্যতা (monitoring/drift)
✓ একটা recruiter-ready repo structure ও live demo — Project P10
✓ System design প্রশ্নের একটা পরিষ্কার framework
এটাই সেই skill যা তোমাকে "AI শিখছি" থেকে "আমি production AI application বানাতে পারি"-তে নিয়ে এল। পরের ও শেষ Series — Series 10: AI/ML Engineer হিসেবে চাকরি পাওয়া — এ আমরা এই সব কাজকে CV, GitHub portfolio, ও interview-তে কীভাবে রূপান্তর করে চাকরি পাওয়ার জন্য প্রস্তুত হবে, সেটা শিখব। তুমি এখন প্রায় job-ready — শুধু সেটা প্রমাণ করা বাকি।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.