LLM inference
Open models on GPUs with vLLM or SGLang. I measure first, then tune speculative decoding, precision, batching and node shape.
AI infrastructure engineer · San Francisco
I'm Zac Peterson. Since 2019 I've built and run cloud platforms for companies in healthcare, energy, retail and marketing, nearly all of it on Kubernetes.
I also consult. Most projects land in one of three places: a model that's too slow or too expensive to serve, an ML platform that needs building or untangling, or coding agents that need somewhere safe to work.
Open models on GPUs with vLLM or SGLang. I measure first, then tune speculative decoding, precision, batching and node shape.
GPU node pools, job queues, MLflow and GitOps on GKE, EKS or bare metal, kept small enough that your team can run it.
Credential-free sandboxes for coding agents, plus the benchmarks that tell you whether they did the job.
Client work
Same traffic, a fifth of the bill. Most of the money was idle capacity, hot storage nobody read and data crossing zones for no reason.
Client work
A thousand times more people, and a platform where one part can change without stopping the rest.
My own project
One node, one model, one user. The setup that made it repeatable.
My own project
CRDs for profiles and runs, a scheduler that checks headroom, and a database that remembers every attempt.
Two speculative-decoding settings and a CUDA graphs run, measured on one stream. Three draft tokens won by 29%, and the acceptance rates I didn't save are the gap in the data.
Most of what I learned running coding-agent benchmarks at scale was about bookkeeping, not GPUs or prompts.
The job ran on time, the files had the right names, and none of them could be restored.
A validation cache keyed on the environment looked fine when I tested it by hand. Inside a Git hook, the environment was different.
If something here sounds like your problem, send me a few lines about what you're running.