This is a reference architecture, not a tested build. Components are specified from published manufacturer documentation and are compatible on paper. Nobody at AI Gear Stack has assembled this machine or run it for a year.
The other two architectures on this site describe machines that sit under a desk and work when you do. The $2,000 machine optimises for capability per dollar; the dual-GPU 70B machine optimises for capability per anything.
This one is different in a way that inverts several of their recommendations, because it is specified around a fact neither of them has to think about: it is switched on when you are asleep.
Routes to an always-on node
-
Best for Homelabs
Framework Desktop (Ryzen AI Max+ 395)
96 GB addressable by the GPU at 256 GB/s in a 4.5-litre box drawing about 120 W under load. Holds models the dual-GPU build needs 700 W of graphics cards to reach, and does it quietly enough to live in a cupboard.
-
Best Value
GMKtec EVO-X2 (Ryzen AI Max+ 395)
The same Strix Halo silicon and the same 128 GB pool, usually for less. You trade documentation, parts availability and 5 GbE for 2.5 GbE.
-
Best Low-Power Option
NVIDIA GeForce RTX 5060 Ti 16GB
The CUDA route, if image generation or tooling requires it. 16 GB at 448 GB/s in 180 W — faster per token than unified memory, and a quarter of the capacity.
The number that decides this build
A machine that runs continuously spends the overwhelming majority of its life doing nothing. Peak performance is what you notice; idle draw is what you pay for.
| Continuous draw | Per year | What it is |
|---|---|---|
| 15 W | 131 kWh | A mini PC doing nothing much |
| 30 W | 263 kWh | A mini PC with a model resident |
| 60 W | 526 kWh | A small discrete card, idling |
| 100 W | 876 kWh | A large discrete card with weights loaded |
| 150 W | 1,314 kWh | A workstation someone forgot to tune |
Multiply the right-hand column by your own electricity tariff — we do not publish prices, and household rates vary by more than a factor of three between countries.
Two things follow, and both of them push against the advice in the other two architectures.
Heat is continuous, not bursty. A machine drawing 100 W puts 100 W of heat into wherever it lives, permanently. In a cupboard or a small room, that is noticeable within an hour and cumulative over a summer.
Peak throughput is worth less than it looks. If the machine answers a few dozen queries a day, the difference between 20 and 40 tokens per second costs you seconds of waiting and saves you nothing else. The difference between 30 W and 100 W idle costs you 613 kWh a year, every year.
That is the whole thesis. Buy the machine that is cheap to leave on, not the machine that is fast when used.
The decision unique to always-on machines
Here is a question the desk machines never have to answer: do you keep the model loaded?
Ollama unloads a model from VRAM five minutes after the last request by default (OLLAMA_KEEP_ALIVE=5m). Set it to -1 and the model stays resident indefinitely; set it to 0 and it unloads the moment a request finishes.
Both settings cost something, and which one is right depends on hardware you have not bought yet.
Keeping it resident means the first token arrives immediately, at any hour, without warning the machine. It also means the memory holding it stays clocked up. On a discrete card, allocated VRAM keeps the memory subsystem awake — a card that idles near 20 W with nothing loaded can sit at 100 W or more with weights resident and no work being done. That is the single largest controllable number in this architecture.
Letting it unload drops idle draw to the floor and pays for it in cold-start latency, which is a storage problem:
| Weights live on | Approximate read rate | Time to load a 42 GB model |
|---|---|---|
| Local NVMe, PCIe 4.0 | ~5 GB/s | Under 10 seconds |
| NAS over 10 GbE | ~1.1 GB/s | ~40 seconds |
| NAS over 2.5 GbE | ~280 MB/s | ~2.5 minutes |
| NAS over 1 GbE | ~112 MB/s | Over 6 minutes |
So the keep-alive setting, the storage layout and the network specification are one decision, not three. A machine with local NVMe can unload aggressively and still feel instant. A machine loading from a NAS over 2.5 GbE cannot, and must either keep models resident or accept that every conversation starts with a wait.
This architecture specifies local NVMe for the active models and aggressive unloading, because that combination gives the lowest idle draw with a cold start most people will not notice.
Which is why unified memory wins here
On the desk machines, a discrete NVIDIA card is the obvious answer and the only real question is which one. Here it is genuinely arguable, and the argument mostly goes the other way.
| Product | VRAM | Bandwidth | Power | Runs up to | Where to buy |
|---|---|---|---|---|---|
| Framework Desktop (Ryzen AI Max+ 395) Framework | 96 GB | 256 GB/s | Approximately 120 W typical under sustained inference load | 70B at Q4, using the large GPU memory allocation | Check Price on Amazon Framework Desktop (Ryzen AI Max+ 395) at Amazon — opens in a new tab |
| Apple Mac mini (M4 Pro) Apple | 64 GB | 273 GB/s | Very low — well under 100 W under sustained load | 32B at Q4 comfortably | Check Price on Amazon Apple Mac mini (M4 Pro) at Amazon — opens in a new tab |
| NVIDIA GeForce RTX 5060 Ti 16GB NVIDIA | 16 GB | 448 GB/s | 180 W total board power; 600 W system PSU recommended | 14B at Q4, at roughly half the token rate of a 5070 Ti | Check Price on Amazon NVIDIA GeForce RTX 5060 Ti 16GB at Amazon — opens in a new tab |
| NVIDIA GeForce RTX 3090 NVIDIA | 24 GB | 936 GB/s | 350 W total board power; 850 W system PSU recommended | 32B at Q4 with modest context | Check Price on Amazon NVIDIA GeForce RTX 3090 at Amazon — opens in a new tab |
A Strix Halo machine allocates up to 96 GB of its 128 GB pool to the GPU and reads it at 256 GB/s. That bandwidth is a quarter of a 3090’s, so it generates tokens perhaps three to four times more slowly — and it does so while drawing about 120 W at full tilt, idling in single-digit-to-low-double-digit watts, and making almost no noise.
For a desk machine that trade is poor. For a machine answering occasional queries at three in the morning, it is close to ideal: it holds a 70B model that the dual-GPU build needs 700 W of graphics cards to reach, in a 4.5-litre box you can put in a cupboard.
The honest limits, because they are real:
- No CUDA. ROCm and Vulkan back-ends work well for llama.cpp-family inference and less well for everything else. Image generation and fine-tuning are markedly worse served.
- 256 GB/s is not fast. It is enough to make 70B usable and not enough to make it quick. Read the VRAM explainer on why bandwidth divided by model size predicts your token rate.
- Soldered memory. What you buy is what you have, forever.
Specify a discrete card instead if the server also does image generation, or if you need CUDA for anything. In that case a 16 GB card at 180 W is the sensible ceiling — and configure it with nvidia-smi -pl rather than accepting stock limits.
The component specification
| Component | Specification | Why |
|---|---|---|
| Compute | Strix Halo mini PC, 128 GB unified (96 GB to GPU) | 70B capability at a fraction of the power |
| — alternative | Small-form-factor PC with a 16 GB card, power-limited | If CUDA or image generation is required |
| Primary storage | 2 TB NVMe for active models | Makes aggressive unloading viable |
| Model library | NAS or a second large drive | Weights accumulate faster than anyone expects |
| Network | 2.5 GbE minimum, 10 GbE if the library is remote | Not for the inference traffic — see below |
| Power | Whatever the machine ships with | This is a 120 W device, not a 900 W one |
| Placement | Somewhere with real airflow and an ambient you have thought about | A cupboard is a thermal decision |
| Remote access | WireGuard or Tailscale. Not a forwarded port | See the exposure section |
Read that as a specification rather than a shopping list. The requirements — capacity, bandwidth, idle draw, network topology — hold; a named model is one example that satisfies them.
Networking: buy it for the weights, not the tokens
This is where homelab instinct misleads people, so it is worth doing the arithmetic.
A model generating 30 tokens per second emits roughly 120 bytes per second of actual content. Wrap it in server-sent events, HTTP framing and TLS and you are still comfortably under 10 KB/s. A 1 GbE link is roughly ten thousand times more capacity than a conversation needs.
Nothing about interactive inference is bandwidth-limited. If your chat feels slow, the bottleneck is the GPU’s memory bandwidth, not your switch.
What genuinely wants a fast network:
- Pulling models. A 42 GB download saturates whatever you have.
- Loading models from a NAS, per the table above — which is the case where the network becomes a latency problem you feel at the start of every conversation.
- Datasets and backups, which is the ordinary homelab reason.
So the guidance in 2.5GbE versus 10GbE applies unchanged, with one addition specific to this machine: if the model library lives on a NAS, the network moves onto the critical path and 10 GbE stops being a luxury. If models live on local NVMe, 2.5 GbE is ample and 1 GbE is survivable.
Running it headless
A machine with no monitor needs three things confirmed, all in firmware, and all easier to check before the machine is in a cupboard.
Restore on AC power loss. Default on most boards is to stay off after an outage. Find the setting — it is usually under a power-management heading — and set it to power on. Otherwise the first brief outage silently ends your uptime until you next walk past.
POST without a display. Some boards halt on boot with no display attached. Most modern ones do not. This is worth testing deliberately rather than discovering remotely.
Wake-on-LAN, if you intend to suspend rather than run continuously. Which, incidentally, is worth considering: a machine that suspends to RAM at 3 W and wakes on a packet has different economics from one that idles at 30 W, at the cost of a few seconds of wake latency.
Headless has one straightforward benefit on a discrete-GPU build: with no desktop session, the compositor is not holding several hundred megabytes of VRAM, and all of it is available to the model.
Exposure: the section that matters most
Ollama has no authentication. None. It binds to 127.0.0.1:11434 by default, and that default is the only thing protecting it.
Setting OLLAMA_HOST=0.0.0.0 to reach the server from your laptop exposes an unauthenticated API to every device on the network — one that will accept any prompt, pull down new models, and delete existing ones on request. Forward that port through your router and you have published a machine that anyone who scans for it can use as their own inference server, at your electricity cost, with no log of who did what. Internet-wide scans routinely turn up thousands of instances in exactly that state.
Three ways to do this correctly, in order of preference:
- A WireGuard or Tailscale tunnel. The server keeps listening on localhost or a private interface; your other devices join the same private network. This is the right answer for almost everyone and takes about fifteen minutes.
- A reverse proxy that terminates TLS and requires authentication in front of the API, bound to the LAN only. More moving parts, useful if several people share the machine.
- Bind to the LAN interface with a firewall rule restricting source addresses. Workable, and the easiest of the three to get subtly wrong.
Never option four, which is a forwarded port and a hope.
Two more things follow from a machine being on continuously rather than intermittently: it is a persistent target, so key-based SSH only, no password authentication, and unattended security updates enabled. A desktop that is off two-thirds of the day forgives a lot of this. A server does not.
What the finished machine runs
For the specified Strix Halo configuration, at Q4_K_M:
| Model class | Fits in 96 GB? | Practical experience |
|---|---|---|
| 8B | Easily | Fast enough to feel instant |
| 32B | Yes, comfortably | The sweet spot for this machine |
| 70B | Yes | Usable, and noticeably slower than a discrete card |
| Beyond 70B | Memory yes, patience no | 256 GB/s is the limit you will feel |
The capacity is genuinely unusual for the power envelope — 96 GB addressable by the GPU is double what two 3090s provide. What you are trading away is the speed at which it can be read, and on a machine used a few dozen times a day that is a trade many people should take.
Before you deploy: verification checklist
The other two architectures’ checklists are about parts fitting together. This one is mostly about behaviour over time, and almost all of it can be verified in the first hour.
- Measure idle draw at the wall, with a plug meter, in the state you intend to leave the machine. This is the one number that decides the economics of the whole build, it takes five minutes, and no specification sheet will tell it to you.
- Measure it again with a model resident, then decide the keep-alive setting from the difference rather than from a guess.
- Time a cold start from your actual storage layout. If it is longer than you will tolerate at 8 a.m., either move models to local NVMe or keep them loaded.
- Confirm restore-on-AC-power-loss in firmware, then verify it by pulling the plug.
- Confirm it POSTs headless, before it goes in the cupboard.
- Check ambient temperature where it will actually live, after it has been running an hour with the door shut. Cupboards recirculate.
- Verify the API is not reachable from outside your network. From a phone on mobile data, off Wi-Fi, try to reach it. Nothing should answer.
- Confirm unattended upgrades are enabled and SSH accepts keys only.
- Confirm the model library is backed up. Re-downloading 400 GB of weights is a slow afternoon.
When not to build this
- If it is your only machine. This architecture deliberately sacrifices peak speed for idle draw. As a desk machine it will feel sluggish, and the $2,000 build is a better use of the same money.
- If you need CUDA. Image generation, fine-tuning and most research tooling assume it. The unified-memory route is weakest exactly where the ecosystem is strongest.
- If it will serve several people at once. Concurrency wants batching, batching wants compute and bandwidth, and this machine is specified to have neither in quantity — the multi-user inference server is specified for that instead.
- If you already have the dual-GPU machine. Running it headless with a hard power limit is a worse always-on server than this one and a much better everything else, and one machine that does both is usually the right answer for a household.
Frequently asked questions
Is it actually cheaper to leave it on than to switch it off?
Almost never cheaper — just more convenient. A machine idling at 30 W costs 263 kWh a year to be available at any hour; one that is switched on when needed costs a fraction of that plus a wait. The argument for always-on is that a server you have to go and turn on is a server you stop using. Suspend-to-RAM with wake-on-LAN is a genuine middle path at a few watts.
Should I keep the model loaded in VRAM?
It depends entirely on where the weights live. With local NVMe a cold start is under ten seconds, so unloading aggressively costs almost nothing and can save 70 W or more of continuous draw. With a model library on a NAS over 2.5 GbE a cold start is around two and a half minutes, and keeping it resident stops being optional. Measure both states at the wall before deciding.
Do I need 10 GbE for an AI server?
Not for the inference itself. A conversation streaming at 30 tokens per second moves well under 10 KB/s — a 1 GbE link has roughly ten thousand times the capacity required. You need fast networking if the model library lives on a NAS, because loading weights then sits on the critical path, and for the ordinary homelab reasons of datasets and backups. Buy it for the weights, not the tokens.
Is unified memory fast enough for 70B?
Usable, not quick. 256 GB/s against a 42 GB model gives a theoretical ceiling around 6 tokens per second, and real throughput lands below that — readable at roughly conversational pace, slower than most people expect after using a discrete card. The trade is that no discrete setup reaches 96 GB of addressable memory anywhere near 120 W. For a machine answering occasional queries, capacity is usually worth more than speed.
Is it safe to expose Ollama to my network?
To your local network, with a firewall and devices you control, it is a judgement call. To the internet, no — the API has no authentication whatsoever and will accept prompts, pull models and delete them from any caller that can reach it. Internet-wide scans routinely find thousands of instances left in that state. Use WireGuard or Tailscale so the API never leaves a private network, or put an authenticating reverse proxy in front of it.
Can I use my old gaming PC for this?
You can, and it is the cheapest possible start, but check what it costs to leave on before committing. An older machine idling at 80–120 W with a model resident will consume 700–1,050 kWh a year, which is often more than the difference in purchase price over a few years — and it puts that heat into the room the whole time. Measure it at the wall before deciding.
Where should the machine physically live?
Somewhere with genuine airflow and an ambient temperature you have checked with the door shut for an hour. A cupboard recirculates its own exhaust, and a 120 W device raises a small enclosed space by more than people expect. Noise matters less than for a desk machine, which is one of the few constraints this architecture relaxes rather than tightens.
Have you built and run this machine?
No. It is a reference architecture: the components are specified from published documentation and are compatible on paper. The checklist here is unusually heavy on measurement rather than fitment, because the things that decide whether an always-on machine was a good idea — real idle draw, real cold-start time, real ambient temperature in the place it lives — cannot be established from a spec sheet, and can be established by you in about an hour.