Home »
Blog »
AI/ML Engineer সিরিজ » Series 06 » Episode 08
PyTorch বনাম TensorFlow/Keras: কখন কোনটা, industry কী চায়
model save/load ও inference (Series 06, Episode 08)
🟢 BEGINNER
Series 06 — Deep Learning with PyTorch
Episode 08 / 08
📑 এই পর্বে যা যা আছে
- ১. গল্প: "TensorFlow শিখব নাকি PyTorch?"
- ২. দুটোই কী করে — মূলত একই কাজ
- ৩. PyTorch বনাম TensorFlow/Keras — সৎ তুলনা
- ৪. Industry বাংলাদেশে কী চায়?
- ৫. একই MLP: PyTorch বনাম Keras (পাশাপাশি)
- ৬. Model save/load — সবচেয়ে জরুরি production skill
- ৭. Inference: training শেষ, এখন ব্যবহার
- ৮. Visual: train → save → load → inference
- ৯. ONNX — framework-এর গণ্ডি পেরোনো (আভাস)
- ১০. বাংলাদেশের বাস্তব উদাহরণ
- ১১. Boss Question
- ১২. Job Requirement Decoder
- ১৩. সাধারণ ভুল ধারণা
- ১৪. Interview Prep
- ১৫. হাতে-কলমে
- ১৬. Series 06 সারসংক্ষেপ ও পরবর্তী Series
🧩 ১. গল্প: "TensorFlow শিখব নাকি PyTorch?"
Series 06-এর শেষ প্রান্তে Rahim একটা দুশ্চিন্তায় — LinkedIn-এ কিছু job-এ "PyTorch", কিছুতে "TensorFlow",
কিছুতে "Keras" লেখা। সে ভাবছে, "আমি তো PyTorch শিখলাম, TensorFlow না জানলে কি চাকরি পাব না?"
Rahim: "আপা, দুটোই কি আলাদা করে শিখতে হবে? সময় তো কম।"
Maya: "না। মূল ধারণাগুলো — tensor, layer, loss, gradient descent, training loop — দুটোতেই এক।
তুমি যেটা গভীরে শিখেছ (PyTorch), সেটার concept জানলে TensorFlow-তে সুইচ করা কয়েক দিনের ব্যাপার।
আজ আমরা পার্থক্যগুলো দেখব, আর সবচেয়ে জরুরি production skill শিখব — model save, load আর inference।
কারণ train করা model যদি সেভ করে আবার চালাতে না পারো, সেটা তো deploy-ই হবে না।"
⚖️ ২. দুটোই কী করে — মূলত একই কাজ
PyTorch আর TensorFlow — দুটোই Deep Learning framework। দুটোই দেয়: GPU-সমর্থিত tensor, automatic
differentiation (gradient), layer/optimizer/loss-এর tools। মানে এই সিরিজে যা শিখলেন (neuron, activation,
backprop, training loop, CNN, transfer learning) — সব ধারণাই দুই জায়গায় প্রযোজ্য। শুধু syntax আলাদা।
মনে রাখবেন: framework একটা হাতিয়ার, ধারণা নয়। concept জানলে হাতিয়ার বদলানো সহজ।
Interview-তে recruiter দেখে আপনি DL বোঝেন কিনা, শুধু একটা library-র API মুখস্থ কিনা তা নয়।
🔍 ৩. PyTorch বনাম TensorFlow/Keras — সৎ তুলনা
| দিক | PyTorch | TensorFlow / Keras |
| Syntax অনুভূতি | Pythonic, স্বাভাবিক | Keras খুব সংক্ষিপ্ত (high-level) |
| Debugging | সহজ (dynamic graph, সাধারণ Python debugger চলে) | আগে কঠিন ছিল; TF2-এ ভালো হয়েছে |
| Research/paper | আজ প্রায় প্রভাবশালী | আগে জনপ্রিয় ছিল |
| Mobile/edge deploy | উন্নত হচ্ছে (ExecuTorch) | পরিণত (TF Lite) |
| Ecosystem | Hugging Face এর উপর দাঁড়ানো | TF Serving, TFX পরিপক্ব |
| শেখার সহজতা (শুরুতে) | মাঝারি | Keras দিয়ে খুব সহজ শুরু |
এক লাইনের পরামর্শ: junior হিসেবে একটা (PyTorch) গভীরে শিখুন, অন্যটার
(Keras) সাথে পরিচিত থাকুন। "PyTorch primary, Keras জানি" — এটাই বেশিরভাগ বাংলাদেশি JD-র জন্য যথেষ্ট।
🇧🇩 ৪. Industry বাংলাদেশে কী চায়?
- বেশিরভাগ নতুন AI/research-oriented কোম্পানি ও startup — PyTorch।
- কিছু established/enterprise বা mobile-focused দল — TensorFlow/Keras/TF Lite।
- অনেক JD লেখে "PyTorch or TensorFlow" — মানে যেকোনো একটাতে দক্ষতাই যথেষ্ট।
তাই দুশ্চিন্তা নয়। concept শক্ত থাকলে, প্রথম চাকরিতে কোম্পানির framework-এ মানিয়ে নেওয়া দ্রুত হয়।
💻 ৫. একই MLP: PyTorch বনাম Keras (পাশাপাশি)
পার্থক্যটা চোখে দেখুন — একই ২-layer classifier:
# ---------- PyTorch ----------
import torch.nn as nn
model = nn.Sequential(
nn.Linear(10, 32), nn.ReLU(),
nn.Linear(32, 2),
)
# আপনি নিজে training loop লেখেন (zero_grad, forward, loss,
# backward, step) — বেশি নিয়ন্ত্রণ, বেশি দৃশ্যমানতা।
# ---------- Keras (TensorFlow) ----------
from tensorflow import keras
model = keras.Sequential([
keras.layers.Dense(32, activation="relu", input_shape=(10,)),
keras.layers.Dense(2, activation="softmax"),
])
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
model.fit(X, y, epochs=30, batch_size=32) # loop লুকানো
মূল পার্থক্য: PyTorch-এ training loop আপনি লেখেন (স্বচ্ছতা ও নিয়ন্ত্রণ বেশি);
Keras .fit()-এ loop লুকানো (দ্রুত শুরু, কম boilerplate)। এই সিরিজে আমরা loop নিজে লিখতে
শিখেছি ইচ্ছাকৃতভাবে — কারণ ভেতরটা বুঝলে যেকোনো framework সহজ।
💾 ৬. Model save/load — সবচেয়ে জরুরি production skill
Train করা model মেমরিতে থাকে; program বন্ধ হলে হারিয়ে যায়। Deploy করতে হলে সেটা disk-এ save
করে পরে load করতে হবে। PyTorch-এ সবচেয়ে ভালো উপায় — state_dict (শুধু
weight) save করা:
import torch
import torch.nn as nn
model = nn.Sequential(nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 2))
# ... train ...
# ---- SAVE (শুধু weight — recommended) ----
torch.save(model.state_dict(), "model.pt")
# ---- LOAD (আলাদা program/server-এ) ----
# 1) আগে একই architecture বানাতে হবে
loaded = nn.Sequential(nn.Linear(10, 32), nn.ReLU(), nn.Linear(32, 2))
# 2) weight ঢালা
loaded.load_state_dict(torch.load("model.pt", map_location="cpu"))
# 3) inference mode
loaded.eval()
কেন state_dict, পুরো model object নয়? শুধু weight save করা portable ও নিরাপদ —
পুরো object (pickle) save করলে ঠিক একই code/version লাগে, ভঙ্গুর হয়। তাই industry-তে
state_dict মানক।
🚀 ৭. Inference: training শেষ, এখন ব্যবহার
মনে রাখবেন — training ≠ inference। Training একবার (offline, ব্যয়বহুল)। Inference বারবার
(production-এ, প্রতিটা user request-এ, সস্তা)। Inference-এ দুটো জিনিস অপরিহার্য:
loaded.eval() # 1) eval mode (dropout/batchnorm ঠিক আচরণ)
with torch.no_grad(): # 2) gradient বন্ধ (দ্রুত, কম memory)
x = torch.randn(1, 10) # একটা নতুন sample
logits = loaded(x)
probs = torch.softmax(logits, dim=1)
pred = probs.argmax(1).item()
print("prediction:", pred, "| probability:", probs.max().item())
দুটো ভুলে গেলে বিপদ: (১) model.eval() না দিলে dropout/batchnorm inference-এ
ভুল করবে; (২) torch.no_grad() না দিলে অকারণে gradient হিসাব হয়ে ধীর ও memory-খেকো হবে।
🖼️ ৮. Visual: train → save → load → inference
[ TRAINING ] (একবার, offline, GPU, ব্যয়বহুল)
│ model.state_dict()
▼
[ SAVE ] ──> model.pt (disk)
│ load_state_dict()
▼
[ LOAD ] (server চালু হলে একবার)
│ model.eval() + torch.no_grad()
▼
[ INFERENCE ] (বারবার, প্রতি request, সস্তা, দ্রুত)
🔄 ৯. ONNX — framework-এর গণ্ডি পেরোনো (আভাস)
কখনো দরকার হয় PyTorch-এ train করা model অন্য পরিবেশে (C++, mobile, TF-based serving) চালানো। তখন model-কে
ONNX নামের একটা common format-এ export করা যায় — যা framework-নিরপেক্ষ।
Learn Later: ONNX, TorchScript, quantization — এগুলো এখন junior হিসেবে master করতে হবে না।
শুধু জানুন এগুলো আছে, deployment/optimization-এ কাজে লাগে। বিস্তারিত Series 09-এ (inference optimization)।
🇧🇩 ১০. বাংলাদেশের বাস্তব উদাহরণ
একটা কোম্পানিতে data scientist model train করে state_dict save করে দেন; ML engineer সেটা
একটা FastAPI server-এ load করে eval() mode-এ inference চালান। user শুধু দ্রুত উত্তর পায়।
এই "train একজায়গায়, serve আরেক জায়গায়" workflow-ই বাস্তব। তাই save/load/inference জানা মানে আপনি
model-কে notebook থেকে বের করে আসল product-এ নিতে পারেন।
💼 ১১. Boss Question
Boss: "আমরা PyTorch-এ model বানালাম। কিন্তু আমাদের production team তো অন্য framework/ভাষায় কাজ করে।
তাহলে কি আবার সব নতুন করে বানাতে হবে?"
উত্তর: "না স্যার। model-টা একবার train করে save করে রাখলেই হয় — production team সেই
saved model লোড করে শুধু inference চালাবে। দরকার হলে ONNX-এ export করে অন্য framework-এও চালানো যায়।
মানে একবারের training, বহুবার-বহু-জায়গায় ব্যবহার — ফ্রেমওয়ার্ক নিয়ে আটকে থাকতে হয় না।"
🔎 ১২. Job Requirement Decoder
"Proficiency in PyTorch or TensorFlow; model deployment basics."
| প্রশ্ন | উত্তর |
| কী বোঝায়? | একটা DL framework-এ দক্ষ + train করা model save/load/inference করতে পারেন। |
| কেন চায়? | model তখনই মূল্যবান যখন সেটা deploy ও ব্যবহার করা যায়, শুধু train নয়। |
| কোন সমস্যা সমাধান করে? | "notebook-এ model আছে, কিন্তু production-এ চলে না" — এই ফাঁক। |
| junior-এর কী জানা লাগে? | একটা framework গভীরে (PyTorch), অন্যটার সাথে পরিচিতি, state_dict save/load, eval()+no_grad() inference। |
| এখনই কী master লাগে না? | দুই framework সমান দক্ষতা, ONNX/TorchScript/quantization-এর গভীরতা। |
| GitHub-এ কীভাবে দেখাবে? | train script + আলাদা inference script যা saved model load করে predict করে। |
| interview-তে কী? | "PyTorch বনাম TensorFlow?", "model কীভাবে save/deploy করবেন?", "eval() কেন?" |
⚠️ ১৩. সাধারণ ভুল ধারণা
ভুল ১: "দুটো framework আলাদা করে master করতে হবে।" → না, concept এক; একটা গভীরে যথেষ্ট।
ভুল ২: inference-এ model.eval() না দেওয়া → dropout/batchnorm ভুল ফল।
ভুল ৩: load করার সময় architecture আলাদা → load_state_dict ব্যর্থ।
ভুল ৪: পুরো model pickle save করে version mismatch-এ ভাঙা → state_dict ভালো।
ভুল ৫: "framework জানা = DL জানা।" → concept না জানলে framework মুখস্থ অর্থহীন।
🎤 ১৪. Interview Prep
প্রশ্ন ১: PyTorch বনাম TensorFlow — কোনটা কখন?
উত্তর: concept এক; PyTorch Pythonic ও research-প্রিয়, TF/Keras দ্রুত prototyping ও পরিপক্ব deployment (TF Lite/Serving)। যেকোনো একটায় দক্ষ হলেই চলে।
প্রশ্ন ২: model কীভাবে save/deploy করবেন?
উত্তর: state_dict save; load করে eval()+no_grad()-এ inference; দরকারে API/ONNX।
প্রশ্ন ৩: Training আর inference-এর পার্থক্য?
উত্তর: training একবার (gradient, ব্যয়বহুল); inference বারবার (শুধু forward pass, সস্তা)।
প্রশ্ন ৪: eval() ও no_grad() কেন?
উত্তর: eval() dropout/batchnorm ঠিক করে; no_grad() gradient বন্ধ করে দ্রুত ও কম memory।
✍️ ১৫. হাতে-কলমে
১. E06-এর CNN বা E07-এর ResNet model state_dict দিয়ে save করুন।
২. একটা নতুন Python file বানিয়ে সেই model load করে একটা ছবিতে predict করুন (আলাদা inference script)।
৩. model.eval() বাদ দিয়ে চালিয়ে দেখুন ফল বদলায় কিনা।
৪. (ঐচ্ছিক) একই MLP Keras-এ লিখে .fit() দিয়ে চালান — syntax পার্থক্য অনুভব করুন।
🏁 ১৬. Series 06 সারসংক্ষেপ ও পরবর্তী Series
এই পর্বে শিখলাম:
✓ PyTorch ও TensorFlow মূলত একই কাজ করে; concept জানলে framework বদলানো সহজ
✓ সৎ তুলনা ও বাংলাদেশের industry-তে কী চায়
✓ state_dict দিয়ে model save/load — production-এর অপরিহার্য skill
✓ inference-এ eval() + no_grad(); training ≠ inference
✓ ONNX-এর আভাস (Learn Later)
🎓 পুরো Series 06-এ আমরা যা অর্জন করলাম: neural network কেন ও কখন → neuron/activation/forward
→ backprop/gradient descent → PyTorch hands-on → MLP → CNN (P4 image classifier) → transfer learning →
framework ও deployment basics। আপনি এখন একটা DL model বানাতে, train করতে, টিউন করতে, save/inference
করতে পারেন। এটাই junior AI engineer-এর Deep Learning-এর "Must Know" ভিত্তি।
পরবর্তী Series (07 — NLP, Transformers ও LLM): এবার ছবি ছেড়ে ভাষায় যাব — computer
কীভাবে text বোঝে, tokenization থেকে embedding, RNN থেকে attention, তারপর Transformer ও LLM-এর ভিত্তি।
এই DL জ্ঞানই সেখানে কাজে লাগবে।