Two disclaimers, then the setup.
This is my own lab. It is nested, it runs on hardware I paid for, and nothing in it has ever been near a customer or an employer's network. I would rather draw that line at the top than have you wonder about it the whole way down.
And the thing I am about to describe is not clever. It is the obvious move. I am writing it down anyway, because the obvious move took me three false starts to actually reach, and the false starts are the useful part.
Here is the shape of it. I have a lab I trust and a control plane I wrote. It runs on a Dell 7920 with a pair of Xeon 6148s. Skylake, 2018, officially deprecated by the vendor this year, which is a polite way of saying the machine and I are aging at the same rate. It is a fine box for hypervisors and databases and agents. It is a terrible box for a GPU workload, because it does not have one worth the name.
So the compute I actually need for the AI half of this lab does not live in my house. It lives, by the hour, in a data center I will never see, and the entire trick is making my lab believe otherwise.
The number that started this
I tried to run a large model locally first. Everybody does. It is a rite of passage, like touching a stove.
The honest result: a 2.8-trillion-parameter model, quantized down until it fit in 8 GB of RAM, wrote one token roughly every 32 seconds. That is not a typo. At that rate a single paragraph is a lunch break. It was a filing cabinet doing an impression of a sports car. On the same box, tuned properly, smaller models are genuinely useful. Ollama on 12 threads beats the same job on 20, because past a point the NUMA hop costs more than the extra cores give back. I use that setup every day and I am not being self-deprecating about it.
But "useful for small models" and "can train or serve something real" are different sentences. The gap between them is a GPU I do not own, and the interesting question was never whether I want one. Obviously I want one. The question was whether I should buy one.
The part everyone waves their hands at, done with actual numbers
Here is the buy side, priced honestly as of this month, because the hand-waving version of this decision is where people talk themselves into a $5,000 mistake.
RTX 5090. Nvidia says it is a $1,999 card. Nvidia is being adorable. The street median right now is about $4,700, the fancy liquid-cooled AIB models clear $5,000, and a used one off eBay is roughly $3,590 if you enjoy trusting strangers with a component that has been mining-adjacent its whole life. The reason is not a mystery: the AI buildout ate the world's memory supply, GDDR7 got expensive, and the gamers are paying the tax for the data centers. For that money you get 32 GB of VRAM, which is a lot until the model you actually wanted to run needs 48.
DGX Spark. The little desktop box Nvidia teased at $3,999 and then quietly repriced to $4,699 once the same memory crunch caught up with it. 128 GB of unified memory, comfortable with models up to around 200 billion parameters, and, credit where due, actually in stock. No allocation drama, no lead time worth the name. You can walk into a Micro Center. It is a genuinely nice machine for local inference and a genuinely bad answer to "I need to train something big this weekend."
The card I would actually want. Does not have a checkout button. The datacenter-class silicon, the B200 and its relatives, is not a thing a person buys. That is the real lead-time story. Not "back in stock Tuesday," but "talk to your allocation rep and get in line behind everyone building a cluster." The honest lead time on the hardware I would genuinely use is measured in quarters and relationships, not shipping days.
So line them up. I would spend somewhere between $4,700 and $5,000 to own a card that would sit idle roughly seven hundred hours a month, depreciating the entire time, so that for the forty hours I actually need it I could do a slower version of what I can already rent. And it still would not be the hardware I want, because the hardware I want is not for sale to me at any price I would pay.
Now the rent side. I have credits on Lambda. Eight B200s runs about forty dollars an hour. Nebius rents the same class of hardware the same way. Forty real hours a month on the fastest silicon made comes in under what one slower card costs to buy, the neo-cloud eats the depreciation and the idle time and the memory-price roulette, and I get the good hardware instead of the consolation prize.
The whole agonized buy-versus-build debate turns out to be a little bit BS. For what I am doing, right now, the answer is: buy nothing. Rent the muscle, keep the credits, revisit it the day my usage stops being bursty. It is not a close call dressed up as a close call. It is a rounding error wearing a leather jacket.
Which just moved the entire problem. The decision was never "buy or rent." It was "how do I rent without giving up the thing that makes the lab worth having."
What I was not willing to give up
The reason a homelab is worth running at all is that you own the whole stack. The data is on disk you control. The control plane is code you wrote. Nothing phones home unless you told it to.
The naive way to use a neo-cloud throws all of that away. You spin up a GPU box, you copy your data up to it, you run your job in somebody else's account with their networking and their defaults, and now your working set is sitting on a disk in a region you picked from a dropdown while half-awake. It works. It is also a quiet reversal of the entire premise. You went to the trouble of keeping everything private and then handed the interesting part to a rental car.
I wanted the opposite arrangement. The neo-cloud box should be the dumb part. Muscle with no memory. It joins the lab, does the heavy thing, and when it is destroyed it should take nothing with it that I care about, because nothing I care about was ever really there. It was reached across a tunnel and left where it lives.
That reframes the neo-cloud from infrastructure into burst capacity. My infrastructure is at home. The rented GPU is a temporary limb, and the whole design is about making sure it stays a limb and never quietly becomes a second brain.

