Hur Ollama Hanterar Parallella Förfrågningar

Konfigurera Ollama för parallella begäranden.

Sidinnehåll

När Ollama-servern tar emot två förfrågningar samtidigt, beror dess beteende på dess konfiguration och tillgängliga systemresurser.

fem fantastiska lamor står i fältet

Hantering av samtidiga förfrågningar

  • Parallell bearbetning: Ollama stöder parallell bearbetning av förfrågningar. Om systemet har tillräckligt med tillgängligt minne (RAM för CPU-inferens, VRAM för GPU-inferens), kan flera modeller laddas samtidigt, och varje laddad modell kan hantera flera förfrågningar parallellt. Detta kontrolleras av miljövariabeln OLLAMA_NUM_PARALLEL, som anger det maximala antalet parallella förfrågningar som varje modell kan bearbeta samtidigt. Standardinställningen är 4 (eller 1, beroende på minneskapacitet), men den kan justeras.

  • Batching: När flera förfrågningar för samma modell ankommer samtidigt, grupperar Ollama dem och bearbetar dem tillsammans. Detta innebär att båda förfrågningarna hanteras parallellt, och användarna kommer att se svar strömma tillbaka samtidigt. Servern väntar inte avsiktligt för att fylla en batch; bearbetningen startar så snart förfrågningar är tillgängliga.

Köhantering och gränser

  • Köhantering: Om antalet samtidiga förfrågningar överstiger den konfigurerade parallellismen (t.ex. fler än OLLAMA_NUM_PARALLEL förfrågningar för en modell), läggs ytterligare förfrågningar i kö. Köhanteringen sker enligt FIFO-principen (First-In, First-Out).

  • Kögränser: Det maximala antalet köade förfrågningar kontrolleras av OLLAMA_MAX_QUEUE (standard: 512). Om köen är full, får nya förfrågningar ett 503-fel som indikerar att servern är överbelastad.

  • Modellladdning: Antalet olika modeller som kan laddas samtidigt kontrolleras av OLLAMA_MAX_LOADED_MODELS. Om en förfrågan kräver laddning av en ny modell och minnet är otillräckligt, kommer Ollama att avladda inaktiva modeller för att skapa plats, och förfrågan kommer att köas tills modellen är laddad.

Exempel på scenario

Om två förfrågningar för samma modell ankommer samtidigt och serverns parallellism är inställd på minst 2, kommer båda förfrågningarna att bearbetas tillsammans i en batch, och båda användarna kommer att få svar samtidigt. Om parallellismen är inställd på 1, bearbetas en förfrågan omedelbart, och den andra köas tills den första är klar.

Om förfrågningarna gäller olika modeller och det finns tillräckligt med minne, kan båda modellerna laddas och förfrågningarna hanteras parallellt. Om inte, kan en modell behöva avladdas, och förfrågan kommer att köas.

Sammanfattande tabell

Scenario Result
Två förfrågningar, samma modell, tillräcklig parallellism Båda bearbetas tillsammans parallellt (batchad)
Två förfrågningar, samma modell, parallellism=1 En bearbetas, den andra köas tills den första är klar
Två förfrågningar, olika modeller, tillräckligt minne Båda modellerna laddas, förfrågningarna hanteras parallellt
Två förfrågningar, olika modeller, otillräckligt minne En köas tills minne är tillgängligt eller en modell avladdas

Sammanfattningsvis är Ollama designat för att hantera flera samtidiga förfrågningar effektivt, förutsatt att servern är konfigurerad för parallellism och har tillräckliga resurser. Annars köas förfrågningarna och bearbetas i ordning.

Hantering av otillräckligt minne

När Ollama stöter på otillräckligt minne för att hantera inkommande förfrågningar, använder den en kombination av kömekanismer och resurshanteringsstrategier för att upprätthålla stabilitet:

Köhantering av förfrågningar

  • Nya förfrågningar placeras i en FIFO-kö (First-In, First-Out) när minne inte kan allokeras omedelbart.
  • Köstorleken kontrolleras av OLLAMA_MAX_QUEUE (standard: 512 förfrågningar).
  • Om köen når kapaciteten, får nya förfrågningar 503 “Server Overloaded”-fel.

Modellhantering

  • Aktiva modeller kan avladdas från minnet när de blir inaktiva för att frigöra resurser för köade förfrågningar.
  • Antalet samtidigt laddade modeller begränsas av OLLAMA_MAX_LOADED_MODELS (standard: 3×GPU-antalet eller 3 för CPU).

