Batch বনাম Online inference
এই পাঠে যা শিখবেন
- Batch ও online inference-এর pros/cons
- Cost comparison framework
- "Near-real-time" middle ground patterns
- Bangladesh use case mapping
১ · Two ends of spectrum
Batch ও online — same model, vastly different infrastructure।
- Batch example: Daraz রাতে সব user-এর recommendation pre-compute। Spark job। Result Postgres-এ stored। Web request → DB lookup, no model call।
- Online example: bKash transaction → real-time fraud check। FastAPI → model → response 50ms-এ।
২ · Trade-off matrix
- Latency: batch hours; online ms।
- Cost per prediction: batch much cheaper (no idle, parallel)।
- Always-on infra cost: batch zero between runs; online 24×7।
- Freshness: batch stale up to refresh interval; online instant।
- Operational: batch simpler (no SLA stress); online complex (autoscale, monitoring)।
- Failure recovery: batch rerun OK; online incidents user-facing।
৩ · Cost comparison
$$ \text{Cost}_{\text{online}} = \text{server\_cost\_per\_hour} \times 24 \times 30 \times \text{replicas} $$
$$ \text{Cost}_{\text{batch}} = \text{compute\_per\_run} \times \text{runs\_per\_month} $$
Example: 1M users predict monthly।
- Online: 3 pods × $50/month each = $150। Always-on।
- Batch: Spark cluster ৩ ঘণ্টা × $5/hour × 30 runs (daily) = $450। Or weekly = $60।
- For 1M predictions/month — batch weekly cheapest, but freshness 7 days।
৪ · "Near-real-time" — middle ground
Many use case-এ "exact real-time" overkill, "daily batch" too stale।
- Mini-batch every 5 minutes: Spark Streaming, Flink।
- Pre-compute + override: daily batch baseline, real-time signal overlay।
- Lambda architecture: batch + speed layer combined।
৫ · When batch is right
- "All users at once" — recommendation, segment, score।
- Latency relaxed (24h-7d staleness OK)।
- Predictable volume — easy to size Spark।
- Cost-conscious, GPU expensive online।
- Result consumed asynchronously (email, dashboard)।
৬ · When online is right
- Per-request, user-context-dependent।
- Freshness critical — real-time signal matter।
- Low SLA latency (<100ms)।
- Personalization heavy।
- Fraud/security — instant decision needed।
৭ · Hybrid common
Production reality often blend।
- Recommendation: batch nightly + online re-rank।
- Search: pre-computed embeddings + real-time scoring।
- Fraud: online check + batch periodic deep audit।
৮ · Batch implementation example
import pandas as pd
from sqlalchemy import create_engine
import joblib
# 1. Load model
model = joblib.load("models/recommendation-v2.joblib")
# 2. Load all users (chunked for memory)
engine = create_engine("postgresql://...")
chunk_size = 100_000
predictions_total = []
for chunk in pd.read_sql_query(
"SELECT user_id, * FROM user_features", engine, chunksize=chunk_size
):
# 3. Predict in batch (much faster than per-row)
scores = model.predict_proba(chunk.drop(columns=["user_id"]))[:, 1]
chunk_pred = pd.DataFrame({
"user_id": chunk["user_id"],
"score": scores,
"model_version": "v2.0",
"prediction_date": pd.Timestamp.now(),
})
predictions_total.append(chunk_pred)
# 4. Persist
result = pd.concat(predictions_total)
result.to_sql("user_predictions", engine, if_exists="replace", index=False)
print(f"✓ {len(result)} predictions stored")
ভাবনার প্রশ্ন
প্র ০১"Cost calculator — concrete BD scenario।"
Bangladesh e-commerce — 5M users, daily recommendation।
Online scenario:
- Average ৫০ recommendation requests/user/day = ২৫০M predictions/day।
- p99 latency ১০০ms; ৩০ pods × ১,০০০ RPS = ৩০,০০০ RPS capacity।
- Pod cost: $৫০/month × ৩০ = $১,৫০০/month = ~১.৭ লাখ BDT।
Batch scenario:
- 5M users × 100 candidate items each = 500M predictions/day।
- Spark cluster: ১০ nodes × ৩ hours × $২/hour = $৬০/day = $১,৮০০/month।
- Result store: Postgres/Redis ~$১০০/month।
- Total: ~$১,৯০০ = ~২.২ লাখ BDT।
Hybrid (most realistic):
- Batch nightly (cheap baseline)।
- Online re-rank top-10 with real-time context (small online cost)।
- Total: ~$১,২০০/month — best of both।
Insights:
- Online cheaper at LOW request volume (idle waste matters)।
- Batch wins at HIGH volume (parallel efficiency)।
- Hybrid usually wins comprehensively।
মূল উপলব্ধি: Cost depends not just compute, but request profile। Always-on infra-এর idle cost batch-এ আসে না। Hybrid often dominates pure choice।
প্র ০২"Cold cache — batch result yet পৌঁছায়নি; কীভাবে handle?"
Batch architecture-এ classic problem।
Scenario:
- New user signed up at 11 AM।
- Batch ran last night 2 AM।
- Recommendation cache empty for this user।
Handling strategies:
- Default fallback: popular items, all-user trending।
- Cohort-based fallback: "users like you" — based on signup attributes।
- Online fallback: miss cache → online inference real-time।
- Async backfill: trigger batch for new user immediately।
Production pattern:
- Tier 1: cached batch result।
- Tier 2: online inference for cache miss।
- Tier 3: hard-coded fallback (most popular)।
BD example — Daraz signup:
- 0-1 min after signup: top-10 platform popular।
- 1-30 min: cohort-based (similar profiles)।
- After first batch refresh (within 24h): personalized।
Monitoring:
- Cache miss rate metric।
- Fallback usage trend — sudden spike = batch issue।
মূল উপলব্ধি: Batch staleness expected; gracefully degrade। Multi-tier fallback essential। User never sees blank।
প্র ০৩"Batch warming online baseline — useful?"
Hybrid pattern — batch result-কে online cache hot-load করা।
Pattern:
- Batch nightly compute baseline scores।
- Online service startup-এ Redis-এ load।
- Real-time event update Redis incrementally।
- API: real-time-ifs-fresh, fallback-batch।
Benefits:
- Cold start fast (Redis pre-loaded)।
- Real-time updates during day।
- Best baseline + best freshness।
Complexity:
- Two pipelines maintain।
- Cache invalidation careful।
- Schema match across both।
BD example — Pathao surge:
- Batch hourly: zone-level demand baseline।
- Streaming: real-time ride event update।
- Inference time: combine both।
মূল উপলব্ধি: Lambda architecture practical for ML। Batch foundation + streaming live + serving combine = production-grade।
প্র ০৪"Migration — batch থেকে online; কখন trigger?"
Pattern migration triggered by clear signal।
Batch → Online signals:
- User feedback — "stale recommendations"।
- A/B test — fresher data variant wins।
- Real-time signal underutilized — recent click impacts conversion massively।
- Per-context personalization need (different result for same user, different time)।
Online → Batch signals:
- Cost analysis — idle cost too high।
- Latency relaxed — staleness acceptable for some use cases।
- Volume burst — batch better at peak।
Migration strategy:
- Don't all-at-once। Hybrid period।
- New use case — try better pattern first।
- Existing well-running — don't touch।
Cost of migration:
- Different infrastructure।
- Different observability।
- Team retraining।
- Data flow rework।
- Rule of thumb: 2-4 engineer-month for non-trivial migration।
মূল উপলব্ধি: Migration triggered by clear cost/latency signal — not preference। Yearly architecture review healthy practice।
অনুশীলন
- Calculate: আপনার (real or imagined) ML use case-এর batch vs online cost।
Volume × cost-per-prediction + always-on infra → comparison। Hybrid often dominant।
- Design: Foodpanda-র "delivery time prediction" — batch, online, hybrid?
Hybrid: batch driver/restaurant base profiles; online real-time traffic + weather signal। Combine at request time।
- চিন্তা: 5-tier fallback strategy bKash fraud-এর জন্য।
- Tier 1: real-time online model।
- Tier 2: cached recent prediction (minutes old)।
- Tier 3: rule-based override।
- Tier 4: amount-based threshold।
- Tier 5: human review queue।