Hoe Ollama Parallel Verzoeken Verwerkt

Het configureren van ollama voor het uitvoeren van parallelle aanvragen.

Inhoud

Wanneer de Ollama-server twee aanvragen tegelijkertijd ontvangt, hangt het gedrag ervan af van de configuratie en de beschikbare systeemresources.

vijf geweldige lama’s staan in het veld

Concurrente Aanvraagverwerking

  • Parallelle Verwerking: Ollama ondersteunt de parallele verwerking van aanvragen. Als het systeem voldoende beschikbare geheugen heeft (RAM voor CPU-inferentie, VRAM voor GPU-inferentie), kunnen meerdere modellen tegelijk worden geladen, en elk geladen model kan meerdere aanvragen parallel verwerken. Dit wordt beheerd door de omgevingsvariabele OLLAMA_NUM_PARALLEL, die het maximale aantal parallele aanvragen bepaalt dat elk model tegelijk kan verwerken. Standaard is dit ingesteld op 4 (of 1, afhankelijk van de geheugengebruik), maar het kan worden aangepast.

  • Batchverwerking: Wanneer meerdere aanvragen voor hetzelfde model tegelijkertijd binnenkomen, groepeert Ollama deze en verwerkt ze samen. Dit betekent dat beide aanvragen parallel worden verwerkt en gebruikers tegelijkertijd antwoorden zullen ontvangen. De server wacht opzettelijk niet om een batch vol te maken; de verwerking begint zodra aanvragen beschikbaar zijn.

Wachtrijen en Limieten

  • Wachtrijen: Als het aantal gelijktijdige aanvragen de ingestelde paralleliteit overschrijdt (bijvoorbeeld meer dan OLLAMA_NUM_PARALLEL aanvragen voor een model), worden extra aanvragen in een wachtrij geplaatst. De wachtrij werkt op een eerst-in, eerst-uit (FIFO) manier.

  • Wachtrijlimieten: Het maximale aantal in de wachtrij geplaatste aanvragen wordt bepaald door OLLAMA_MAX_QUEUE (standaard: 512). Als de wachtrij vol is, ontvangen nieuwe aanvragen een foutmelding van 503 die aangeeft dat de server overbelast is.

  • Model Laden: Het aantal verschillende modellen dat tegelijk kan worden geladen, wordt bepaald door OLLAMA_MAX_LOADED_MODELS. Als een aanvraag een nieuw model moet laden en er onvoldoende geheugen beschikbaar is, zal Ollama ongebruikte modellen uit het geheugen verwijderen om ruimte te maken, en de aanvraag wordt in de wachtrij geplaatst tot het model geladen is.

Voorbeeldscenario

Als twee aanvragen voor hetzelfde model tegelijk binnenkomen en de paralleliteit van de server is ingesteld op minstens 2, worden beide aanvragen samen in een batch verwerkt, en ontvangen beide gebruikers tegelijkertijd antwoorden. Als de paralleliteit is ingesteld op 1, wordt één aanvraag direct verwerkt, en de tweede wordt in de wachtrij geplaatst tot de eerste is voltooid.

Als de aanvragen voor verschillende modellen zijn en er voldoende geheugen beschikbaar is, kunnen beide modellen worden geladen en de aanvragen worden parallel verwerkt. Als dat niet het geval is, moet één model mogelijk worden verwijderd, en de aanvraag wordt in de wachtrij geplaatst.

Samenvattingstabel

Scenario Resultaat
Twee aanvragen, zelfde model, voldoende paralleliteit Beide worden tegelijk verwerkt (gegroeperd)
Twee aanvragen, zelfde model, paralleliteit=1 Één wordt verwerkt, de tweede wordt in de wachtrij geplaatst tot de eerste voltooid is
Twee aanvragen, verschillende modellen, voldoende geheugen Beide modellen worden geladen, aanvragen worden parallel verwerkt
Twee aanvragen, verschillende modellen, onvoldoende geheugen Één wordt in de wachtrij geplaatst tot geheugen beschikbaar is of een model is verwijderd

In samenvatting is Ollama ontworpen om meerdere gelijktijdige aanvragen efficiënt te verwerken, mits de server is ingesteld voor gelijktijdigheid en voldoende resources beschikbaar zijn. Anders worden aanvragen in de wachtrij geplaatst en worden ze in volgorde verwerkt.

Afhandeling van Onvoldoende Geheugen

Wanneer Ollama onvoldoende geheugen heeft om binnenkomende aanvragen te verwerken, gebruikt het een combinatie van wachtrijmechanismen en resourcebeheerstrategieën om stabiliteit te behouden:

Aanvraagwachtrij

  • Nieuwe aanvragen worden in een FIFO (First-In, First-Out) wachtrij geplaatst wanneer geheugen direct niet beschikbaar is.
  • De wachtrijgrootte wordt bepaald door OLLAMA_MAX_QUEUE (standaard: 512 aanvragen).
  • Als de wachtrij vol is, ontvangen nieuwe aanvragen een foutmelding van 503 “Server Overloaded”.

Modelbeheer

  • Actieve modellen kunnen uit het geheugen worden verwijderd wanneer ze ongebruikt zijn, om resources vrij te maken voor wachtrijaanvragen.
  • Het aantal gelijktijdig geladen modellen wordt beperkt door OLLAMA_MAX_LOADED_MODELS (standaard: 3×GPU-aantallen of 3 voor CPU).

