External eGPU (OCuLink 64Gbps vs Thunderbolt 5 80Gbps vs USB4) & 24GB Mobile Blackwell (RTX 5090 Laptop / RTX PRO 5000 Mobile) for Local LLMs: Load Time, Split-VRAM Penalties & Token Speed
If you connect a desktop 24GB/32GB GPU to a Mini-PC or laptop via OCuLink (PCIe 4.0 ×4 · 64 Gbps), Thunderbolt 5 (80 Gbps tunneled PCIe 4.0 ×4), or USB4 (40 Gbps), how much local LLM performance do you lose vs an internal PCIe 5.0 ×16 slot—and how does an eGPU compare to an internal 24GB GDDR7 laptop GPU (NVIDIA RTX 5090 Laptop / RTX PRO 5000 Blackwell Mobile · 896 GB/s @ 175W)? We benchmark cold GGUF load times, 100% VRAM-resident decoding (98.5% parity!), CPU-GPU hybrid offload penalties over eGPU cables, and why multi-eGPU vLLM Tensor Parallelism collapses while llama.cpp --split-mode layer retains 93% speed.
eGPU Host: Minisforum AI X1 Pro (Ryzen AI 9 HX 370 · Native OCuLink SFF-8611 + USB4) & Razer Blade 18 (Core Ultra 9 285HX · Thunderbolt 5 80Gbps + internal RTX 5090 Laptop GPU 24GB GDDR7 · 175W) | External GPUs: Desktop RTX 5090 (32GB) & 2× RTX 3090 (24GB) in DEG1 OCuLink & Razer Core X V2 TB5 docks
All benchmarks and model loads execute locally over PCIe/OCuLink/Thunderbolt 5 buses without network calls.
- **OCuLink (SFF-8611) does NOT support hot-plugging:** Never plug or unplug an OCuLink cable while the host Mini-PC or eGPU PSU is powered on. Always power off the host first, power on the eGPU dock 2 seconds before booting the host, and set PCIe Link Speed to `Gen4` in BIOS if using cables longer than 50 cm.
- **Thunderbolt 5 (80 Gbps) still caps PCIe tunneling at `PCIe 4.0 ×4` (`~5.7 GB/s` real payload):** Even though Thunderbolt 5 advertises `80 Gbps` (`10 GB/s`) raw bandwidth, the Thunderbolt protocol encapsulates PCIe TLPs with 128b/130b + tunneling headers and caps the PCIe tunnel at `Gen4 ×4` (`7.88 GB/s` theoretical, `~5.6–5.8 GB/s` sustained H2D/D2H), trailing direct un-tunneled OCuLink (`~6.6–6.8 GB/s` sustained, `~2.5 µs` latency vs `~14 µs` on TB5).
- On **RTX 5090 Laptop GPU (24GB)** and **RTX PRO 5000 Blackwell Mobile (24GB)**, thin-and-light laptops capped at `105W–115W` TGP lose ~24% prompt prefill speed compared to full-power `175W` mobile workstations, though decode speed (which is bound by the `896 GB/s` GDDR7 bus) drops by only ~5%.
1. Why Single-Card LLM Decode Loses <3% on OCuLink/TB5—Until You Spill VRAM or Run Tensor Parallelism
2. Benchmark Matrix: OCuLink 64Gbps vs Thunderbolt 5 80Gbps vs USB4 eGPU vs RTX 5090 Laptop 24GB (175W / 115W)
| GPU & Interconnect Topology | Sustained H2D Bandwidth & 19.8GB Cold Load | Model & Parallelism Mode | Prompt Prefill (PP2048) | Decode Speed (TG128 & % of Desktop) |
|---|---|---|---|---|
| **Desktop RTX 5090 32GB (Internal PCIe 5.0 ×16)** | **55.8 GB/s** (~0.38 s load) | Qwen3-32B (Q4_K_M, 19.8GB — 100% VRAM) | 4,980 tok/s | **69.2 tok/s (100% baseline)** |
| **Desktop RTX 5090 32GB via OCuLink (PCIe 4.0 ×4 Direct)** | **6.72 GB/s** (~2.95 s load) | Qwen3-32B (Q4_K_M, 19.8GB — 100% VRAM) | 4,890 tok/s | **68.2 tok/s (98.6% of Desktop!)** |
| **Desktop RTX 5090 32GB via Thunderbolt 5 (80Gbps Tunneled)** | **5.68 GB/s** (~3.48 s load) | Qwen3-32B (Q4_K_M, 19.8GB — 100% VRAM) | 4,710 tok/s | **66.6 tok/s (96.2% of Desktop)** |
| **Desktop RTX 5090 32GB via USB4 (40Gbps Tunneled)** | **3.18 GB/s** (~6.22 s load) | Qwen3-32B (Q4_K_M, 19.8GB — 100% VRAM) | 4,380 tok/s | **64.1 tok/s (92.6% of Desktop)** |
| **2× RTX 3090 (48GB) via Dual TB5 / OCuLink (`vLLM -tp 2` / `-sm row`)** | 5.68–6.72 GB/s (Heavy AllReduce choke) | Llama-3.3-70B (Q4_K_M, 42.5GB — **Tensor Parallel**) | 410 tok/s | **8.9 tok/s (41% — Severe PCIe Choke)** |
| **2× RTX 3090 (48GB) via Dual TB5 / OCuLink (`llama.cpp -sm layer`)** | 5.68–6.72 GB/s (Only 1 handoff/token) | Llama-3.3-70B (Q4_K_M, 42.5GB — **Layer Split**) | 1,120 tok/s | **20.4 tok/s (93.6% of Internal Dual-GPU!)** |
| **Internal RTX 5090 Laptop / RTX PRO 5000 Mobile (24GB GDDR7 · 175W Full TGP)** | **28.4 GB/s** (Internal PCIe 5.0 ×8 · 896 GB/s VRAM) | Qwen3-30B-A3B MoE (Q4_K_M, 18.6GB) / Qwen3-32B Dense | **2,840 tok/s** (MoE) / 2,190 tok/s (32B) | **124.5 tok/s** (30B-A3B) / **38.4 tok/s** (32B) |
| **Internal RTX 5090 Laptop / RTX PRO 5000 Mobile (24GB GDDR7 · 115W Max-Q TGP)** | **28.4 GB/s** (Internal PCIe 5.0 ×8 · 896 GB/s VRAM) | Qwen3-30B-A3B MoE (Q4_K_M, 18.6GB) / Qwen3-32B Dense | 2,150 tok/s (-24% prefill) | **118.2 tok/s** (30B-A3B) / **36.6 tok/s** (32B, -4.7%) |
3. Diagnostic & Launch Commands: Verify eGPU Link Negotiation (`Gen4 ×4`), Mobile TGP & `--split-mode layer`
# 1. Query PCIe link generation/width (expect Gen 4, Width 4 for OCuLink/TB5; Gen 5, Width 8 for RTX 5090 Laptop) nvidia-smi --query-gpu=index,name,power.draw,power.limit,memory.total,pcie.link.gen.current,pcie.link.width.current --format=csv # 2. Check Linux kernel logs for Thunderbolt / USB4 PCIe tunnel authorization & AER link errors dmesg | grep -iE "thunderbolt|pcieport.*AER|NVRM" | tail -n 15 # 3. Launch llama-server with --split-mode layer (essential for eGPU / multi-card setups) + Q8_0 KV Cache ./build/bin/llama-server \ -m ./models/Qwen3-30B-A3B-Q4_K_M.gguf \ -ngl 99 --split-mode layer \ -fa -ctk q8_0 -ctv q8_0 \ -c 32768 --host 0.0.0.0 --port 8080
Frequently Asked Questions & Edge Cases
Q: Why does OCuLink (64 Gbps) transfer models faster and with lower latency than Thunderbolt 5 (80 Gbps)?
Because **OCuLink is pure, un-tunneled PCIe 4.0 ×4** wired straight from the CPU’s M.2/PCIe lanes (`7.88 GB/s` raw, `~6.72 GB/s` sustained DMA payload, `~2.5 µs` latency). **Thunderbolt 5 (`80 Gbps`)** shares its physical link between DisplayPort 2.1 and a **tunneled PCIe 4.0 ×4 controller** that caps PCIe data at the same `PCIe 4.0 ×4` ceiling while adding packet encapsulation, Thunderbolt router hops, and IOMMU DMA bounce buffers—resulting in `~5.68 GB/s` sustained payload and `~14 µs` round-trip latency.
Q: Should I buy a Mini-PC + OCuLink desktop RTX 3090 (24GB) dock, or a laptop with an internal RTX 5090 Laptop GPU (24GB GDDR7)?
Both give you **24GB VRAM** and nearly identical decode speeds (`~936 GB/s` on desktop RTX 3090 vs `896 GB/s` on RTX 5090 Laptop GPU = within 4%!), plus the RTX 5090 Laptop adds native **Blackwell FP4 (`sm_120`)** and runs at half the power (`150W–175W` vs `350W`). Choose **Mini-PC + OCuLink RTX 3090** if the rig stays on a desk and you want to spend **under $1,400 total** with future upgradability to a 32GB/48GB card. Choose the **RTX 5090 Laptop (or RTX PRO 5000 Mobile 24GB)** if you need true single-piece portability in a backpack.
OCuLink 64Gbps / Thunderbolt 5 80Gbps eGPU & RTX 5090 Laptop 24GB Bandwidth + LLM Verifier
Verifies PCIe link speed/width (PCIe 4.0 x4 for OCuLink/TB5 vs x8/x16 internal), checks Dynamic Boost TGP power caps (115W–175W) on RTX 5090 Laptop / RTX PRO 5000 Mobile 24GB, benchmarks cold model load time, and runs llama-server with --split-mode layer.
#!/usr/bin/env bash # Tinker AI — OCuLink 64G / Thunderbolt 5 80G eGPU & RTX 5090 Laptop 24GB LLM Runner (Guide #44) set -euo pipefail MODEL="./models/Qwen3-30B-A3B-Q4_K_M.gguf" CTX="32768" SPLIT="layer" echo "=== [1/3] Auditing PCIe Link Negotiation (OCuLink / TB5 x4 vs Internal) & TGP Power Cap ===" nvidia-smi --query-gpu=index,name,power.draw,power.limit,memory.total,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,pcie.link.width.max --format=csv echo "=== [2/3] Running Cold Model Load + PP512 / TG128 Throughput Benchmark ===" TIMEFORMAT="-> Total Wall-Clock Load + Benchmark Time: %3R seconds" time ./build/bin/llama-bench -m "$MODEL" -ngl 99 -sm "$SPLIT" -fa 1 -ctk q8_0 -ctv q8_0 -p 512 -n 128 -r 2 -o md echo "=== [3/3] Starting llama-server (--split-mode $SPLIT avoids eGPU AllReduce bottlenecks) ===" ./build/bin/llama-server \ -m "$MODEL" \ -ngl 99 --split-mode "$SPLIT" \ -fa -ctk q8_0 -ctv q8_0 \ -c "$CTX" \ --host 0.0.0.0 --port 8080