Hoe een lokale LLM te implementeren zonder opslag of apps te verstoren

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

Het implementeren van een lokale LLM op een thuis-NAS is niet moeilijk omdat het eerste commando lastig is. Het is moeilijk omdat het model, cache, container, API-server en achtergrondtaken allemaal concurreren om dezelfde opslag- en systeemresources die je NAS al gebruikt voor bestanden, back-ups, media, databases en apps.

Het veiligste doel is niet om de LLM op dag één zo snel mogelijk te maken. Het veiligere doel is om het een bekende opslaglocatie, harde resourcegrenzen, beperkte paralleliteit en een verificatieroutine te geven. Een iets trager lokaal model is meestal beter dan een snel model dat de systeemschijf vult, geheugenbelasting veroorzaakt of andere zelfgehoste apps onbetrouwbaar maakt.

Kort samengevat: geef de LLM zijn eigen ruimte en beperkingen

Een lokale LLM moet zijn eigen ruimte hebben voordat het zijn eerste model heeft. Dat betekent dat je moet weten waar modelfiles, caches, indexen, logs en app-gegevens zullen worden opgeslagen voordat je een model downloadt of een WebUI aansluit. Als die bestanden in een verborgen Docker-pad of op een kleine opstartschijf terechtkomen, kan de implementatie succesvol lijken terwijl het stilletjes ruimte opslokt die de NAS zelf nodig heeft.

Het heeft ook beperkingen nodig. LLM-runtimeomgevingen kunnen veel RAM, VRAM, CPU-threads en contextgeheugen gebruiken, vooral wanneer meerdere modellen of parallelle verzoeken zijn ingeschakeld. De eigen resourcebeperkingen van Docker leggen uit dat containers anders hostresources kunnen gebruiken zoals toegestaan door de kernel scheduler, en geheugenbelasting kan leiden tot out-of-memory gedrag dat andere processen beïnvloedt.

Voor een gedeelde NAS is dat belangrijker dan piekbenchmarkcijfers. Plex, Jellyfin, Home Assistant, databases, synchronisatie taken, back-ups en bestandsdeling mogen niet onstabiel worden omdat een modelserver probeert één lange prompt te beantwoorden. Een veilige lokale LLM-implementatie begint met opslagmapping, resourcebeperkingen, modelkeuze en verificatie.

Wat te bevestigen voordat je het eerste model downloadt

Definieer vóór het downloaden van het eerste model de eerste taak. Een lokale LLM die wordt gebruikt voor lichte chat heeft andere eisen dan een RAG-assistent, een embedding-werker, een codeerhulp of een automatiseringsagent die bestanden kan lezen en schrijven. Als je de gebruikssituatie niet eerst definieert, is het gemakkelijk om een model te downloaden dat te groot, te traag of te storend is voor de server.

Begin met deze controles:

  • Gebruikssituatie: chat, RAG, embeddings, samenvatting, automatisering, coderen of zoekhulp.
  • Modelgrootte: hoe groot het modelbestand is en of je meerdere varianten wilt bewaren.
  • Quantisatie: of het model voldoende gecomprimeerd is voor de server.
  • Opslagpad: waar modelbestanden en cache op de host zullen staan.
  • Containerpad: hoe het hostpad in de container wordt gemapt.
  • RAM en VRAM: hoeveel geheugen overblijft voor andere apps.
  • CPU-reserve: hoeveel threads het model kan gebruiken zonder de NAS uit te hongeren.
  • Parallelisme: hoeveel verzoeken of geladen modellen tegelijk kunnen draaien.
  • Bestaande werklast: back-ups, mediastreaming, databases, synchronisatie en bestandsdeling.
  • Verificatieplan: hoe je zult aantonen dat de NAS daarna nog gezond is.

Deze voorbereidende stap is geen tijdverspilling. Het voorkomt het meest voorkomende lokale LLM-uitrolprobleem op een NAS: het model reageert, maar het systeem eromheen wordt minder betrouwbaar.

Houd modelbestanden buiten de systeemschijf