The tunnel is the whole product
Everything hard about this collapses into one decision: the rented box joins my private network, instead of me reaching out to its public one.
I run a Tailscale tailnet across the whole estate already. The lab, the Pi, the machines that resolve my DNS. Adding a neo-cloud instance to that mesh is one line in the provisioning script. The moment it comes up it authenticates into the tailnet and becomes a node with a stable private address, reachable from home and reaching nothing that home does not offer it. It never gets a meaningful public inbound surface. No port to expose, no bastion to harden, no SSH key sitting forgotten in a cloud console for a future me to be embarrassed about. It is a WireGuard peer that happens to have eight GPUs bolted to it.
Once that peer exists, the geography stops mattering. The GPU box mounts the working set over the tunnel from a share at home. It pulls the weights from home. It writes checkpoints back to home. The public internet is involved only as the dumb pipe the encrypted mesh rides on top of. It never sees plaintext and it never sees structure.
This is the part that took me the false starts to accept. My first version reached outward: my control plane held cloud credentials, SSH'd out to the box, ran commands over that connection. It worked and I threw it away, for the same reason I threw away the version of my upgrade agent that drove esxcli by hand. It made my home the client of a machine I did not trust, and it pointed the secrets and the reach in the wrong direction. Pulling the box into the tailnet inverts that. Home is the thing that exists. The GPU is a guest that showed up, and you do not give the guest your house keys just because he brought a nice car.
The lifecycle is the cost control
A rented GPU that you forget to turn off is not burst capacity. It is a forty-dollar-an-hour mistake that compounds while you sleep, and it does not feel like a mistake until the bill arrives wearing your own name.
So the instance is never something I create by hand and shut down when I remember. It is created by a script, and the same script is responsible for its death. The sequence is boring on purpose: provision, join the tailnet, wait until it is actually reachable at its private address, mount the working set, run the job, sync the results home, and then, whether the job succeeded, failed, or fell over halfway, destroy the box. The teardown is not the happy-path ending. It is a `finally` block. It runs even when everything else did not, especially when everything else did not.
That is the same lesson a hypervisor upgrade taught me the hard way once, worn now as a habit instead of a scar. The step at the end that feels like cleanup is the step that actually protects you, and it is exactly the step that gets skipped because it feels like cleanup. A GPU you spun up for a forty-minute job and left running overnight has quietly cost you more than the job was ever worth. The teardown has to be as automatic as the launch, or the economics that justified this whole approach stop being true right about the time you stop paying attention.
What actually lives where
The clean way to say it: three things, in three places, and never let them blur.
Data and weights live at home. They are reached across the tunnel and they stay where they live. The rented box holds a working copy for as long as it exists and holds nothing after it stops existing. A crash-consistent disk in someone else's region is not a place my data lives. It is a place my data visits, briefly, without unpacking.
The control plane lives at home. The thing that decides to provision, that holds the account credentials, that watches the job and tears the box down, is my code on my hardware. The neo-cloud never orchestrates anything. It receives instructions across a mesh it was invited into, and it has no standing to initiate.
The compute lives in the neo-cloud, and only there, and only for as long as the job. It is the one thing I genuinely cannot do at home, so it is the one thing I rent. Everything else I refused to rent, which is the entire point of the arrangement.
Why not just use a hyperscaler
Fair question, and the answer is not ideology.
The big clouds sell you the GPU wrapped in a hundred other things you did not ask for. Their identity model, their networking primitives, their storage tiers, their egress bill with the surprise at the bottom. For a lot of workloads that gravity is worth it, because you were going to live there anyway. I was not. I already have the identity model and the networking and the storage. I built them, on purpose, at some cost to my weekends. I did not want to adopt a second, parallel, more expensive version of all of it just to reach a card for forty hours.
The neo-clouds, Lambda and Nebius and the rest of that class, sell the card and mostly get out of the way. That is not a lesser product. For this shape of use it is the correct product, because the thing I am buying is silicon by the hour, and the thing I am pointedly not buying is somebody else's opinion about how to run my estate. The less the rental knows about me, the better it fits the design, and a neo-cloud is perfectly happy to know almost nothing.
The part I keep coming back to
I set out to add a GPU to my lab and ended up doing the opposite. I did not add anything to the lab. I built a way for the lab to briefly borrow one, use it hard, and give it back before it could accumulate any gravity of its own.
The tell that it is working is what happens when I destroy the box. Nothing breaks. DNS still resolves, the control plane is still up, every checkpoint the job produced is already home, and the only evidence the GPU ever existed is a line in a cost log and a folder of results that was mine the whole time. If tearing down the expensive part had broken anything, I would have built a dependency and called it a burst.
The neo-cloud is not my infrastructure. It is a limb I grow when there is something heavy to lift and reabsorb the moment there is not. My infrastructure is the thing that stayed home the entire time, which is the only thing I ever actually wanted to own. The 5090 can keep sitting in the cart.
References
- Field Signal - A 2.8-trillion-parameter model fits in 8 GB of RAM. It writes one token every 32 seconds. The local-inference number that made the buy-versus-rent question worth asking in the first place.
- Field Signal - The upgrade worked. Turning the machine back on is what failed. Where the finally-block lesson about teardown steps came from, the expensive way.
- Field Signal - I run Pi-hole on Kubernetes. There is no Pi. The tailnet this whole design leans on, described earlier.
