Field Notes / AI Infrastructure

I Rented a GPU For a Weekend and Broke Everything So You Don't Have To

A hands-on lab in self-hosted AI model serving — what worked, what caught fire, and what it taught me about running AI infrastructure for real clients instead of just reading about it.

Jeff Applewhite Applewhite IT Consulting AI Infrastructure & Systems Engineering Aug 7, 2026

Every AI vendor demo makes self-hosting a language model look like a checkbox. Rent a GPU, run one command, done. I built a controlled GPU lab to get hands-on with the failure modes that actually show up in self-hosted inference — version compatibility, storage behavior, model serving, and quantization — before running into them on a client timeline. So I rented a GPU for a weekend, set out to run an open-source AI model two different ways, and compare a full-precision version against a compressed one. It took a lot longer than "one command," and every single detour taught me something worth knowing before I'd ever recommend this path to a client.

Here's the honest version of how it went — bugs, dead ends, and the numbers that actually surprised me.

The setup, in plain terms

The goal: take one open-source AI model (a 7-billion-parameter model called Qwen2.5), run it through two different serving engines — vLLM and SGLang, two widely used open-source model-serving frameworks — and compare a standard version against a compressed ("quantized") version. Same hardware, same questions, real numbers instead of marketing claims.

Why does this matter for a business owner who isn't touching a GPU themselves? Because "run AI on your own infrastructure instead of sending your data to a third-party API" is a real, increasingly common ask — for data privacy, for cost control at scale, or just because a client doesn't want their customer data flowing through someone else's black box. Knowing exactly where the sharp edges are is the difference between a smooth engagement and a client watching me debug in real time.

Snag #1: The cloud GPU market is a maze, and the sticker price lies

Renting a GPU sounds simple until you're comparing a dozen providers, each with wildly different pricing models, storage fees, and fine print about what happens when you stop an instance overnight. I picked RunPod after comparing total cost across realistic usage scenarios, not just the advertised hourly rate — and even then, hit two separate infrastructure surprises that no pricing page mentioned:

Snag

The cheaper "Community Cloud" tier can vanish out from under you. I paused my work overnight to pick it back up the next day, and the host that had my GPU simply wasn't available anymore — reclaimed by someone else, because peer-hosted capacity isn't guaranteed the way dedicated infrastructure is. Total loss: about an hour of setup work and a lesson in reading the fine print on "budget" cloud tiers.

Snag

"Fast storage" isn't always fast, and you can't tell until after you've paid. The next tier up gave me a storage volume that turned out to be network-attached instead of a local solid-state drive — no error, no warning, just installs and model loads running five to ten times slower than they should. The only way to find out is to check after the fact. I now check this in the first sixty seconds on any new machine, before doing any real work.

Neither of these is a "gotcha" — it's just how cloud infrastructure actually works, and it's exactly the kind of thing that eats a client's budget when nobody's checked for it ahead of time.

Snag #2: The version-mismatch bug that could eat half your day

This is the one I'd tell a room full of engineers about, because it's a perfect example of a whole category of infrastructure bug: two pieces of software that both claim to be compatible, and technically are — just not with each other, not right now, not by default.

The software I installed was built for a newer version of NVIDIA's GPU platform than the rented computer's own drivers supported — and I didn't choose that. It's just what "install the latest version" happened to mean that particular day.

Both serving engines I was testing had, as of a recent release, quietly switched their default installs to expect a newer version of NVIDIA's CUDA platform than the GPU driver on my rented machine actually supported. The error message pointed at a missing file. My first fix — reinstalling the underlying math library with an older, compatible version — didn't work, because both serving engines also ship their own separately pre-compiled, highly optimized GPU code, built and locked to that same newer version independently of everything else. I had two things to fix, not one, and the second one wasn't obvious from the error message at all.

The eventual fix looked different for each tool — and this is specifically what worked on the RunPod image I was using that day, not universal installation advice. CUDA defaults and driver versions shift release to release, so treat the exact commands as a snapshot of one environment rather than a recipe to copy blindly. On that box, vLLM's newest release had made the jump; pinning to the last release built against the older, compatible CUDA line solved it in one line:

uv pip install "vllm<0.20"
# resolves to vllm 0.19.1, pulled in against torch 2.10.0+cu128 —
# the last combination still matched to the driver on this box

