--- name: gpu-llm-homelab description: Evaluate GPUs for llama.cpp LLM inference in self-hosted homelab servers — bandwidth analysis, VRAM sizing, CUDA vs Vulkan, case fit, PSU requirements. --- # GPU Evaluation for LLM Inference (Homelab) How to compare GPUs for llama.cpp inference. The metrics that matter are different from gaming. ## The Only Numbers That Matter 1. **Memory bandwidth (GB/s)** — THE bottleneck. Token generation speed = bandwidth ÷ model size. Higher = faster. 2. **VRAM (GB)** — determines what models you can fit. Q4_K_M 7B ≈ 4.7 GB, Q4_K_M 14B ≈ 9 GB, Q4_K_M 32B ≈ 18 GB. 3. **CUDA support** — not optional. Vulkan works but is slower and buggier. AMD ROCm doesn't support consumer RDNA cards. No CUDA = permanently second-class. 4. **Bus width** — the hidden trap. 128-bit cards (RTX 4060/5060 series) cap bandwidth regardless of VRAM. A 16GB card on 128-bit is slower than an 8GB card on 256-bit. Everything else (CUDA core count, clock speed, architecture generation, Tensor cores) is secondary for llama.cpp. ## The 128-Bit Bus Trap NVIDIA's xx60 series has been on 128-bit since 4060 generation. These cards are gaming-first designs where cache compensates for narrow bus — but LLMs don't benefit from cache. Result: a 4060 Ti 16GB (288 GB/s) is **slower than a GTX 1080 from 2016** (320 GB/s) at 4× the price. Always check the bus width before getting excited about VRAM. ## AMD Cards for LLMs AMD cards look good on paper (more VRAM per dollar) but: - No CUDA — stuck on Vulkan backend - ROCm excludes consumer RDNA/RDNA2/RDNA3/RDNA4 cards - llama.cpp Vulkan has fewer optimizations, more bugs - Only worth it if the card is **dramatically** cheaper per GB than NVIDIA Unless the user explicitly wants AMD for gaming or gets an extreme deal, steer toward NVIDIA + CUDA. ## Evaluation Checklist When a user asks about a GPU for LLM: 1. **Look up specs**: bandwidth, VRAM, bus width, CUDA cores (TechPowerUp GPU database) 2. **Calculate token speed relative to current card**: bandwidth_ratio × backend_factor (CUDA ~20% faster than Vulkan) 3. **Model ceiling**: what's the biggest model at Q4_K_M (VRAM × 0.8)? 4. **Check PSU**: wattage headroom (GPU TDP + CPU TDP + 50W), available PCIe power connectors 5. **Check case**: GPU length, slot width, cooling type (blower vs open-air), airflow 6. **Price-to-bandwidth ratio**: $/GB_per_second = price ÷ bandwidth. Lower is better. ## Power Consumption Reality - LLM inference is bursty — GPU idles at 25-35W, spikes to TDP for seconds per request - 24/7 idle cost dominates. At $0.13/kWh: 25W idle = $2.34/month, 30W idle = $2.81/month - Difference between cards at idle is pennies. Peak draw only matters for PSU sizing. - Power limit with `nvidia-smi -pl` can reduce noise with near-zero inference speed loss (bandwidth-bound, not core-bound) ## Prebuilt Desktop Pitfalls Prebuilt systems (HP OMEN, Dell XPS, Alienware) have constraints: - **Proprietary PSUs**: may be non-standard form factor. Check before assuming ATX fits. - **Limited PCIe cables**: prebuilt PSUs often have fewer connectors than aftermarket. A 750W prebuilt PSU might only have 2× 8-pin even though a retail 750W has 4. - **GPU clearance**: measure, don't assume. 300mm is a common max for mid-towers. - **Cooling**: open-air GPUs dump heat into the case. In airflow-limited prebuilts, blower-style (rear exhaust) cards are safer. - **Power limit as noise control**: `sudo nvidia-smi -pm 1 && sudo nvidia-smi -pl 280` caps a 3090 at 280W with minimal speed loss. ## Value Tiers (used market, mid-2025) | Tier | Price | Cards | Bandwidth | VRAM | |------|-------|-------|-----------|------| | Budget | $80-100 | GTX 1080 8GB | 320 GB/s | 8 GB | | Sweet spot | $150-170 | GTX 1080 Ti 11GB | 484 GB/s | 11 GB | | Best value | $280-320 | RTX 2080 Ti 11GB | 616 GB/s | 11 GB | | High-end | $600-700 | RTX 3090 24GB | 936 GB/s | 24 GB | | Overkill | $1200+ | RTX 4090 24GB | 1008 GB/s | 24 GB | Skip the 128-bit generation (4060/5060/4060 Ti/5060 Ti) entirely. Skip AMD unless the deal is absurd. ## After Purchase - Enable persistence mode: `sudo nvidia-smi -pm 1` - Set conservative power limit: `sudo nvidia-smi -pl ` (80% of TDP is safe) - CUDA backend in llama.cpp: `-ngl 99` (offload all layers) - Verify with `nvidia-smi` — should show llama-server process with expected VRAM