Chapter 10 of 16
Logging runs so you can actually learn from them
যে HPO run-টা track করা হয়নি, সেটা থেকে আসলে কিছুই শেখা যায় না। কোন configuration try করেছিলেন, কী ফলাফল এসেছিল, কেন সেই সিদ্ধান্তগুলো নিয়েছিলেন — সবকিছু ভুলে যাবেন। কোনো সহকর্মী জিজ্ঞেস করলে "learning rate 0.003 কেন বেছেছিলে?", কোনো উত্তর থাকবে না। তিন মাস পর কোনো ফলাফল reproduce করতে চাইলে, পারবেন না। Experiment tracking হলো প্রতিটা trial-এর configuration, environment, আর ফলাফল একটা structured, খোঁজযোগ্য উপায়ে রেকর্ড রাখার অভ্যাস।
| Category | কী log করবেন |
|---|---|
| Hyperparameter | এই trial-এ try করা প্রতিটা hyperparameter-এর মান — শুধু search করা গুলো নয়, default-এ fix রাখাগুলোও। |
| Metric | প্রতি epoch-এ বা training শেষে training loss, validation loss, আর task-specific metric (AUC, F1, accuracy)। |
| Environment | Library version (scikit-learn, PyTorch, CUDA), hardware (GPU type), Python version, operating system। |
| Code version | Git commit hash বা tag। Codebase পাল্টে গেলেও ফলাফল reproducible রাখে। |
| Artifact | Saved model weight, training curve, confusion matrix, বা পরে দরকার হতে পারে এমন যেকোনো output। |
| Timing | Trial-এর জন্য wall-clock time, আর প্রতিটা ধাপের (data loading, forward pass, evaluation) সময়। |
MLflow একটা open-source platform — experiment tracking, model registry, আর deployment মিলিয়ে পুরো ML lifecycle পরিচালনা করে। একটা with mlflow.start_run() ব্লকের ভেতরে mlflow.log_params(config) দিয়ে hyperparameter আর mlflow.log_metric("cv_auc_mean", score) দিয়ে metric log করে দিলেই MLflow সবকিছু organize করে রাখে; mlflow.sklearn.log_model(model, "model") দিয়ে trained model-ও সংরক্ষণ করা যায়। এরপর mlflow ui --port 5000 চালিয়ে browser-এ সব run পাশাপাশি তুলনা করা যায়, metric অনুযায়ী sort করা যায়, learning curve দেখা যায়। প্রিন্ট স্টেটমেন্টের একটা সিরিজ আর একটা প্রফেশনাল HPO workflow-এর মধ্যে পার্থক্য এই visibility-টাই তৈরি করে।
W&B ("wandb") MLflow-এর চেয়ে সমৃদ্ধ visualization দেয় — automatic system metric tracking, training চলাকালীন live loss curve, আর একটা collaborative cloud-hosted interface। এর sweep ফিচার পুরো HPO loop-টাই সামলে দেয়, Bayesian optimization-সহ — sweep_config-এ method: "bayes" দিয়ে ঠিক করা যায় কোন search strategy ব্যবহার হবে, প্রতিটা hyperparameter-এর range parameters-এ দিয়ে দেওয়া হয়, আর wandb.agent(sweep_id, function=train, count=50) চালিয়ে পুরো sweep চলতে শুরু করে। কোন configuration চেষ্টা করতে হবে, কীভাবে ফলাফল compare করতে হবে, সবটাই একটা dashboard-এ real time-এ দেখা যায়।
Optuna আর MLflow সরাসরি একসাথে কাজ করে — Optuna-র TPE algorithm ব্যবহার করেই সবকিছু MLflow-তে log করা যায়। objective function-এর ভেতরে প্রতিটা trial-কে mlflow.start_run(nested=True) দিয়ে একটা nested MLflow run হিসেবে রেকর্ড রাখা হয়, প্রতিটা trial-এর params আর metric আলাদাভাবে log হয়। বাইরের একটা mlflow.start_run()-এর ভেতরে পুরো study.optimize(...) চালিয়ে শেষে সেরা configuration আর সেরা score আলাদাভাবে log করে রাখা যায়।
Tracking একটা search-কে একবারের হিসেব থেকে বদলে দেয় এমন একটা dataset-এ, যা থেকে বারবার প্রশ্ন করে শেখা যায়:
সেরা configuration চিহ্নিত করা
Print statement ঘেঁটে না খুঁজে সব trial validation metric অনুযায়ী sort করে সেরা hyperparameter সাথে সাথে বের করা যায়।
সমস্যা diagnose করা
NaN loss বা crash হওয়া trial খুঁজে বের করে সেগুলোর hyperparameter দেখে বোঝা যায় কোন configuration range-এর বাইরে ছিল।
Hyperparameter-এর গুরুত্ব বোঝা
প্রতিটা hyperparameter-এর বিপরীতে metric প্লট করে বোঝা যায় কোনটা সবচেয়ে বেশি প্রভাব ফেলছে — এটাই পরের search space design করতে সাহায্য করে।
একাধিক experiment তুলনা করা
গত সপ্তাহের run-এর সাথে এই সপ্তাহের run, বা ভিন্ন ভিন্ন search algorithm-এর ফলাফল একই dataset-এ তুলনা করা যায়।
যেকোনো ফলাফল আবার তৈরি করা
Logged hyperparameter, code commit, আর library version দিয়ে যেকোনো ফলাফল সঠিকভাবে reproduce করা যায়।
শুধু যেগুলো search করা হচ্ছে সেগুলোই নয়, fixed রাখা hyperparameter-গুলোও সবসময় log করুন। আজ যেটা "fixed" মনে হচ্ছে, কাল সেটাই হয়তো search-এর বিষয় হয়ে যাবে — আর তিন মাস পর নিজের কাছেই যদি প্রশ্ন হয় "বাকি ১০টা hyperparameter-এ তখন কী মান ব্যবহার করেছিলাম?", পূর্ণাঙ্গ configuration-ই সেই প্রশ্নের একমাত্র উত্তর।
with mlflow.start_run() ব্লকে param আর metric log করুন, MLflow UI-তে run তুলনা করুন।