Modelbestanden kunnen sneller groeien dan verwacht. Eén model is misschien beheersbaar, maar meerdere modellen, quantisatievarianten, embeddings, indexen, WebUI-gegevens en logs kunnen snel tientallen of honderden gigabytes worden. Als die bestanden op de systeemschijf of Docker-root terechtkomen, kan de NAS zonder kritieke ruimte komen te zitten, zelfs als de hoofdopslagpool er nog gezond uitziet.

De FAQ van Ollama vermeldt standaard model-locaties voor verschillende besturingssystemen en legt uit dat de modelopslagmap kan worden gewijzigd met de omgevingsvariabele OLLAMA_MODELS. Op een NAS of thuisserver is die informatie belangrijk omdat het standaardpad mogelijk niet de plek is waar je langdurige modelbestanden wilt opslaan.

Als je Ollama of een andere modelrunner in Docker draait, onthoud dan dat een containerpad niet hetzelfde is als een hostpad. Een map zoals /root/.ollama binnen de container moet worden gekoppeld aan een specifieke locatie op de host als je voorspelbare opslag wilt. Zonder volume-koppeling blijven modelbestanden mogelijk binnen door Docker beheerde opslag, waardoor groei moeilijker te zien en op te ruimen is.

Een veiliger methode is om een speciale modelmap aan te maken vóór de uitrol, zoals een AI-opslagmap op een datapoel of app-opslagvolume. Houd deze gescheiden van back-updoelen, kritieke databases en onvervangbare app-gegevens. De modelmap moet groot genoeg zijn, gemakkelijk te inspecteren en gedocumenteerd, zodat je later oude modellen kunt opruimen.

Bepaal ook waar gerelateerde bestanden worden opgeslagen. RAG-indexen, embeddings, vectordatabases, logs en geüploade documenten kunnen aparte opslaggebruikers worden. Als je alleen rekening houdt met het modelfile, kan de rest van de AI-stack je nog verrassen.

Stel grenzen in voor geheugen, CPU en parallelisme

Geheugenlimieten

Lokale LLM's zijn geheugenintensief. Ze hebben geheugen nodig voor modelgewichten, context, runtime overhead en soms meerdere geladen modellen. Als de server ook databases, mediaservices, bestandsynchronisatie, containers en back-uptaken draait, mag het LLM niet alle beschikbare geheugen gebruiken.

Docker ondersteunt container geheugenlimieten die kunnen voorkomen dat één container de host overneemt. Voor een gedeelde NAS gaat het hierbij minder om het model sneller te maken en meer om de rest van het systeem te beschermen. Als de LLM-container zijn eigen limiet bereikt, is dat meestal beter dan dat de hele server geheugenproblemen krijgt.

Laat ruimte over voor kernservices. Als de NAS 32GB RAM heeft en normale apps tijdens drukke periodes 8GB tot 12GB gebruiken, geef dan niet de rest aan het LLM. Laat ruimte voor filesystem cache, back-up taken, databases en korte pieken. Een model dat alleen werkt als er verder niets draait, is geen veilige standaard voor een gedeelde thuisserver.

VRAM is ook belangrijk bij GPU-inferentie. De FAQ van Ollama legt uit dat CPU-inferentie systeemgeheugen gebruikt, terwijl GPU-inferentie VRAM gebruikt, en dat gelijktijdig laden van modellen afhangt van beschikbaar geheugen of VRAM. Dat betekent dat een GPU veel kan helpen, maar het neemt de noodzaak van een geheugenplan niet weg.

CPU-limieten

CPU-limieten beschermen de responsiviteit. Een lokaal LLM kan veel threads gebruiken tijdens promptverwerking of token-generatie. Als het de CPU verzadigt, kan het NAS-dashboard traag worden, kunnen mediastreams bufferen, automatiseringen vertragen en databases langzaam reageren.

Docker biedt CPU-controles zoals --cpus, --cpu-quota, en --cpuset-cpusJe hebt niet altijd strenge limieten nodig, maar je moet wel bepalen hoeveel CPU het LLM mag gebruiken tijdens normale NAS-activiteit. Een model dat iets langer nodig heeft om te antwoorden terwijl de server responsief blijft, is meestal beter dan een model dat elke thread gebruikt.

