• Vishakha Sadhwani
  • Posts
  • DevOps + LLM + AI Resume Project For Beginners Ft. Docker, Kubernetes & vLLM

DevOps + LLM + AI Resume Project For Beginners Ft. Docker, Kubernetes & vLLM

Learn how to deploy a local LLM chat application on a cloud-based GPU instance using real AI infrastructure components.

Hi Inner Circle!

Today, we're covering something that sits right at the intersection of Cloud, DevOps, and AI Infrastructure.

If you've been looking for a project that feels relevant in today's hiring market—not just another CRUD application or a generic Kubernetes deployment—this one is for you.

Instead of simply deploying an application, you'll build and containerize an LLM inference service, expose it through an API, and understand how every request travels through the stack before reaching a language model.

The goal isn't just to make the project work.

It's to understand why each technology exists and how they fit together.

The Project

We'll deploy a Large Language Model using the following stack:

  • FastAPI

  • vLLM

  • Docker

  • Hugging Face models

  • NVIDIA GPU

  • Streamlit (frontend)

Think of this as a simplified version of how many production AI applications are architected.

A user asks a question. The request travels through an API. The API sends it to an optimized inference engine. The engine runs the model on the GPU. The generated response comes back to the application.

The complete project stack, simply visualized.

Simple from the outside. Lots of interesting engineering underneath.

Before understanding the tools, understand the flow

Whenever you're learning a new technology stack, don't start by memorizing tools. Start by asking: What problem is each layer solving?

Here's the request journey:

Every layer has a specific responsibility. That's exactly how production systems are designed.

Why Streamlit?

You could test everything using curl or Postman. But real AI applications usually have users.

Streamlit gives us a lightweight frontend where someone can type a prompt and immediately interact with the model. Its job is simple:

  • collect user input

  • send requests

  • display responses

Nothing more.

Why FastAPI?

FastAPI acts as the application server. Instead of exposing the language model directly, we expose an API. That API handles incoming requests, validates inputs, communicates with the inference engine, and returns structured responses.

Why is this important? Because in production you rarely let external users talk directly to a model. You usually add layers such as:

  • authentication

  • rate limiting

  • logging

  • monitoring

  • request validation

  • business logic

FastAPI becomes the gateway between your users and the model.

Why Hugging Face?

Hugging Face isn't running inference. It's providing the model. Think of it as the model repository.

Instead of training your own LLM from scratch, you can download open-source models such as Qwen, Llama, Mistral, Gemma, and many others. Your application simply loads one of these models during startup.

Why vLLM?

This is one of the most important components of the project.

Technically, you could load a model directly with the Transformers library. It would work. But it wouldn't scale particularly well.

vLLM is an optimized inference engine built specifically for serving Large Language Models efficiently. It improves throughput, reduces latency, manages GPU memory more effectively, and enables multiple requests to share GPU resources much more efficiently.

Instead of reinventing all that optimization yourself, you let vLLM handle it. That's why many production AI deployments choose it.

Why Docker?

Imagine asking every engineer on your team to manually install:

  • Python

  • CUDA

  • PyTorch

  • Transformers

  • vLLM

  • FastAPI

  • every dependency

  • every library version

Eventually something breaks. Docker solves that problem.

Everything your application needs gets packaged into one container. Whether you're deploying locally, on a VM, Kubernetes, or a cloud GPU instance, the environment remains consistent.

That's one of the biggest reasons containers became the standard for modern application deployment.

Why a GPU?

Large Language Models perform billions of mathematical operations. CPUs can execute those calculations. GPUs execute thousands of them simultaneously.

That's why inference becomes dramatically faster on NVIDIA GPUs. Without GPU acceleration, many modern LLMs become far too slow for interactive applications.

Let's follow one request

The request journey

Here's what actually happens when someone types a message:

  1. The browser hits the EC2 instance's public IP on port 80. Streamlit serves the chat UI. If the model is still loading, the sidebar shows "SERVER OFFLINE" until vLLM's health check passes.

  2. The user sends a message. Streamlit forwards it to vLLM's OpenAI-compatible endpoint on port 8000 — internally, this is just an HTTP call from one process to another inside the same container.

  3. vLLM tokenizes the input and adds the request to its batch scheduler. If other requests are already running, this one gets slotted in through continuous batching rather than queued behind them.

  4. The forward pass runs on the GPU. PagedAttention manages the KV cache in fixed-size blocks instead of allocating one large contiguous chunk per request, which is what lets vLLM serve more concurrent requests without running out of VRAM.

  5. Tokens stream back to Streamlit as they're generated.

  6. Streamlit renders them in the chat window, token by token, so it feels like a real-time response instead of a single blocking call.

That's the whole loop — five hops, three services, one GPU.

The message journey in it’s most simplified form.

Why this project matters

This isn't just another AI demo. It combines concepts that interviewers increasingly expect engineers to understand:

  • Cloud fundamentals

  • Containerization

  • REST APIs

  • GPU workloads

  • Model serving

  • Inference optimization

  • Application architecture

Instead of learning these topics independently, you see how they work together in one end-to-end system. That understanding is far more valuable than memorizing commands.

Interview takeaways

If you're preparing for Cloud, DevOps, Platform Engineering, AI Infrastructure, or MLOps interviews, here's what you should actually be able to explain afterward—not just "I deployed a model":

  • Why an OpenAI-compatible API is a meaningful design choice, not a coincidence — it's what lets you swap a self-hosted model in for a hosted one without touching the application code above it.

  • The cost math: a self-hosted GPU is a fixed cost regardless of usage, versus per-token API billing that scales with traffic. Know when each one actually wins.

  • Cold start as a real operational concern — this stack takes one to three minutes to load the model into VRAM before it can serve anything. That's not a bug; that's GPU memory allocation and model loading time, and it's exactly the kind of thing that shows up in production incident reviews.

  • GPU memory trade-offs — why a 1.5B parameter model needs about 3GB of VRAM while a Phi-3 Mini needs about 8GB, and what that means for instance sizing decisions.

  • Container health checks and startup ordering — why the entrypoint script waits on vLLM's /health endpoint before starting Streamlit, and what breaks if you get that ordering wrong.

The repository

I've open-sourced the complete project here.

Clone it. Run it. Break it. Modify it.

That's where the real learning happens.

Final thoughts

One thing worth mentioning is that this project uses vLLM as the inference engine. But that's just one option.

You could build a very similar architecture using engines like TensorRT-LLM, SGLang, llama.cpp, Ollama, Triton Inference Server, or other serving frameworks depending on your workload, hardware, latency requirements, and deployment environment.

The architecture stays largely the same. The inference engine changes.

Once you understand the foundations—the request journey, the responsibilities of each layer, and why each component exists—you'll be able to swap technologies confidently instead of feeling locked into one stack.

And that's exactly the mindset that separates someone who can follow tutorials from someone who can design AI infrastructure.

There's also a full YouTube video walking through everything in detail, you can check that out too.

See you in the next edition.