রোডম্যাপ
PHASE 8 · অধ্যায় 38

মডেল ডিপ্লয়মেন্ট

Model Deployment

Docker, Cloud — model কে users এর কাছে পৌঁছানো।

ভূমিকা

Local এ FastAPI চলছে — কিন্তু users কোথা থেকে access করবে? Server লাগবে, OS dependency match করতে হবে, Python version মিলবে কিনা — অনেক সমস্যা। Docker সব pack করে একটা container এ — 'work on my machine' problem গায়েব। AWS/GCP/Azure এ deploy করে users এর কাছে।

ধারণা

Model Deployment = trained model কে production environment এ run করা যেন real user access করতে পারে। Stack: (1) Containerize — Docker দিয়ে env + dependency + model একসাথে, (2) Orchestrate — Kubernetes/ECS/Cloud Run, (3) Serve — Cloud (AWS SageMaker, GCP Vertex AI, HuggingFace Inference Endpoint), (4) Monitor — uptime, latency, error rate।

সহজ ব্যাখ্যা

ভাবুন আপনি একটা restaurant chain বানাচ্ছেন — প্রতিটা branch এ same kitchen setup দরকার (Docker = standardized kitchen)। Manager (Kubernetes) decide করে কোন branch এ কত chef রাখতে হবে demand অনুযায়ী। Customer (user) HTTPS এর মাধ্যমে order করে — backend এ Docker container এ model serve হয়, response ফেরত যায়।

বাস্তব ব্যবহার

  • OpenAI API — Kubernetes এ massive GPU cluster।
  • HuggingFace Inference Endpoint — managed Docker deployment।
  • Self-hosted: AWS EC2 + Docker + Nginx।
  • Edge deployment: ONNX, Core ML, mobile inference।
  • Serverless: AWS Lambda + EFS এ small model।

ধাপে ধাপে বিশ্লেষণ

1
Step 1 — Dockerfile লিখুন
Base image + dependencies + code + CMD।
2
Step 2 — Local build + test
docker build, docker run, curl test।
3
Step 3 — Registry তে push
Docker Hub, ECR, GCR।
4
Step 4 — Cloud এ deploy
Cloud Run / ECS / Kubernetes manifest।
5
Step 5 — HTTPS + Domain
Load balancer + SSL cert।
6
Step 6 — CI/CD
GitHub Actions দিয়ে auto deploy on push।

Python কোড

# Dockerfile
FROM python:3.11-slim

WORKDIR /app

# System deps (for some HuggingFace tokenizers)
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential git && rm -rf /var/lib/apt/lists/*

# Install Python deps first (better cache)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Pre-download model at build time (faster cold start)
RUN python -c "from transformers import pipeline; pipeline('sentiment-analysis')"

# Copy app code
COPY . .

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]

# ---- requirements.txt ----
# fastapi==0.115.0
# uvicorn[standard]==0.32.0
# transformers==4.45.0
# torch==2.4.0
# pydantic==2.9.0

# ---- Build + Run ----
# docker build -t nlp-api:v1 .
# docker run -p 8000:8000 nlp-api:v1

# ---- Deploy to Google Cloud Run ----
# gcloud builds submit --tag gcr.io/PROJECT/nlp-api:v1
# gcloud run deploy nlp-api --image gcr.io/PROJECT/nlp-api:v1 \
#   --memory 4Gi --cpu 2 --port 8000 --allow-unauthenticated
ব্যাখ্যা

Dockerfile python:3.11-slim base — lightweight। requirements আগে copy + install (Docker layer cache), পরে code copy। Model build time এ pre-download — first request slow হবে না। uvicorn 2 worker দিয়ে parallel request handle। Cloud Run এ deploy করলে auto-scale, HTTPS free।

সাধারণ ভুল

  • Model runtime এ download — first request 30+ second।
  • Image size huge (5GB+) — slim base + multi-stage build দরকার।
  • .dockerignore না দেওয়া — venv, .git copy হয়।
  • GPU dependency CPU image এ — runtime crash।
  • Secrets Dockerfile এ hardcode — security disaster।

অনুশীলন

  1. Multi-stage Dockerfile লিখে image size কমান।
  2. Docker Compose দিয়ে API + Redis + Postgres স্ট্যাক।
  3. GitHub Actions দিয়ে CI/CD pipeline।
  4. AWS Lambda container দিয়ে serverless deploy।

ছোট প্রজেক্ট

Dockerized NLP Service on Cloud Run

Chapter 37 এর FastAPI app কে dockerize করুন, Docker Hub এ push, Google Cloud Run এ deploy। Public HTTPS URL পেয়ে curl দিয়ে test। README তে deployment steps document।

সারাংশ

  • Deployment = model কে users এর কাছে পৌঁছানো।
  • Docker দিয়ে env/dependency standardize।
  • Cloud Run / ECS / K8s — orchestration choice।
  • Pre-download model, multi-stage build, secrets manager।
  • CI/CD দিয়ে continuous deployment automate।