Alleen CPU-inferentie is vooral gevoelig voor limieten. Zonder een GPU of NPU concurreert het LLM direct met elke andere CPU-gebonden dienst. Als de NAS al media transcoding, indexering, compressie, back-ups of databases afhandelt, mag het LLM niet onbeperkt draaien tijdens piekuren.

Aantal modellen en parallelle aanvragen

Parallelisme wordt gemakkelijk over het hoofd gezien. Eén model dat één prompt beantwoordt kan prima zijn. Meerdere gebruikers, een WebUI, een automatiseringsworkflow en een RAG-tool kunnen snel gestapelde aanvragen creëren. Elke aanvraag kan contextgeheugen en CPU-belasting toevoegen.

De FAQ van Ollama beschrijft parallelle aanvragen en het gedrag van geladen modellen, inclusief instellingen zoals OLLAMA_MAX_LOADED_MODELS, OLLAMA_NUM_PARALLEL en OLLAMA_MAX_QUEUE. Deze instellingen zijn belangrijk op een NAS omdat gelijktijdigheid een stabiele single-user implementatie kan veranderen in een piek in het gebruik van bronnen.

Voor een gedeelde thuisserver begin je met conservatieve limieten. Eén geladen model en één actieve aanvraag is een veiliger uitgangspunt. Verhoog dit pas nadat je hebt bevestigd dat opslag, geheugen, CPU en andere diensten stabiel blijven.

Kies een model dat bij de server past, niet bij de hype

Het juiste eerste model is niet het grootste model dat je kunt downloaden. Het is het kleinste model dat de taak met acceptabele kwaliteit kan voltooien. Op een NAS is modelkeuze onderdeel van systeembeveiliging.

Gekwantiseerde modellen zijn vaak het praktische startpunt. llama.cpp documenteert hoe gekwantiseerde modellen de precisie van modelgewichten verminderen, zoals het converteren van GGUF-modellen met hogere precisie naar kleinere formaten. Dit kan de modelgrootte verkleinen en praktische inferentie verbeteren, maar kan ook kwaliteitsafwegingen met zich meebrengen.

Die afweging is meestal acceptabel voor veel thuis-NAS-gebruikssituaties: eenvoudige chat, samenvattingen, embeddings, RAG-assistentie, bestandsorganisatie en kleine automatiseringshulpmiddelen. Het is minder acceptabel als de taak diepgaande redenering, lange context, multi-user prestaties of hoge codeernauwkeurigheid vereist.

Gebruik de serverconditie als startpunt:

Serverconditie Veiliger startpunt Vermijd eerst
8GB–16GB RAM, alleen CPU Klein gekwantiseerd model, embeddings, lichte chat Grote modellen, lange context, meerdere gebruikers
16GB–32GB RAM, iGPU / NPU Kleine chat, RAG, zoekassistent Beeldgeneratie, zware codeerassistent
GPU met voldoende VRAM Groter model of snellere inferentie Onbeperkt stapelen van modellen
Gedeelde NAS met veel apps Geplande AI-taken, één model, één gebruiker Altijd actieve zware inferentie
NAS plus aparte GPU-machine NAS slaat data op; AI-machine voert inferentie uit Alle rekenkracht op de NAS forceren

Een veilige implementatie begint klein omdat het je een stabiele basislijn geeft. Daarna kun je een groter model, een langere context of een WebUI-integratie testen. Als het systeem traag wordt, weet je welke wijziging het probleem veroorzaakte.

Houd de LLM weg van kritieke apps en back-ups

Een lokaal LLM mag geen foutgrenzen delen met de diensten waarop je het meest vertrouwt. Als AI-modelopslag, back-ups, app-databases en tijdelijke bestanden allemaal op dezelfde slecht geplande locatie staan, kan één werklast problemen veroorzaken voor de rest.

