Hur Ollama hanterar parallella begäranden

Konfigurera ollama för parallell exekvering av begäranden.

Sidinnehåll

När Ollama-servern får två begäranden samtidigt, beror dess beteende på dess konfiguration och tillgängliga systemresurser.

För mer information om genomströmning, latens, VRAM och jämförelser över olika körningar och hårdvara, se LLM Performance: Benchmarks, Bottlenecks & Optimization.

fem fantastiska llamas står i fältet

Hantering av parallella begäranden

  • Parallellbearbetning: Ollama stöder parallellbearbetning av begäranden. Om systemet har tillräckligt med tillgängligt minne (RAM för CPU-inferens, VRAM för GPU-inferens), kan flera modeller laddas in samtidigt, och varje laddad modell kan hantera flera begäranden parallellt. Detta styrs av miljövariabeln OLLAMA_NUM_PARALLEL, som sätter det maximala antalet parallella begäranden som varje modell kan bearbeta samtidigt. Standardvärdet är inställt till 4 (eller 1, beroende på minnesåtkomst), men det kan justeras.

  • Batchbearbetning: När flera begäranden för samma modell kommer in samtidigt, grupperar Ollama dem och bearbetar dem tillsammans. Detta innebär att båda begäranden hanteras parallellt, och användarna kommer att se svar som strömmar tillbaka samtidigt. Servern väntar inte avsiktligt för att fylla en batch; bearbetningen påbörjas så snart som begäranden är tillgängliga.

Kö och gränser

  • : Om antalet parallella begäranden överskrider den konfigurerade parallellismen (t.ex. fler än OLLAMA_NUM_PARALLEL begäranden för en modell), kommer ytterligare begäranden att läggas i en kö. Kön fungerar enligt en först-in, först-ut (FIFO) princip.

  • Kögränser: Det maximala antalet begäranden i kön styrs av OLLAMA_MAX_QUEUE (standard: 512). Om kön är full, får nya begäranden ett fel med koden 503 som anger att servern är överbelastad.

  • Modellladdning: Det maximala antalet olika modeller som kan laddas in samtidigt styrs av OLLAMA_MAX_LOADED_MODELS. Om en begäran kräver att en ny modell laddas in och minnet är otillräckligt, kommer Ollama att avlägsna inaktiva modeller för att skapa plats, och begäran kommer att läggas i kön tills modellen är laddad in.

Exempelscenario

Om två begäranden för samma modell kommer in samtidigt och servers parallellism är inställd till minst 2, kommer båda begäranden att bearbetas tillsammans i en batch, och båda användare kommer att få svar samtidigt. Om parallellismen är inställd till 1, bearbetas en begäran direkt, och den andra läggs i kön tills den första är klar.

Om begärandena är för olika modeller och det finns tillräckligt med minne, kan båda modellerna laddas in och begärandena bearbetas parallellt. Om inte, kan en modell behöva avlägsnas, och begäran läggs i kön.

Sammanfattningstabell

Scenario Result
Två begäranden, samma modell, tillräcklig parallellism Båda bearbetas tillsammans parallellt (batchad)
Två begäranden, samma modell, parallellism=1 En bearbetas, andra läggs i kön tills den första är klar
Två begäranden, olika modeller, tillräckligt minne Båda modeller laddas in, begäranden bearbetas parallellt
Två begäranden, olika modeller, inte tillräckligt minne En läggs i kön tills minnet är tillgängligt eller en modell avlägsnas

Sammanfattningsvis är Ollama utformad för att hantera flera samtidiga begäranden effektivt, förutsatt att servern är konfigurerad för parallellism och har tillräckliga resurser. Annars läggs begäranden i kö och bearbetas i ordning.

Hantering av otillräckligt minne

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

Begäranskö

  • Nya begäranden placeras i en FIFO (först-in, först-ut)-kö när minne inte kan tilldelas omedelbart.
  • Kölängden styrs av OLLAMA_MAX_QUEUE (standard: 512 begäranden).
  • Om kön når sin kapacitet, får nya begäranden ett 503-fel som anger att servern är överbelastad.

