Lokale LLM-server met RTX 3090
De wens: een lokale LLM-server
Het doel is een headless server thuis, in de kast aan een UTP-kabel, die twee dingen tegelijk doet:
1. Lokale LLM-inference
- Grote modellen draaien (70B-120B+) met hoge codekwaliteit — minimaal 4-bit quantisatie, bij voorkeur hoger
- Overdag interactieve chat — lage time-to-first-token (< 2-5s) met kleinere modellen (8B-32B)
- 's Nachts deep reasoning / agentic batch — maximale tokens/sec × context × modelkwaliteit, geen harde latency-eis
- RAG (Retrieval-Augmented Generation) op eigen documenten
- Agentic workflows — harnesses die autonome taken uitvoeren voor coding en onderzoek
2. Lokale services (dezelfde machine)
- Ollama / llama.cpp — LLM-runtime, als aparte infrastructuurlaag met OpenAI-compatible API
- Open WebUI — frontend voor LLM-interactie
- OpenClaw — agent-orchestratie
- Postgres — development/test-database
- Caddy / nginx — reverse proxy om services te exposen
- Bookstack — kennisbank/wiki
- Vaultwarden — wachtwoordmanager
- LinkDing — bookmark-manager
- Kanban-app (Plane / Vikunja) — taakbord
- Alle services draaien in Docker — één compose-bestand, één deploy-commando
De server is headless (geen monitor, geen toetsenbord), staat in een kast, en communiceert alleen over UTP. Lawaai en hitte zijn geen probleem. Het platform is ontworpen voor maximaal 2 GPU's — nu starten met 1× RTX 3090, later uitbreiden naar 2× voor 70B+ modellen in hoge kwaliteit.
Waarom deze configuratie?
GPU: MSI SUPRIM RTX 3090 24GB
De RTX 3090 is de beste prijs/prestatie-kaart voor lokale LLM-inference. Waarom?
- 24GB VRAM — ideaal voor 8-14B modellen in Q8 en 27-32B modellen in Q4/Q5. Grotere modellen kunnen gedeeltelijk naar RAM worden geoffload, maar dat kost snelheid.
- 936 GB/s bandbreedte — LLM-token-generatie is bandbreedte-gelimiteerd. De 3090 heeft dezelfde bandbreedte-klasse als de 4090, voor de helft van de prijs.
- NVLink aanwezig — de laatste NVIDIA-consumerkaart met NVLink. In de praktijk is NVLink voor LLM-inference met pipeline parallelism (llama.cpp standaard) geen architectuurvereiste; het voordeel van twee kaarten zit primair in 48GB fysiek VRAM, niet in "twee keer zoveel snelheid".
- MSI SUPRIM — een van de beste AIB-koelers voor de 3090, met dubbel-kogellager fans (100k+ uur MTBF) en een massief koellichaam. Let op: de SUPRIM is een 2.7-slot dikke kaart met een officieel stroomverbruik van 420W. Voor 24/7 LLM-inference is power limiting naar 300-350W een goede optimalisatie: nauwelijks tok/s-verlies, aanzienlijk minder warmte.
- Tweedehands — de GPU-core (GA102-chip) is zeer duurzaam, maar bij een gebruikte kaart zijn VRAM-temperaturen, fans en thermal pads de echte slijtagepunten. Vervangen van pads (~€15-20) is sterk aanbevolen.
Later uitbreidbaar naar een tweede RTX 3090 (max 2 op dit platform). Met 48GB VRAM totaal worden 70B-modellen in Q4 realiteit. Dit artikel beschrijft een 1→2 GPU-platform, geen 1→2→4 pad (zie "Waarom geen 4×3090?").
Moederbord: ASUS ProArt X670E-CREATOR WIFI
- Twee volle PCIe 5.0 x16 slots — essentieel voor 2 GPU's. Bij twee kaarten schakelen de slots naar x8/x8, wat voor LLM-inference ruim voldoende is.
- 10GbE LAN — toekomstbestendig en direct bruikbaar voor een headless server aan UTP
- USB4 / 2.5GbE — flexibele connectiviteit
- AM5-platform — CPU-upgrade mogelijk naar 7950X zonder nieuw moederbord
- Beperking: dit bord heeft maar 2 volwaardige PCIe-slots. De derde slot is elektrisch slechts PCIe 4.0 x2. Een 4×GPU-configuratie is op dit platform niet mogelijk.
CPU: AMD Ryzen 5 7600X
LLM-inference is GPU-gebonden, niet CPU-gebonden. De CPU doet prompt-encoding, tokenization, en I/O voor alle services. Zes cores is ruim voldoende — zelfs met alle services tegelijk blijft de CPU-load onder 2-3 cores. De 7600X heeft een officiële TDP van 105W (niet 65W), maar in de praktijk voor inference minder belast. Via AM5 later inwisselbaar voor een 7950X als dat nodig blijkt.
RAM: 64GB DDR5-6000 CL30 (start), 128GB als einddoel
64GB DDR5-6000 CL30 is een goed startpunt. Voor de volledige stack — agents, RAG, Open WebUI, Postgres, Bookstack, Vaultwarden, LinkDing, meerdere modellen tegelijk, embeddings, vector database, filesystem cache — wordt 128GB aanbevolen voor maximale headroom. Het ProArt-moederbord ondersteunt tot 192GB DDR5.
Het advies: start met 2×32GB (64GB) en breid later uit naar 4×32GB (128GB). Let dan op de geheugen-QVL voor stabiliteit met vier DIMMs. CL30 is belangrijk voor de Infinity Fabric van Ryzen — merkbaar sneller dan CL40.
PSU: be quiet! Dark Power Pro 13 1300W
- Nu (1 kaart): ~350W (gelimiteerd) + ~150W systeem = ~500W load. De PSU draait op ~38% belasting — extreem stil en efficiënt.
- Later (2 kaarten): ~700W (2×350W gelimiteerd) + ~150W systeem = ~850W sustained, met transient spikes richting 1000W. 1300W biedt ~45% headroom — veilig.
- 1300W is de verstandige keuze. Een 750W nu kopen en later vervangen kost dubbel (€110 + €298 = €408 vs €298 nu) en betekent een volledige kabelmanagement-swap.
- De SUPRIM heeft officieel 420W TDP, maar voor 24/7 inference is power limiting naar 300-350W aan te raden.
- Voor 4×3090 is 1300W onvoldoende (4×420W = 1680W alleen GPU's). Dit platform is niet ontworpen voor 4 GPU's.
Case: Fractal Meshify 2 XL
- 9 PCIe-slots (horizontaal, +3 verticaal optioneel) — de SUPRIM (2.7-slot) neemt slots 1-3 in. Via PCIe-riser op slots ~6-8 blijft ≥2-3 slots tussenruimte voor een tweede kaart — haalbaar, maar krapper dan vaak gedacht. Riser-bracket zelf vastschroeven in de slot-covers: maatwerk, geen plug-and-play.
- Uitstekende airflow — mesh-frontpaneel, 3×140mm intake, 2×140mm top exhaust, 1×140mm rear exhaust.
- Groot maar niet massief — 566×240×600mm (H×B×D); reken op ~620+ mm diepte inclusief kabels. Stil — geïsoleerde panelen, geen raam nodig (headless).
PCIe-riser: Cooler Master / TRYX PCIe 5.0 x16 300mm
De SUPRIM is 2.7-slots dik. Bij een tweede kaart is direct naast elkaar monteren thermisch problematisch. Oplossing: de tweede kaart via riserkabel verder in de kast plaatsen — minimaal 3-4 slots afstand.
Belangrijk: PCIe Gen5-risers kunnen signaalintegriteitsproblemen geven. Zet de riser-slot in de BIOS vast op Gen4. Voor LLM-inference is het verschil tussen PCIe 4.0 en 5.0 verwaarloosbaar; stabiliteit is belangrijker.
Eenvoudiger alternatief: een 2-slot blower direct in PCIEX16_2 past naast de SUPRIM (±3 slots uit elkaar) — krap, maar blowers blazen hun warmte direct naar buiten. Dan vervalt de riser (én het Gen5-risico) helemaal. Risico's: ~0,3-slot gapije en deels afgedekte intake van de SUPRIM; power-limited prima, zonder limit thermisch spannend.
Overig: SSD, koeler, pads, fans, UPS
- 4TB NVMe SSD — OS + Docker-volumes + modellen. 2TB is een bottleneck: alleen de Fase-2-modellen (70B Q4 ~40GB, 120B Q3 ~45GB) vullen de schijf al.
- ARCTIC Freezer 34 eSports DUO — stille luchtkoeler, geen waterkoeling nodig voor headless.
- Thermische pads (1.5mm/2.0mm) — GDDR6X VRAM op de achterkant van de RTX 3090 wordt 90-100°C. Bij tweedehands kaart zijn pads uitgedroogd. Vervangen ~€15-20 = beste levensduur-investering.
- 3 extra 140mm case fans (be quiet! Silent Wings) — voor optimale airflow bij 2e kaart.
- APC Back-UPS Pro 1500VA (900W) — 24/7 server + Postgres + Docker-volumes vragen bescherming tegen stroomuitval. Een kleine UPS (~€120, ~700VA/390W) trip't bij echte belasting: fase 1 trekt al ~500W, fase 2 ~850W. Fase 2: liever 2200VA. Reken €250-400.
Hardwarelijst
| # | Component | Specificatie | Nieuw / 2e hands |
|---|---|---|---|
| 1 | GPU (al gekocht) | MSI SUPRIM RTX 3090 24GB GDDR6X (420W TDP, 2.7-slot) | Tweedehands |
| 2 | Moederbord | ASUS ProArt X670E-CREATOR WIFI (2× PCIe 5.0 x16, 10GbE) | Nieuw |
| 3 | CPU | AMD Ryzen 5 7600X (6-core / 12-threads, 105W TDP) | Tweedehands |
| 4 | RAM | 64GB DDR5-6000 CL30 (2×32GB) — 128GB als einddoel | Nieuw |
| 5 | PSU | be quiet! Dark Power Pro 13 1300W (Titanium, modulair) | Nieuw |
| 6 | Case | Fractal Design Meshify 2 XL (9 PCIe-slots, mesh-front) | Tweedehands |
| 7 | PCIe-riser | Cooler Master / TRYX PCIe 5.0 x16 300mm (vastzetten op Gen4) | Nieuw |
| 8 | SSD | 4TB NVMe (Kingston NV3 4TB / WD SN850X 4TB) | Tweedehands |
| 9 | CPU-koeler | ARCTIC Freezer 34 eSports DUO (lucht) | Nieuw |
| 10 | Thermische pads | 1.5mm + 2.0mm voor VRAM-koeling (GDDR6X backside) | Nieuw |
| 11 | Case fans (extra) | 3× be quiet! Silent Wings 140mm (PWM) | Nieuw |
| 12 | UPS | APC Back-UPS Pro 1500VA / 900W (fase 2: 2200VA) | Nieuw |
Waarom deze combinatie van nieuw en tweedehands?
- Nieuw: moederbord, RAM, PSU, PCIe-riser, koeler, pads, fans, UPS — componenten waar betrouwbaarheid en garantie belangrijk zijn. RAM met CL30-timings is zeldzaam tweedehands. Een PSU is te risicovol om gebruikt te kopen.
- Tweedehands: GPU, CPU, case, SSD — componenten die robuust zijn en weinig slijten. Een 6-core CPU uit 2022 is meer dan genoeg voor inference. Een case is fysiek robuust. NVMe-schijven hebben geen bewegende delen.
- De GPU is tweedehands gekocht (€1.200) — voor een MSI SUPRIM X in uitstekende staat met doos en "alleen gaming gebruikt" is dat een marktconforme premiumprijs. De mediaan voor een generieke 3090 op Marktplaats is ~€960; de SUPRIM-premie is verdedigbaar door de superieure koeler, maar het is geen koopje.
Model-VRAM-matrix
Wat past er werkelijk in 24GB, 48GB en 96GB? Deze tabel geeft realistische waarden met overhead en KV-cache:
| Model | Quant | Ruwe weights | Met overhead + KV | Past in 24GB? | Past in 48GB? |
|---|---|---|---|---|---|
| 8B (Llama 3.1) | Q8 | ~8 GB | ~9-10 GB | ✅ Ruim | ✅ |
| 14B (Qwen 2.5) | Q8 | ~14 GB | ~15-16 GB | ✅ | ✅ |
| 32B (Qwen 3) | Q4 | ~16 GB | ~18-20 GB | ✅ Past, korte context | ✅ |
| 32B (Qwen 3) | Q6 | ~24 GB | ~26-28 GB | ❌ | ✅ |
| 32B (Qwen 3) | Q8 | ~32 GB | ~34-36 GB | ❌ (offload naar RAM) | ✅ |
| 70B (Llama 3.3) | Q4_K_M | ~40 GB | ~42-45 GB | ❌ | ✅ Past, context afhankelijk |
| 70B (Llama 3.3) | Q8 | ~70 GB | ~74-78 GB | ❌ | ❌ (4×3090 nodig) |
| 120B (Qwen 3) | Q3 | ~45 GB | ~48-52 GB | ❌ | ⚠️ Zeer krap, minimale context |
Met 1×3090 (24GB) werk je vooral met 8-14B Q8 en 27-32B Q4/Q5 modellen. Grotere modellen kunnen gedeeltelijk naar RAM worden geoffload (llama.cpp ondersteunt dit), maar daalt de snelheid aanzienlijk.
Met 2×3090 (48GB) wordt 70B Q4 realistisch voor interactieve chat (~15-22 tok/s). 120B Q3 is mogelijk maar krap qua context. 70B Q8 heeft 48GB niet genoeg (74-78GB nodig) — daarvoor zou 4×3090 nodig zijn, wat op dit platform niet ondersteund wordt.
Uitbreidingspad: 1 → 2 GPU's, max
Dit platform is ontworpen voor maximaal 2 GPU's. Het ASUS ProArt X670E-CREATOR bord heeft 2 volwaardige PCIe x16 slots; de derde slot is slechts PCIe 4.0 x2, wat ongeschikt is voor een extra GPU.
| Fase | VRAM | Wat kun je draaien? | Opmerking |
|---|---|---|---|
| Fase 1 (nu) | 24GB | 8-14B Q8 (razendsnel), 27-32B Q4/Q5, grotere modellen met CPU-offload | Direct productief. RAG + agents + alle services tegelijk. |
| Fase 2 (uitbreiding) | 48GB (2× 3090) | 70B Q4 (~15-22 tok/s, interactief), 70B Q3_K_M + lange context, 120B Q3 (beperkte context) | Tweede kaart bij voorkeur een 2-slot blower-style RTX 3090 (HP OEM of FE) — direct in PCIEX16_2 of via PCIe-riser. Let op bij OEM-blowers: sommige Dell-kaarten hebben propriëtaire power-connectoren; HP Turbo is meestal standaard. Bij riser: vastzetten op Gen4. |
Waarom geen Fase 3 met 4×3090?
- Het ProArt X670E-bord heeft maar 2 volwaardige PCIe-slots. De derde slot is elektrisch slechts PCIe 4.0 ×2 — ongeschikt voor een extra GPU.
- 1300W PSU is onvoldoende voor 4× SUPRIM (4×420W = 1680W alleen GPU's).
- De fysieke ruimte en airflow voor 2.7-slot kaarten in een enkele kast is onpraktisch bij 4 stuks.
- Voor 96GB+ VRAM is een nieuw platform nodig: Threadripper, Threadripper Pro, of EPYC met voldoende PCIe lanes.
Architectuur: LLM-runtime als aparte laag
De services zijn gestapeld in lagen, met de LLM-runtime als onafhankelijke infrastructuur:
GPU-laag ↓ llama.cpp / Ollama server (OpenAI-compatible API) ↓ Open WebUI | OpenClaw | RAG | Agents | Research ↓ Docker-services: Postgres, Caddy, Bookstack, Vaultwarden, LinkDing, Kanban ↓ Ubuntu Server 24.04 LTS (headless)
Deze gelaagdheid zorgt dat Open WebUI, OpenClaw en de agents onafhankelijk van de modelruntime vervangen kunnen worden. De LLM-server exposeert een OpenAI-compatible API; alle services praten daar tegenaan.
Twee SLA's voor inference
In plaats van één vage "<5 seconden" zijn er twee prestatie-eisen:
Interactieve chat
- TTFT (time-to-first-token) < 2-5 seconden
- Geschikt voor: dagelijkse chat, snelle code-vragen, project planning
- Modellen: 8B-14B Q8 of 27-32B Q4 (op 24GB); 70B Q4 (op 48GB)
Nuance: TTFT < 2-5s geldt voor korte prompts op kleine modellen. Prefill van een 32B Q4 op één 3090 zit rond ~700-1000 tok/s — een RAG-context van 10k tokens betekent 10-15 seconden time-to-first-token, op welke config dan ook. Dat is fysica van de 3090, geen config-fout.
Deep reasoning / agentic
- Geen harde latency-eis — maximaliseer tokens/sec × context × modelkwaliteit
- Geschikt voor: 's nachts batch-verwerking, complexe code-refactoring, research, lange documenten verwerken
- Modellen: 70B Q4+ of 120B (op 48GB); deep thinking lange context
NVLink: context
De RTX 3090 is de laatste NVIDIA-consumerkaart met NVLink-ondersteuning (verwijderd bij de 4090/5090). Voor LLM-inference is NVLink echter geen architectuurvereiste:
- llama.cpp gebruikt standaard pipeline parallelism (layer splitting) — hierbij maakt NVLink weinig verschil.
- Tensor parallelism profiteert wel van NVLink, maar is in llama.cpp nog experimenteel.
- Het primaire voordeel van twee kaarten zit in 48GB fysiek VRAM (grotere modellen), niet in "twee keer zoveel snelheid".
- NVLink is nice-to-have, geen must-buy.
Levensduur van een gebruikte RTX 3090
De GPU-core (GA102-chip) is zeer duurzaam en kan bij normaal gebruik 20+ jaar meegaan. Maar een gebruikte 3090 heeft andere slijtagepunten:
| Component | Type | Levensduur | Vervangbaar? |
|---|---|---|---|
| GPU-chip (GA102) | Silicium | 20+ jaar | Nee |
| GDDR6X VRAM | Geheugen | 10-15 jaar, gevoelig voor hitte | Nee (vastgesoldeerd) |
| Fans | Mechanisch | ~50.000-100.000 uur (~6-11jr) | ✅ ~€15-30 per stuk |
| Thermische pads | Veroudering | 5-7 jaar (drogen uit) | ✅ ~€15-20 set |
| Condensatoren / VRM | Elektronisch | 10-15 jaar | Alleen bij reparatie |
Met een fan-swap (rond 2030) en pad-vervanging (bij aankoop + rond 2029) gaat een MSI SUPRIM nog 4-6 jaar mee in 24/7 LLM-inference.