eGPU via OCuLink: Adding a Desktop GPU to a Mini PC
How a 1.5mm cable lets a tiny box punch like a tower, and where the seams show

Contents
For years the external GPU story was a sad one: Thunderbolt enclosures that cost as much as a mid-range card, ate a third of your bandwidth in overhead, and dropped the link if you breathed on the cable. OCuLink quietly changed that. It’s an external PCIe connector — no protocol translation, just raw PCIe lanes on a cable — and a growing number of mini PCs now ship with a port. I’ve been running a desktop GPU off a palm-sized machine for a few months, and it’s the first eGPU setup I’d actually recommend.
What OCuLink is and why it’s better
Thunderbolt eGPUs tunnel PCIe inside the Thunderbolt protocol, which adds latency and caps you at the equivalent of roughly PCIe 3.0 x4. OCuLink doesn’t tunnel anything. An OCuLink SFF-8612 cable carries four PCIe lanes directly. On a mini PC wired for PCIe 4.0, that’s x4 at gen 4 speeds — about 7.9 GB/s, double what a typical Thunderbolt enclosure manages.
It’s still only four lanes, so it isn’t a full x16 desktop slot. But for inference, transcoding, and the vast majority of compute work, x4 gen 4 is plenty — these workloads are rarely bandwidth-bound across the bus. Once a model’s weights are loaded into VRAM, the GPU chews on them locally and barely touches the PCIe link; the bus only matters for getting data in and out, not for the compute itself. Even for gaming the penalty is in the low single-digit percentages at sensible resolutions. The case where x4 genuinely bites is a workload that constantly streams data across the bus — some scientific compute, or a model too large for VRAM that’s spilling to system RAM — and if that’s you, no external connector is going to save you; you want a real x16 slot.
A quick reality check on the numbers, because the marketing around eGPUs is full of optimistic figures. A Thunderbolt 3/4 enclosure gives you the equivalent of PCIe 3.0 x4, around 3.9 GB/s of usable throughput after protocol overhead, and adds tunnelling latency on top. OCuLink with PCIe 4.0 x4 is roughly 7.9 GB/s with no tunnelling. So it’s not a small win at the margins — it’s double the bandwidth and lower latency, for a connector that costs a fraction of a Thunderbolt enclosure. The catch, which I’ll come back to, is that OCuLink gives up the one thing Thunderbolt does well: civilised hotplug.
The hardware is unglamorous: an OCuLink port on the mini PC, an OCuLink-to-PCIe adapter board that the GPU slots into, the cable, and a separate ATX power supply for the card. There’s no fancy enclosure required. My “enclosure” is the adapter board sitting on a piece of MDF next to the mini PC, with a 550W PSU jump-started so it powers on without a motherboard.
Jump-starting the PSU
This is the bit nobody warns you about. A standard ATX PSU won’t turn on unless its motherboard says so. Without a motherboard, you bridge two pins on the 24-pin connector — the green PS_ON line to any black ground:
| |
There are purpose-made jumper plugs for exactly this; buy one rather than relying on a literal paperclip that can fall out. With the PSU on, the GPU has 12V before the mini PC even boots, which is the correct order — the card should be powered when the link trains.
A safer alternative to the bare-PSU-on-a-board approach is an add-in-board adapter that includes its own power sequencing, or a small “PSU sync” cable that ties the GPU’s PSU to the mini PC’s power so the two come up and go down together. I ran the manual jump-start for a while and it’s fine, but if the card and the host are on independent power, you have to remember to switch the GPU’s PSU on before you boot the host, every time. A sync cable removes that footgun. Either way, don’t skimp on the PSU itself — a cheap no-name unit feeding a 200W GPU is exactly the kind of false economy that turns into a debugging session at the worst moment. A known-good 550W unit is overkill for a single mid-range card, and overkill is what you want from the component whose job is “don’t catch fire.”
Confirming the link on Linux
Boot the mini PC with the cable connected and check that the card shows up at full speed. lspci tells you the truth:
| |
Speed 16GT/s is PCIe 4.0; Width x4 is the OCuLink lane count. If you see Speed 8GT/s (gen 3) or a narrower width, your BIOS may have negotiated down — check for a PCIe link-speed setting and make sure the port isn’t sharing lanes with an NVMe slot.
Then confirm the driver is happy:
| |
For an AMD card you’d be looking at the same picture via lspci and a working amdgpu driver — no proprietary blob, which is one fewer thing to break.
What I actually run on it
The whole point of this exercise, for me, is local AI workloads on a box that idles at single-digit watts the rest of the time. With the 4070’s 12GB of VRAM, the eGPU comfortably runs quantised local LLMs through Ollama, handles a Stable Diffusion image-generation workload that fits inside a budget VRAM envelope, and does the occasional lightweight fine-tune. If you’re trying to decide what’s even feasible on a single mid-range card, the constraints in LoRA fine-tuning on consumer hardware map almost exactly onto what an OCuLink eGPU can do — the bus speed is irrelevant to those workloads, so the eGPU performs like the same card would in a tower.
The one thing to keep clear in your head: the OCuLink card behaves like a perfectly normal PCIe GPU to everything in userspace. Ollama, ROCm/CUDA, nvidia-container-toolkit, a Docker container with --gpus all — none of them know or care that the card is on the end of a cable. That’s the beauty of not tunnelling the protocol. The GPU is just a GPU.
Where the seams show
Hotplug is the weak spot. OCuLink was never designed to be plugged and unplugged with the system running; the spec allows it electrically, but the Linux PCIe hotplug path for an external GPU is fragile. In practice I boot with the cable connected and leave it connected. Treat it as an internal card that happens to live outside the case, not a laptop dock.
The second seam is display output. If you want the GPU driving a monitor, plug the monitor into the GPU, not the mini PC. Routing the external GPU’s output back through the mini PC’s internal display works on some setups and not others, and it costs you performance. For a headless compute box — my use case — none of this matters; the card does its work and the results come back over the network.
Cable length is the last gotcha. PCIe is fussy about signal integrity; stick to 50cm or shorter OCuLink cables. The 1m ones exist and mostly work, but “mostly” is not a word you want near a PCIe link.
Troubleshooting the usual failures
When an OCuLink eGPU misbehaves, it’s almost always one of a handful of things, and the symptoms are distinctive enough to diagnose quickly.
The card doesn’t appear in lspci at all. Either the GPU’s PSU wasn’t on when the host booted (the link can’t train without power on the card), or the OCuLink port is disabled in firmware. Power the GPU first, then cold-boot the host. If it’s still absent, check BIOS for an “OCuLink” or “PCIe x4 slot” enable toggle — some mini PCs ship with it off by default.
It appears but at gen 3 (Speed 8GT/s) or narrower than x4. The port is sharing lanes. On many mini PCs the OCuLink lanes are multiplexed with an M.2 NVMe slot or a second port; populate the wrong slot and the link drops to x2 or falls back a generation. Pull the competing M.2 device, or look for a BIOS bifurcation setting. Confirm with the lspci -vv ... | grep LnkSta check above — LnkSta is the negotiated state, which is what actually matters, versus LnkCap (the capable state, which is just the hardware’s maximum).
Random hangs or the link drops under load. This is nearly always signal integrity: a too-long cable, a marginal connector, or a card drawing more than the riser/adapter board cleanly delivers. Swap to a 50cm cable, reseat both ends of the OCuLink connector (it’s a tight fit and a partial seat looks identical to a full one), and make sure the GPU’s supplementary power connectors are properly seated on the PSU side.
Thermals. An open-air card on a board has better airflow than one crammed in a case, so overheating is rarely the problem — but the mini PC itself can run warm if the GPU work also loads its CPU. Keep an eye on both with nvidia-smi -l 1 and the host’s own sensors; a thermally throttling host CPU can look like a mysterious GPU performance regression.
nvidia-smi shows the card but CUDA apps can’t find it. That’s a driver/container plumbing issue, not an OCuLink issue — the same thing that bites any GPU passthrough setup. Check the driver version matches the CUDA toolkit, and that the container runtime is wired up. This is the point where OCuLink stops being special: from here up the stack it’s an ordinary GPU problem with ordinary GPU solutions.
Is it worth it / who is this for
This is for the person who likes the footprint and power draw of a mini PC but occasionally needs real GPU horsepower — local LLM inference, video transcoding, the odd training run, or a compact gaming box. You get most of a desktop GPU’s capability without committing to a desktop’s bulk and idle wattage.
It is not for someone who wants laptop-style “plug in at my desk, unplug and go” convenience; the hotplug story isn’t there yet, and you should plan to leave it bolted in place. It’s also not cheaper than just buying a small tower with a real PCIe slot. But if you already own the mini PC and value the form factor, an OCuLink adapter, a cheap PSU, and a cable turn it into something genuinely more capable for about £60 of parts. After Thunderbolt eGPUs burned me twice, this is the first one I’ve kept.