Houd modelcache en AI-tijdelijke data weg van back-updoelen. Een modelmap is meestal reproduceerbaar; een back-uprepository niet. Het vullen van een back-upbestemming met modelfiles of tijdelijke AI-data kan leiden tot gemiste back-ups, mislukte synchronisatietaken of verwarrende herstelpunten.

Houd app-databases indien mogelijk gescheiden. Home Assistant, mediaservers, fotobibliotheken, wachtwoordmanagers en andere zelfgehoste apps kunnen afhankelijk zijn van kleine databases die plotselinge I/O-druk of weinig schijfruimte slecht verdragen. Laat een grote model-download of RAG-indexeringstaak niet zonder planning dezelfde opslagruimte vullen.

Houd ook rekening met tijd. Als back-ups ’s nachts draaien, plan dan geen zware indexering in hetzelfde tijdvenster. Als mediastreaming ’s avonds plaatsvindt, voer dan geen CPU-only lange-context inferentie uit op dat moment. Een NAS heeft vaak genoeg capaciteit voor meerdere taken, maar niet allemaal tegelijk op hun piek.

Voor LLM-workflows die bestanden kunnen schrijven of tools kunnen aanroepen, voeg beveiligingsmaatregelen toe. Gebruik sandbox-paden, bevestigingsstappen en logs. Laat het model acties voorstellen, maar gebruik deterministische code of gebruikersbevestiging voor schrijven, verwijderen, verplaatsen en app-wijzigingen. Een veilige LLM-implementatie beschermt niet alleen systeembronnen, maar ook de data die het kan aanraken.

Waarschuwingssignalen dat de LLM andere diensten uithongert

Een slechte implementatie faalt niet altijd onmiddellijk. Meestal veroorzaakt het symptomen die in eerste instantie niet gerelateerd lijken.

Een waarschuwingssignaal is plotselinge schijfgroei. Als de systeemschijf, Docker-root of app-opslag snel groeit na het downloaden van modellen, is het modelpad mogelijk niet gemapt waar je verwachtte. Controleer het echte hostpad, niet alleen het containerpad.

Container-herstarts zijn een ander signaal. Als de LLM-container, database, Home Assistant, mediaserver of WebUI steeds opnieuw opstart, controleer dan het geheugengebruik, OOM-logs en CPU-saturatie. De LLM kan blijven draaien terwijl andere diensten middelen verliezen.

Een trage NAS-dashboard is ook belangrijk. Als de web-UI traag wordt tijdens prompts, kan het lokale LLM te veel CPU-threads, te veel geheugen of te veel schijf-I/O gebruiken. Dat het model correct antwoordt, betekent niet dat de implementatie gezond is.

Media-buffering, vertraagde automatiseringen, trage bestandsdeling en gemiste back-upvensters zijn sterkere signalen. Dit zijn kernfuncties van een NAS. Als deze achteruitgaan nadat de LLM is geïmplementeerd, heeft de LLM een kleiner model, strengere limieten, betere planning of een aparte compute-host nodig.

Houd ook het API-gedrag in de gaten. Als de LLM-API vastloopt, oneindig in de wachtrij staat of onbetrouwbaar wordt wanneer een WebUI, RAG-tool of automatiseringssysteem verbinding maakt, is de paralleliteit mogelijk te hoog voor de server. Beperk geladen modellen, actieve verzoeken en wachtrijlengte voordat u meer integraties toevoegt.

Een veiligere implementatievolgorde voor lokale LLM op NAS

Begin niet met het installeren van elke AI-tool tegelijk. Begin met één lokale LLM-service, één model, één opslagpad en één testgeval. Dit maakt de implementatie makkelijker te begrijpen en veiliger om te debuggen.

Een veiligere implementatievolgorde ziet er zo uit:

  1. Kies één gebruikssituatie, zoals lichte chat, embeddings of RAG-testen.
  2. Kies het kleinste model dat de taak aankan.
  3. Maak een speciale modelmap aan op een bekende opslaglocatie.
  4. Koppel die map aan de container of configureer de runner om deze te gebruiken.
  5. Stel geheugen- en CPU-limieten in.
  6. Beperk parallelle verzoeken en geladen modellen.
  7. Begin met één testprompt of één kleine RAG-index.
  8. Houd schijf, RAM, CPU, GPU, logs en reactietijd in de gaten tijdens het gebruik.
  9. Bevestig dat bestaande apps en back-ups zich nog steeds normaal gedragen.
  10. Voeg pas daarna integraties toe zoals Open WebUI, RAG-tools of automatiseringsworkflows.