Modellanvändning

  • Aktiva modeller kan avlägsnas från minnet när de blir inaktiva för att frigöra resurser för köade begäranden.
  • Det maximala antalet samtidigt laddade modeller begränsas av OLLAMA_MAX_LOADED_MODELS (standard: 3×GPU-antal eller 3 för CPU).

Minnesoptimering

  • Försök att gruppera begäranden för samma modell för att maximera minneseffektivitet.
  • För GPU-inferens krävs full VRAM-allocering per modell – delvis laddning stöds inte.

Misslyckade scenarier

Kritisk minnesutmattning: När enskilda köade begäranden överskrider tillgängliga resurser, kan Ollama:

  • Sida till disk (värdering av prestanda påverkas starkt)
  • Returnera “out of memory”-fel
  • I extrem fall krascha modellinstansen
Konfigurationsinställning Syfte Standardvärde
OLLAMA_MAX_QUEUE Maximalt antal köade begäranden 512
OLLAMA_NUM_PARALLEL Parallella begäranden per laddad modell 4 (eller 1 om begränsat)
OLLAMA_MAX_LOADED_MODELS Maximalt antal samtidigt laddade modeller 3×GPU-antal eller 3

Administratörer bör övervaka minnesanvändningen och justera dessa parametrar utifrån deras hårdvarukapacitet. Hanteringen av otillräckligt minne blir särskilt viktig när man kör större modeller (7B+ parametrar) eller bearbetar flera parallella begäranden.

Ollama optimeringsstrategier

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

  • 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

  • Gruppera begäranden: Bearbeta flera frågor samtidigt för att sprida minnesöverhäng
  • Automatisk modellavlägsning: Låt Ollama rensa inaktiva modeller från minnet
  • Cachera ofta använda modeller: Håll vanliga modeller i minnet

Övervakning och felsökning

  • Använd nvidia-smi (GPU) och htop (CPU/RAM) för att identifiera fläckar
  • För minnesfel:
  • Uppgradera till kvantisering av modeller
  • Minska antalet parallella begäranden
  • Öka utbytetrymme

Exempel på optimeringsflöde:

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

# Begränsa laddade modeller och parallella begäranden
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4

Dessa justeringar kan minska minnesanvändningen med 30-60% samtidigt som svarskvaliteten behålls, särskilt användbara när flera modeller köras eller när många begäranden hanteras.

Ollama: Batchbearbetning av begäranden mot parallellkörning

Batchbearbetning i Ollama syftar till att gruppera flera inkommande begäranden tillsammans och bearbeta dem som en enhet. Detta möjliggör en mer effektiv användning av beräkningsresurser, särskilt när man kör på hårdvara som gynnas av parallellbearbetning (t.ex. GPU:er).

När flera begäranden för samma modell kommer in samtidigt, kan Ollama bearbeta dem tillsammans i en batch om minnet tillåter det. Detta ökar genomströmningen och kan minska latensen för varje enskild begäran, eftersom modellen kan utnyttja optimerade matrisoperationer över batchen.

Batchbearbetning är särskilt effektiv när begäranden är liknande i storlek och komplexitet, eftersom detta möjliggör bättre användning av hårdvaran.

Parallellkörning i Ollama innebär att flera begäranden hanteras samtidigt, antingen för samma modell eller olika modeller, beroende på tillgängligt minne och konfiguration.

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

  • Laddning av flera modeller: Om tillräckligt minne finns tillgängligt, kan flera modeller laddas in och hantera begäranden samtidigt.
  • Parallella begäranden per modell: Varje laddad modell kan bearbeta flera begäranden parallellt, styrs av inställningen OLLAMA_NUM_PARALLEL (standard är 1 eller 4, beroende på minne).

När begäranden överskrider parallellismens gräns, läggs de i kö (FIFO) upp till OLLAMA_MAX_QUEUE.

Sammanfattning

Ollama använder både batchbearbetning och parallellkörning för att effektivt bearbeta flera begäranden. Batchbearbetning grupperar begäranden för samtidig bearbetning, medan parallellkörning möjliggör att flera begäranden (eller modeller) körs parallellt. Båda metoderna beror på systemminnet och kan konfigureras för optimal prestanda.

För fler jämförelser, justering av parallellism och prestandaråd, se vår LLM Performance: Benchmarks, Bottlenecks & Optimization-hub.

Nytta länkar