Minneoptimering

  • Försök att batcha bearbeta förfrågningar för samma modell för att maximera minneseffektivitet.
  • För GPU-inferens krävs full VRAM-allokering per modell - delvis laddningar stöds inte.

Felscenarier

Kritisk minnesutmattning: När till och med köade förfrågningar överstiger tillgängliga resurser, kan Ollama:

  • Skriva till disk (allvarligt försämrar prestanda)
  • Returnera “out of memory”-fel
  • Krascha modellinstansen i extrema fall
Konfigurationskontroller Inställning Syfte Standardvärde
OLLAMA_MAX_QUEUE Maximalt antal köade förfrågningar 512
OLLAMA_NUM_PARALLEL Parallella förfrågningar per laddad modell 4 (eller 1 om begränsat)
OLLAMA_MAX_LOADED_MODELS Maximalt antal samtidigt laddade modeller 3×GPU-antalet eller 3

Administratörer bör övervaka minnesanvändningen och justera dessa parametrar baserat på sin hårdvarukapacitet. Hantering av otillräckligt minne blir avgörande när man kör större modeller (7B+ parametrar) eller bearbetar flera samtidiga förfrågningar.

Ollama optimiseringsstrategier

Aktivera GPU-accelerering med export OLLAMA_CUDA=1 och ställ in CPU-trådar via export OLLAMA_NUM_THREADS=84. Hårdvaruuppgraderingar

  • RAM: 32GB+ för 13B-modeller, 64GB+ för 70B-modeller
  • Lagring: NVMe-SSD för snabbare modellladdning/byte
  • GPU: NVIDIA RTX 3080/4090 med 16GB+ VRAM för större modeller

Driftstrategier

  • Batcha förfrågningar: Bearbeta flera frågor samtidigt för att fördela minnesöverhead
  • Automatisk modellavladdning: Låt Ollama rensa inaktiva modeller från minnet
  • Cacha frekvent använda modeller: Håll vanliga modeller i minnet

Övervakning & felsökning

  • Använd nvidia-smi (GPU) och htop (CPU/RAM) för att identifiera flaskhalsar
  • Vid minnesfel:
  • Uppgradera till kvantiserade modeller
  • Minska samtidiga förfrågningar
  • Öka swap-utrymme

Exempel på optimeringarbetsflöde:

# Använd kvantiserad modell med GPU-accelerering
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048

# Begränsa laddade modeller och parallella förfrågningar
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4

Dessa justeringar kan minska minnesanvändningen med 30-60% samtidigt som svarskvaliteten upprätthålls, särskilt fördelaktigt när flera modeller körs eller vid hantering av höga förfrågningsvolymer.

Ollama: Batching av förfrågningar vs parallell utförande

Batching i Ollama avser att gruppera flera inkommande förfrågningar tillsammans och bearbeta dem som en enhet. Detta möjliggör mer effektiv användning av beräkningsresurser, särskilt när man kör på hårdvara som gynnas av parallella operationer (t.ex. GPUs).

När flera förfrågningar för samma modell ankommer samtidigt, kan Ollama bearbeta dem tillsammans i en batch om minnet tillåter. Detta ökar genomflödet och kan minska latens för varje förfrågan, eftersom modellen kan utnyttja optimerade matrisoperationer över batchen.

Batching är särskilt effektivt när förfrågningarna är liknande i storlek och komplexitet, vilket möjliggör bättre hårdvaruanvändning.

Parallell utförande i Ollama innebär att hantera flera förfrågningar samtidigt, antingen för samma modell eller för olika modeller, beroende på tillgängligt minne och konfiguration.

Ollama stöder två nivåer av parallellism:

  • Flera modeller laddade: Om tillräckligt med minne finns, kan flera modeller laddas och betjäna förfrågningar samtidigt.
  • Parallella förfrågningar per modell: Varje laddad modell kan bearbeta flera förfrågningar parallellt, kontrollerat av inställningen OLLAMA_NUM_PARALLEL (standard är 1 eller 4, beroende på minne).

När förfrågningar överstiger parallellismgränsen, köas de (FIFO) upp till OLLAMA_MAX_QUEUE.

Sammanfattning

Ollama utnyttjar både batchning och parallell utförande för att bearbeta flera förfrågningar effektivt. Batching grupperar förfrågningar för samtidig bearbetning, medan parallell utförande låter flera förfrågningar (eller modeller) köras samtidigt. Båda metoderna beror på systemminnet och är konfigurerbara för optimal prestanda.

Användbara länkar