Deze volgorde voelt misschien langzamer dan een snelle installatiewijzer, maar vermindert verrassingen. Als er iets kapot gaat, weet u of het probleem kwam door het model, het pad, de resource-limieten, de WebUI, de RAG-index of een andere integratie.

Hoe opslag en apps veilig blijven verifiëren

Verificatie mag niet stoppen bij “het model reageerde.” Een lokale LLM kan een prompt beantwoorden terwijl hij nog steeds de verkeerde schijf vult, andere containers uithongert of back-uptaken vertraagt.

Begin met opslagverificatie. Bevestig dat modelbestanden op het verwachte hostpad zijn terechtgekomen. Controleer of de systeemschijf nog vrije ruimte heeft. Controleer of de Docker-root niet onverwacht is gegroeid. Bevestig dat modelcache, logs, indexen en app-gegevens niet zijn vermengd met kritieke back-ups of databases.

Controleer daarna de bronnen. De CPU moet na prompts of indexering weer normaal zijn. Het geheugen moet onder de door u geplande limiet blijven. Swap mag bij normaal gebruik niet groeien. Als GPU-inferentie is ingeschakeld, controleer dan of het model daadwerkelijk de GPU gebruikt en of de VRAM-druk acceptabel is.

Controleer vervolgens de app-stabiliteit. Open bestandsdeling, stream media, activeer een Home Assistant-automatisering, blader door het NAS-dashboard en bevestig dat databases of app-dashboards nog steeds reageren. Als deze diensten alleen vertragen terwijl de LLM actief is, hebt u strengere CPU-, geheugen- of planningsgrenzen nodig.

Controleer logs. Let op herstartlussen, OOM-meldingen, mislukte model-ladingen, permissiefouten, ontbrekende GPU-toegang, mislukte volume-mounts en herhaalde API-time-outs. Logs zijn vaak de plek waar een “werkende” implementatie onthult dat deze nauwelijks stabiel is.

Controleer ten slotte de endpointgrens. Als de modelserver een API blootstelt, weet dan waar deze bereikbaar is. Een lokaal LLM-endpoint mag niet per ongeluk openbaar worden. Houd het intern tenzij je het bewust achter authenticatie, reverse proxy-regels, VPN-toegang of een andere gecontroleerde grens hebt geplaatst.

Hoe ZimaOS AI Search een gecontroleerd AI-implementatiepatroon laat zien

Een gecontroleerde NAS AI-workflow moet een gedefinieerd modelpad, resourcevereiste, runtimeverwachting en verificatiepad hebben. Het mag zich niet gedragen als een onbeperkte achtergrondservice die modellen downloadt, GPU-tijd verbruikt en data schrijft waar het maar wil.

ZimaOS-AI is een nuttig voorbeeld van dit gecontroleerde patroon. De ZimaSpace-gids voor AI-zoekfunctie legt uit dat de module is ontworpen om ZimaOS-zoekopdrachten te bedienen door een lokale LLM te gebruiken om kenmerken uit afbeeldingen, audio en video te extraheren. Die context is belangrijk: de AI-werklast ondersteunt zoeken en kenmerkextractie in plaats van de NAS om te vormen tot een onbeperkte chatserver.

Dezelfde gids maakt de resourcegrens zichtbaar. Het beschrijft aparte installatiepaden voor NVIDIA discrete GPU-systemen en Intel geïntegreerde GPU-systemen. Het NVIDIA-pad is afhankelijk van CUDA-compatibele GPU-ondersteuning, terwijl het Intel geïntegreerde GPU-pad minimaal 8 GB vrije RAM vereist en een i5-1235U of hoger CPU met geïntegreerde graphics aanbeveelt. Het vermeldt ook minimaal 20 GB vrije systeemruimte en geeft aan dat modelbestanden worden opgeslagen onder /media/ZimaOS-HD/AppData/.models tenzij AppData is gemigreerd.