SGLang needed the opposite move on that same machine — forcing a newer, matching CUDA-tagged build of torch and its own compiled kernels back into alignment, using the sequence from its own install docs rather than the default one:

pip install --upgrade pip
pip install torch==2.11.0+cu129 --index-url https://download.pytorch.org/whl/cu129
pip install sglang[all] --find-links https://flashinfer.ai/whl/cu129/torch2.11
pip install sgl-kernel --find-links https://flashinfer.ai/whl/cu129/torch2.11

Neither was hard once understood. Both were genuinely confusing until then.

Why this matters for clients: "It works on my machine" is not a deployment plan. Every layer of a modern AI stack — the driver, the GPU math libraries, the serving software — has its own version, and they all have to agree. This is precisely the kind of cross-compatibility landmine that turns a two-hour deployment into a two-day one if nobody on the team has stepped on it before.

Snag #3: The disk that said it had a quadrillion bytes free, then ran out

Midway through, an install failed with a "disk quota exceeded" error — on a drive that, according to the standard disk-usage command, had over a thousand terabytes free. That's not a typo. The network storage system was reporting the capacity of its entire shared cluster, not my actual allotted slice of it.

The real fix was mundane once I found the right tool to actually measure what I was using: cleared out about 40GB of redundant package-download caches — leftover debris from the CUDA version debugging above, where I'd downloaded the wrong version, then the right version, and never cleaned up the wrong one — and the install went through immediately.

The part that actually mattered: what quantization really buys you

All of the above was friction on the way to the actual question: does compressing an AI model (a technique called quantization, which shrinks how much space each of the model's internal numbers takes up) actually help, and where?

Both engines expose an OpenAI-compatible API, so the same test prompts and the same client code worked against all three configurations. Standing up the standard vLLM server looked like this:

vllm serve Qwen/Qwen2.5-7B-Instruct \
  --served-model-name qwen2.5-7b-instruct \
  --dtype bfloat16 \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.85 \
  --enable-auto-tool-choice --tool-call-parser hermes \
  --host 0.0.0.0 --port 8000

Swapping in the quantized weights for the comparison run was a one-flag change — no separate build, no different server:

vllm serve Qwen/Qwen2.5-7B-Instruct-AWQ \
  --served-model-name qwen2.5-7b-instruct-awq \
  --quantization awq_marlin \
  --max-model-len 8192 \
  --host 0.0.0.0 --port 8000

And the SGLang side, same model family, its own server process on a different port so both could be benchmarked back to back:

python3 -m sglang.launch_server \
  --model-path Qwen/Qwen2.5-7B-Instruct \
  --served-model-name qwen2.5-7b-instruct \
  --dtype bfloat16 \
  --context-length 8192 \
  --mem-fraction-static 0.85 \
  --host 0.0.0.0 --port 30000

Once a server was up, a plain curl against the standard OpenAI chat-completions endpoint was enough to sanity-check it before running the full benchmark:

curl -s http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "qwen2.5-7b-instruct", "temperature": 0,
       "messages": [{"role": "user", "content": "Explain KV cache in three sentences."}]}'

The answer was more interesting than a flat "yes":

63.5%less GPU memory for model weights
2.7xfaster text generation, single request
0%improvement in how fast the model loaded at startup

That last number is the one that surprised me. A model file roughly a third the size loaded in the same amount of time as the full-size one — because the compression format needs an extra repacking step at load time, and that overhead essentially cancels out the benefit of having less data to read. Compression helped exactly where I'd expect (less memory, faster ongoing responses) and did nothing where intuition says it should (faster startup). That's a genuinely useful, non-obvious thing to know before recommending a quantized model to a client who's optimizing for how fast their system comes back up after a restart versus how fast it responds during normal use.


Why I do this kind of lab work

None of this was client work. It was deliberate practice — the same reason a contractor test-fits a tricky joint on a scrap piece of lumber before it's load-bearing on someone's house. I'd rather find the CUDA version trap and the phantom disk quota on my own dime, in my own lab, than in the middle of a client's timeline.

If your business is weighing whether to run AI tools on your own infrastructure — for privacy, for cost control, or just to stop depending on a third party's uptime — that's exactly the kind of decision where it helps to have someone who's already found the landmines.

Thinking about self-hosted or private AI for your business?

Let's talk through whether it's actually the right fit — and if it is, what it really takes to do it well.

Talk With Jeff