Recent Posts

A candid, in-depth account of developing an end-to-end Student Performance Prediction system. This post explores the journey from an experimental Jupyter Notebook to a production-ready, modular ML pipeline, covering the critical roles of custom logging, exception handling, and a component-based architecture. It also details the real-world challenges and hard-won lessons from deploying a Flask application on AWS.

The final step in our MLOps journey is making the trained model useful. This post covers the "last mile" of deployment, showing how to wrap the text summarization model in a high-performance API using FastAPI. I then walk through creating a Dockerfile to containerize the entire application, ensuring a consistent and portable service that can be deployed anywhere.

With a robust MLOps pipeline in place, this post dives into the core machine learning workflow of the Text Summarizer project. I explore each critical stage: transforming the raw SAMSum dataset for the model, fine-tuning a pre-trained Pegasus Transformer using a configuration-driven approach, and quantitatively evaluating its performance with ROUGE metrics.

My Text Summarizer project started in a Jupyter notebook—a great place for experimentation, but a fragile foundation for a real application. This post details the journey of refactoring that initial script into a robust, production-ready MLOps pipeline, tackling the challenges of hardcoded paths, scattered configuration, and monolithic execution with a modular, component-based architecture.

I thought taking a scikit-learn model to the cloud would be simple, but AWS SageMaker taught me more about cloud architecture and DevOps than I ever expected. This post details my entire journey, from battling IAM roles and structuring S3 buckets to mastering the SageMaker training patterns that finally bridged the gap between my local machine and a production-ready endpoint. It's a story of the struggles, the breakthroughs, and the hard-won lessons learned while building a real-world ML pipeline.

A machine learning model is useless if no one can use it. This post covers the "last mile" problem: giving my PyTorch model an interactive body. This is the story of my struggle against frozen UIs, the architectural epiphany that led to a framework-agnostic core, and the final lessons learned while building identical apps in both Flask and FastAPI.

My FoodVision Mini project started with a simple question in a Jupyter Notebook, but the answer required a real engineering journey. This post tells the story of how I tamed chaotic experiments with a systematic process, unlocked the true power of transfer learning through trial and error, and refactored a monolithic script into a robust, modular ML pipeline.

With a working local pipeline, the "easy" part was next: deployment. This turned into a multi-day AWS nightmare. After successfully automating the CI/CD pipeline with GitHub Actions, the app was live but unreachable. The culprit? A single, critical line of code related to container networking. This post dives into the humbling, real-world challenges of cloud infrastructure, debugging EC2 security groups, and the final "aha!" moment that brought the entire system online.

My journey began with a classic MLOps mistake: underestimating messy data. My model worked locally, but I spent weeks debugging failures until a breakthrough came from implementing rigorous data validation schemas and drift detection. This post covers the foundational engineering—modular architecture, custom logging, and experiment tracking—that's essential *before* you even think about the cloud. It’s the story of building a resilient pipeline from the ground up.