Geheugenoptimalisatie

  • Probeer aanvragen voor hetzelfde model te groeperen om geheugenoptimalisatie te maximaliseren.
  • Voor GPU-inferentie is volledige VRAM-allocaatie per model vereist - gedeeltelijke laden wordt niet ondersteund.

Foutscenario’s

Kritische Geheugenuitputting: Wanneer zelfs de wachtrij aanvragen overschrijdt beschikbare resources, kan Ollama:

  • Pagineren naar schijf (zeer slechte prestaties)
  • “Out of memory”-fouten retourneren
  • In extreme gevallen het modelinstantiecrashen
Configuratiecontrole Instelling Doel Standaardwaarde
OLLAMA_MAX_QUEUE Maximaal aantal in de wachtrij geplaatste aanvragen 512
OLLAMA_NUM_PARALLEL Aantal parallele aanvragen per geladen model 4 (of 1 als beperkt)
OLLAMA_MAX_LOADED_MODELS Maximaal aantal gelijktijdig geladen modellen 3×GPU-aantallen of 3

Beheerders moeten geheugengebruik monitoren en deze parameters aanpassen op basis van hun hardwarecapaciteiten. Afhandeling van onvoldoende geheugen wordt cruciaal bij het uitvoeren van grotere modellen (7B+ parameters) of het verwerken van meerdere gelijktijdige aanvragen.

Ollama optimalisatiestrategieën

Schakel GPU-versnelling in met export OLLAMA_CUDA=1 en stel CPU-threads in via export OLLAMA_NUM_THREADS=84. Hardwareverbeteringen

  • RAM: 32GB+ voor 13B-modellen, 64GB+ voor 70B-modellen
  • Opslag: NVMe-SSDs voor snellere modelbelading/verplaatsing
  • GPU: NVIDIA RTX 3080/4090 met 16GB+ VRAM voor grotere modellen

Bedrijfsstrategieën

  • Groeperen van aanvragen: Verwerk meerdere query’s tegelijkertijd om geheugenoverhead te verlagen
  • Automatische modelverwijdering: Laat Ollama ongebruikte modellen uit het geheugen verwijderen
  • Cachering van vaak gebruikte modellen: Houd veelgebruikte modellen in het geheugen aanwezig

Monitoring en probleemoplossing

  • Gebruik nvidia-smi (GPU) en htop (CPU/RAM) om bottlenecks te identificeren
  • Voor geheugenfouten:
  • Upgrade naar gecomponeerde modellen
  • Verminder het aantal gelijktijdige aanvragen
  • Verhoog de swapruimte

Voorbeeld van optimalisatiestroom:

# Gebruik een gecomponeerd model met GPU-versnelling
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048

# Beperk geladen modellen en parallele aanvragen
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4

Deze aanpassingen kunnen geheugengebruik met 30-60% verminderen terwijl de responskwaliteit behouden blijft, vooral nuttig bij het uitvoeren van meerdere modellen of het verwerken van hoge aanvraagvolumes.

Ollama: Groeperen van Aanvragen versus Parallelle Uitvoering

Groeperen in Ollama verwijst naar het groeperen van meerdere binnenkomende aanvragen en het verwerken ervan als een eenheid. Dit maakt een efficiënter gebruik van rekenresources mogelijk, vooral wanneer het op hardware wordt uitgevoerd die voordelen heeft van parallelle bewerkingen (zoals GPUs).

Wanneer meerdere aanvragen voor hetzelfde model tegelijk binnenkomen, kan Ollama ze samen in een groep verwerken als er genoeg geheugen beschikbaar is. Dit verhoogt de doorvoer en kan de latentie per aanvraag verminderen, omdat het model geoptimaliseerde matrixbewerkingen kan gebruiken over de groep.

Groeperen is vooral effectief wanneer aanvragen vergelijkbaar zijn in grootte en complexiteit, omdat dit betere hardwarebenutting mogelijk maakt.

Parallelle uitvoering in Ollama betekent het tegelijkertijd verwerken van meerdere aanvragen, ofwel voor hetzelfde model of voor verschillende modellen, afhankelijk van beschikbare geheugen en configuratie.

Ollama ondersteunt twee niveaus van parallelle uitvoering:

  • Meerdere modelbelading: Als voldoende geheugen beschikbaar is, kunnen meerdere modellen geladen worden en tegelijkertijd aanvragen verwerken.
  • Parallelle aanvragen per model: Elk geladen model kan meerdere aanvragen tegelijk verwerken, beheerd door de instelling OLLAMA_NUM_PARALLEL (standaard is dit 1 of 4, afhankelijk van geheugen).

Wanneer aanvragen de parallelle limiet overschrijden, worden ze in de wachtrij geplaatst (FIFO) tot OLLAMA_MAX_QUEUE.

Samenvatting

Ollama maakt gebruik van zowel groeperen als parallelle uitvoering om meerdere aanvragen efficiënt te verwerken. Groeperen groepeert aanvragen voor gelijktijdige verwerking, terwijl parallelle uitvoering meerdere aanvragen (of modellen) tegelijkertijd toelaat. Beide methoden hangen af van systeemgeheugen en zijn instelbaar voor optimale prestaties.