Dat is het soort informatie dat een veilige LLM-implementatie nodig heeft voordat deze begint. Een privécloudapparaat zoals ZimaCube 2 AI NAS kan rijkere lokale AI-workflows ondersteunen wanneer het modelpad, GPU- of iGPU-ondersteuning, RAM, opslagruimte en planning overeenkomen met de werklast. Maar de belangrijke les is de grens, niet de merknaam: weet waar het model zich bevindt, welk hardwarepad het gebruikt en wanneer het bronnen mag gebruiken.

De troubleshootingsdetails laten ook zien hoe verificatie van de implementatie eruitziet. Als AI-zoekopdrachten geen AI-gerelateerde resultaten opleveren, kan het model nog aan het downloaden zijn, kan feature-extractie nog lopen, kan de toegang tot Hugging Face niet beschikbaar zijn, of kan het VRAM te laag zijn waardoor CPU-/geheugenfallback wordt afgedwongen. De gids verwijst gebruikers ook naar Call-History, netwerkverkeer en journalctl -xef -u zimaos-ai voor statuscontroles.

Dat is een nuttig patroon voor elke lokale LLM-implementatie op een NAS: definieer het pad, definieer de resources, bekijk de logs, bevestig dat de functie daadwerkelijk werkt, en plan zware activiteiten zodat de NAS bruikbaar blijft.

FAQ

Waar moet ik lokale LLM-modelfiles opslaan op een NAS?

Bewaar modelfiles in een speciale, gedocumenteerde modelmap op een datavolume of app-opslaglocatie met voldoende ruimte. Vermijd dat modellen ongemerkt op de opstartschijf, Docker-root of een back-updoel terechtkomen. Het pad moet gemakkelijk te inspecteren, opruimen en migreren zijn.

Moet ik Ollama direct draaien of in Docker?

Beide kunnen werken. Docker maakt isolatie en implementatie eenvoudiger, maar je moet de modelopslag correct mappen en resourcebeperkingen instellen. Een directe installatie kan op sommige systemen eenvoudiger zijn, maar je moet nog steeds de modelmap, permissies, geheugengebruik en servicegrenzen bevestigen.

Hoeveel RAM moet ik reserveren voor andere apps?

Reserveer voldoende RAM voor het NAS-besturingssysteem, bestandssysteemcache, databases, mediaservices, back-ups en normale containers voordat je geheugen toewijst aan de LLM. Bepaal de modelgrootte niet op basis van het totale RAM, maar op basis van het beschikbare RAM nadat de kernservices voldoende ruimte hebben.

Kan een lokale LLM mijn andere Docker-containers breken?

Het kan ze verstoren als het te veel geheugen, CPU, schijf-I/O of opslagruimte verbruikt. Het zal ze misschien niet direct “breken”, maar het kan vertragingen, herstartlussen, OOM-gebeurtenissen, gemiste back-upvensters of mislukte databasebewerkingen veroorzaken als het zonder beperkingen wordt ingezet.

Wanneer moet ik de LLM naar een apart apparaat verplaatsen?

Verplaats de LLM naar een apart apparaat wanneer je grotere modellen, lange context, meerdere gebruikers, GPU-intensieve workloads of snelle reacties nodig hebt die de NAS traag maken. In die opstelling kan de NAS opslag en databron blijven, terwijl een GPU-capabele desktop, mini-pc of AI-server de inferentie afhandelt.

Een veilige lokale LLM-implementatie op een NAS begint met grenzen, niet met modelhype. Geef het model een bekende pad, stel resourcebeperkingen in voor de container, houd kritieke apps en back-ups beschermd, en verifieer de hele server na de eerste prompt. De implementatie is pas succesvol als de LLM werkt en de NAS zich nog steeds gedraagt als een betrouwbare NAS.

Ondersteuning & Tips

Meer om te lezen

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.