Home »
Blog »
AI/ML Engineer সিরিজ » Series 09 » Episode 09
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-এর ৩ মাসের যাত্রা এক ছবিতে
- ২. আমরা কোথা থেকে কোথায় এলাম
- ৩. সম্পূর্ণ architecture — এক নজরে
- ৪. Stage 1: Notebook → পরিষ্কার Package
- ৫. Stage 2: Package → FastAPI service
- ৬. Stage 3: Config, Logging, Auth, Caching
- ৭. Stage 4: Docker container
- ৮. Stage 5: Cloud deployment
- ৯. Stage 6: MLOps — tracking, versioning, monitoring
- ১০. সম্পূর্ণ repository structure (P10)
- ১১. Bangladesh real-world: এটাই তোমার আসল portfolio
- ১২. AI Engineer perspective: এখন তুমি কী বলতে পারো
- ১৩. Boss Question
- ১৪. System Design প্রশ্নের জন্য প্রস্তুতি
- ১৫. সাধারণ ভুল (পুরো journey জুড়ে)
- ১৬. Interview Prep
- ১৭. হাতে-কলমে: তোমার নিজের P10
- ১৮. সারসংক্ষেপ ও Series 10-এর দিকে
🎬 ১. গল্প: 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 |
| E01 | production mindset (notebook ≠ product) | — |
| E02 | FastAPI serving (REST API) | V8 |
| E03 | package, config, logging, secrets | V8+ |
| E04 | auth, caching, rate limiting | V8++ |
| E05 | Docker container | V9 |
| E06 | cloud deploy, CPU/GPU, latency/cost | V9+ |
| E07 | MLflow tracking, registry, DVC | V10 |
| E08 | monitoring, drift, retraining, CI/CD | V10+ |
| E09 | সব একসাথে — P10 production platform | V10 ✅ |
🏗️ ৩. সম্পূর্ণ 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
- Config (E03): threshold, model path, log level — সব
settings থেকে; কোডে hard-code নেই।
- Secrets (E03): LLM/embedding API key
.env-এ, Git-এ নয়।
- Logging (E03):
print() নেই; structured log সহ level control।
- Auth (E04):
X-API-Key header — অচেনা কেউ ব্যবহার করতে পারে না।
- Caching (E04): একই JD আবার এলে LLM call না করে cache থেকে — টাকা ও সময় বাঁচে।
- Rate limiting (E04): এক client সব resource দখল করতে পারে না।
🐳 ৭. 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
- Docker image → registry → PaaS (Render/Fly)-এ deploy (E06) → public HTTPS URL।
- Secrets platform-এর env var-এ (কোডে/image-এ নয়)।
- Inference CPU-তেই চলছে — কারণ classical ML + LLM API call, GPU লাগে না (খরচ কম, E06)।
- Latency মাপা হচ্ছে, common query cached — দ্রুত ও সাশ্রয়ী।
📊 ৯. Stage 6: MLOps — tracking, versioning, monitoring
- MLflow (E07): প্রতিটা model run-এর param/metric/artifact tracked; best-টা registry-তে Production tag।
- DVC (E07): training data versioned — যেকোনো model reproduce করা যায়।
- Monitoring + drift (E08): input/prediction log, distribution তুলনা করে drift ধরা।
- Retraining (E08): drift ধরলে নতুন data দিয়ে retrain → track → register → redeploy।
এই ৬টা 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" — তুমি এখন এই কাঠামোতে উত্তর দিতে পারো:
- Requirement: কে ব্যবহার করবে, কত load, latency target, CPU না GPU?
- Serving: model → FastAPI → (batch?) → auth + rate limit।
- Performance/cost: caching, right-sizing, ছোট model।
- Packaging/deploy: Docker → registry → cloud → HTTPS।
- MLOps: experiment tracking, model/data versioning, registry।
- 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 — শুধু সেটা প্রমাণ করা বাকি।