AI agents
Support-LLM's zelf hosten: Llama 3, Mistral, Qwen op één A100
Het is dinsdagochtend. De support-inbox heeft 41 openstaande tickets, de API-rekening van vorige maand kwam binnen op €3.400, en operations vraagt of we dit zelf kunnen draaien.

Het is dinsdagochtend. De support-inbox heeft 41 openstaande tickets, de API-rekening van vorige maand kwam binnen op €3.400, en het hoofd operations vraagt, in een toon die net geen vraag meer is, of we dit ding niet gewoon zelf kunnen draaien.
We hebben dit gesprek ongeveer eens per kwartaal. Soms is de rekening de aanleiding. Vaker is het data residency, een klant die weigert dat zijn tickets een Amerikaans endpoint raken, of een harde latency-eis die de API niet haalt vanaf de plek waar de klant zit. Wat de aanleiding ook is, het antwoord begint altijd hetzelfde: kies een model, benchmark het op hardware die je je echt kunt veroorloven, en kom erachter of de rekensom klopt voordat je je vastlegt.
Deze post is de uitwerking van een benchmark die we in mei draaiden voor een klant die tier-1 productondersteuning afhandelt in drie talen (Engels, Nederlands, Duits). Eén NVIDIA A100 80GB, drie open-weight modelfamilies, dezelfde workload op elk model. De cijfers hieronder komen uit onze setup; jouw prompts en jouw verkeer zullen ze verschuiven, maar de vorm is betrouwbaar.
Het hardware-budget
Eén A100 80GB is de saaie middenmoot van de self-hosting-markt. Je huurt er on-demand één bij Lambda of RunPod voor ongeveer $1,50 tot $2,50 per uur, of reserveert er één voor ongeveer $0,80 tot $1,20. Op gereserveerde prijzen is dat €700 tot €1.000 per maand, alles inbegrepen. Dezelfde klant gaf ongeveer €3.400 per maand uit aan een frontier-API voor hetzelfde supportvolume.
Dat verschil tussen €700 en €3.400 is de enige reden dat deze oefening interessant is. Als jouw supportvolume een paar honderd tickets per maand is, stop dan met lezen. De API wint op elke as op die schaal. Verwerk je tienduizenden tickets per maand en zijn de gesprekken lang, lees dan door.
De kandidaten
We kozen de drie families die een klein ops-team in 2026 het meest waarschijnlijk overweegt:
- Llama 3.1 8B Instruct, het standaard werkpaard. Sterk in Engels, redelijk in Nederlands, zwakker op Duitse nuance.
- Mistral 7B Instruct v0.3, de Europese keuze. Snel, klein, goed gedocumenteerd. We testten ook Mistral Nemo 12B als stretch-optie.
- Qwen 2.5 7B Instruct, de meertalige verrassing. Sterker out-of-the-box gedrag op niet-Engelse tickets dan beide andere in onze tests.
Per familie draaiden we ook de grootste gequantizeerde variant die comfortabel op 80GB HBM2e past: Llama 3.1 70B in AWQ-4bit, Qwen 2.5 32B in AWQ-4bit, en Mixtral 8x7B in AWQ-4bit. De kleinere modellen draaiden allemaal in BF16 met ruimte over.
De serving stack
vLLM 0.6.x op één GPU, achter een dunne FastAPI-gateway die auth, logging en het prompt-template per kanaal afhandelde. We gebruikten continuous batching met standaardinstellingen en zetten prefix caching aan voor de system prompt en het statische deel van de retrieval context.
Heb je nog nooit met vLLM gewerkt, in het kort: het is de open-source serving-laag die een Hugging Face-model omtovert tot iets dat het uithoudt onder echte concurrency. PagedAttention plus continuous batching is wat de throughput-getallen hieronder redelijk laat lijken op één kaart.
We hebben niet fine-tuned. Het doel van deze benchmark was uitvinden wat deze modellen out of the box doen met een sterke system prompt en goede retrieval, want dat is wat 90% van de teams op dag één daadwerkelijk uitrolt.
De workload
Twee runs per model. De eerste was synthetisch: 100 gesimuleerde agents die elk support-vormige prompts versturen, met input-lengtes tussen 200 en 800 tokens (system prompt + opgehaalde KB-chunks + het ticket) en output-lengtes tussen 80 en 300. De tweede was een replay van 500 geanonimiseerde historische tickets uit het CRM van de klant, beoordeeld door twee senior support agents op een 5-puntsschaal voor toon, feitelijke juistheid, en "zou ik dit versturen".
De retrieval-laag was identiek over alle modellen: een kennisbank van 4.000 documenten, geëmbed met bge-m3, geserveerd vanuit Qdrant, top-5 chunks per query. Het is het waard om hardop te zeggen dat er echte engineering tussen een chatmodel en een werkende support-agent zit, en het meeste daarvan zit in de retrieval-laag. De recall van de retriever bepaalde meer van de uiteindelijke antwoordkwaliteit dan de modelkeuze, elke keer dat we het maten.
Throughput en latency, batch 1
Batch 1 is het saaie single-stream getal. Het is ook het getal waar je product manager naar zal vragen, want het zet de ondergrens voor de gevoelde latency voor één gebruiker.
Model TTFT (ms) Output tok/s
Llama 3.1 8B (BF16) ~80 ~110
Mistral 7B v0.3 (BF16) ~70 ~125
Qwen 2.5 7B (BF16) ~85 ~115
Llama 3.1 70B AWQ-4bit ~210 ~30
Qwen 2.5 32B AWQ-4bit ~150 ~45
Mixtral 8x7B AWQ-4bit ~130 ~50
Bij die snelheden landt een antwoord van 200 tokens van elk van de kleine modellen binnen twee seconden. Het 70B-model landt in ongeveer zeven. Voor chat in een sidebar-widget is twee seconden prima. Zeven niet.
Throughput onder belasting
Batch 1 is niet hoe je een support-agent draait. Je draait hem met continuous batching, houdt een pool van gelijktijdige gesprekken vast, en meet aggregate throughput en p95 latency onder belasting. Met 32 gelijktijdige streams:
Model Aggregate tok/s p95 TTFT (ms)
Llama 3.1 8B (BF16) ~2.400 ~340
Mistral 7B v0.3 (BF16) ~2.800 ~290
Qwen 2.5 7B (BF16) ~2.500 ~360
Llama 3.1 70B AWQ-4bit ~620 ~1.100
Qwen 2.5 32B AWQ-4bit ~900 ~780
Mixtral 8x7B AWQ-4bit ~700 ~920
Mistral 7B wint de throughput-race aan de kleine kant. Dat klopt: het is het kleinste model en het meest efficiënt op kernel-niveau voor deze generatie GPU's. De 70B-klasse modellen zijn werkbaar, maar alleen als jouw interface async is (een email-reply, een ticket-triage, een samenvattingsjob) in plaats van synchrone chat.
Kwaliteit, beoordeeld door mensen
Throughput is de makkelijke helft. De zwaardere helft is of het antwoord goed genoeg is om naar een klant te sturen. Twee senior support agents beoordeelden 100 willekeurig gesamplede antwoorden per model op een 5-puntsschaal, blind voor welk model welk antwoord produceerde.
Model Toon Juistheid "Zou versturen"
Llama 3.1 8B 4,0 3,7 67%
Mistral 7B v0.3 3,8 3,5 58%
Qwen 2.5 7B 4,1 4,0 72%
Llama 3.1 70B AWQ 4,4 4,3 84%
Qwen 2.5 32B AWQ 4,5 4,4 86%
Mixtral 8x7B AWQ 4,2 4,0 74%
Qwen 2.5 was voor ons de winnaar bij de kleine modellen, met een duidelijke marge. Vooral op de Duitse en Nederlandse tickets was de kloof met Llama 3.1 8B zichtbaar voor beide beoordelaars zonder dat we erom vroegen. De Qwen 2.5 modelkaart beschrijft meertalige training als een eerste-klas doel; onze resultaten komen daarmee overeen.
Aan de grotere kant matchte Qwen 2.5 32B AWQ qua kwaliteit met Llama 3.1 70B AWQ bij ongeveer 1,5x de throughput. Heb je maar één A100, dan is dat het model dat we vandaag in productie zouden uitrollen.
Een opmerking over quantisatie, want iemand vraagt er altijd naar. AWQ-4bit haalde ongeveer 0,2 punten af van de door mensen beoordeelde nauwkeurigheidsscore voor de 70B- en 32B-modellen vergeleken met BF16-runs op een tijdelijk gehuurde 2xA100. Voor tier-1 support is dat verschil onzichtbaar. Voor juridische, financiële of medische antwoorden moet je opnieuw testen voor je uitrolt.
Op één A100 80GB in 2026 is Qwen 2.5 32B in AWQ-4bit de sweet spot voor meertalige support. Mistral 7B is de throughput-kampioen aan de kleine kant. Llama 3.1 8B is prima, maar niet het model dat we zouden kiezen.
De break-even berekening
De gereserveerde A100 op €900 per maand zit onder de eerdere API-uitgaven van de klant van €3.400 per maand. Dat klinkt als een duidelijke winst, maar de GPU is maar één regel op de rekening. De volledige self-hosted factuur omvat:
- De GPU zelf (€700 tot €1.200 per maand).
- Een on-call rotatie, want de GPU-host valt nu binnen je incident scope.
- Engineering-tijd om de serving stack, het eval harness en de prompt-templates te onderhouden.
- Een tweede GPU voor redundantie als de support-agent klantgericht en synchroon is.
Eerlijk geprijsd begint self-hosting geld te besparen rond de €2.500 per maand aan API-kosten, en wordt het overduidelijk goedkoper rond de €5.000. Daaronder wint de API en hoor je geen benchmark-posts te lezen.
Wat we de volgende keer anders zouden doen
Drie dingen, op volgorde van hoeveel ze zouden uitmaken.
Eén, fine-tunen. Elk getal hierboven is out of the box. Een korte LoRA op een paar duizend van de eigen opgeloste tickets van de klant zou de "zou versturen"-rate ruim voorbij de 90% duwen op de 7B-modellen, op basis van eerdere projecten. We hebben dat hier niet meegenomen omdat we schone base-model getallen wilden, maar voor productie zouden we altijd fine-tunen.
Twee, speculative decoding. vLLM heeft inmiddels een bruikbaar speculative decoding-pad. Met Qwen 2.5 1.5B als draft model gekoppeld aan de 32B target zagen we ongeveer 1,7x speedup op dezelfde A100, zonder meetbaar kwaliteitsverlies. We hebben die getallen uit de tabel gelaten omdat we ze op een opvolgmachine draaiden, maar ze zijn echt en ze tellen zodra je voorbij de 50 gelijktijdige streams gaat.
Drie, de retrieval-laag. De grootste enkele bepalende factor voor of de support-agent goede antwoorden leverde, was niet het model. Het was de kwaliteit van de opgehaalde KB-chunks. Een slechte retriever gekoppeld aan een 70B-model verliest van een goede retriever gekoppeld aan een 7B-model, elke keer.
De kortste weg naar een beslissing
Zit je op een jaarrekening van zes cijfers aan API-kosten voor support, dan is het experiment van één dag dit: zet één A100 op een per-uur box op, richt vLLM op Qwen 2.5 7B en 32B, replay 200 historische tickets door beide, en laat je twee beste support agents de output blind beoordelen. Dat is één declarabele dag GPU-huur. Het vertelt je of het gesprek met je CFO de moeite waard is.
Toen we vorig kwartaal de support-agent bouwden voor een Nederlandse SaaS-klant, was wat ons verraste niet de GPU-economie. Het was hoeveel van de winst kwam uit de retrieval-pipeline en het eval harness, niet uit de modelkeuze. Overweeg je een vergelijkbare stap, dan is dat waar we je eerste week engineering zouden inzetten. Dit werk doen we als onderdeel van onze AI-agents praktijk, en de retrieval-vraag is degene waar we de meeste tijd aan besteden.
Open vandaag een terminal en draai nvidia-smi op welke GPU je dan ook een uur kunt lenen. Doet het getal dat je ziet je huiveren, dan is de API voorlopig nog steeds het juiste antwoord.
Kern
Op één A100 80GB in 2026 is Qwen 2.5 32B AWQ de sweet spot voor meertalige support; Mistral 7B wint op pure throughput aan de kleine kant.
FAQ
Wanneer wint self-hosting daadwerkelijk van de API op kosten?
Grofweg boven €2.500 per maand aan structurele API-uitgaven, en duidelijk boven €5.000. Daaronder wint de API zodra je on-call, redundantie en engineering-tijd meerekent.
Kan één A100 80GB een 70B-model draaien?
Ja, in AWQ-4bit quantisatie. Reken op ongeveer 30 tokens per seconde single-stream en 600 tot 700 aggregate onder belasting. Gebruik het voor async werk, niet voor synchrone chat.
Welk model handelde meertalige support het beste af?
Qwen 2.5 (7B en 32B) leidde op Nederlandse en Duitse tickets in onze blinde beoordeling, met een marge die beide senior support agents opmerkten zonder dat ze wisten waar ze naar keken.
Moet je fine-tunen om een support-agent uit te rollen?
Voor productie, ja. Een korte LoRA op een paar duizend opgeloste tickets duwt de zou-versturen-rate doorgaans ruim voorbij de 90 procent op de 7B-modellen. Retrieval-kwaliteit weegt nog zwaarder.