Wie Ollama parallele Anfragen verarbeitet

Konfigurieren Sie ollama für die parallele Ausführung von Anfragen.

Inhaltsverzeichnis

Wenn der Ollama-Server zwei Anfragen gleichzeitig erhält, hängt sein Verhalten von seiner Konfiguration und den verfügbaren Systemressourcen ab.

five awesome llamas are standing in the field

Konkurrenzverarbeitung

  • Parallele Verarbeitung: Ollama unterstützt die parallele Verarbeitung von Anfragen. Wenn das System genügend verfügbaren Speicher (RAM für CPU-Verarbeitung, VRAM für GPU-Verarbeitung) hat, können mehrere Modelle gleichzeitig geladen werden, und jedes geladene Modell kann mehrere Anfragen parallel verarbeiten. Dies wird durch die Umgebungsvariable OLLAMA_NUM_PARALLEL gesteuert, die die maximale Anzahl paralleller Anfragen angibt, die jedes Modell gleichzeitig verarbeiten kann. Standardmäßig ist dies auf 4 (oder 1, je nach Speicherverfügbarkeit) eingestellt, kann aber angepasst werden.

  • Batchverarbeitung: Wenn mehrere Anfragen für dasselbe Modell gleichzeitig eintreffen, gruppiert Ollama sie und verarbeitet sie gemeinsam. Das bedeutet, dass beide Anfragen parallel verarbeitet werden und die Benutzer gleichzeitig Antworten empfangen. Der Server wartet nicht absichtlich, um einen Batch zu füllen; die Verarbeitung beginnt, sobald Anfragen vorliegen.

Warteschlange und Grenzen

  • Warteschlange: Wenn die Anzahl der parallellen Anfragen die konfigurierte Parallelität überschreitet (z. B. mehr als OLLAMA_NUM_PARALLEL Anfragen für ein Modell), werden zusätzliche Anfragen in die Warteschlange gestellt. Die Warteschlange funktioniert nach dem First-In-First-Out-Prinzip (FIFO).

  • Warteschlangengrenzen: Die maximale Anzahl der in der Warteschlange befindlichen Anfragen wird durch OLLAMA_MAX_QUEUE (Standardwert: 512) gesteuert. Wenn die Warteschlange voll ist, erhalten neue Anfragen einen 503-Fehler, der anzeigt, dass der Server überlastet ist.

  • Modellladen: Die Anzahl der verschiedenen Modelle, die gleichzeitig geladen werden können, wird durch OLLAMA_MAX_LOADED_MODELS gesteuert. Wenn eine Anfrage das Laden eines neuen Modells erfordert und der Speicher nicht ausreicht, entlädt Ollama inaktive Modelle, um Platz zu schaffen, und die Anfrage wird in die Warteschlange gestellt, bis das Modell geladen ist.

Beispiel-Szenario

Wenn zwei Anfragen für dasselbe Modell gleichzeitig eintreffen und die Parallelität des Servers auf mindestens 2 eingestellt ist, werden beide Anfragen gemeinsam in einem Batch verarbeitet, und beide Benutzer erhalten gleichzeitig Antworten. Wenn die Parallelität auf 1 eingestellt ist, wird eine Anfrage sofort verarbeitet, und die andere wird in die Warteschlange gestellt, bis die erste abgeschlossen ist.

Wenn die Anfragen für unterschiedliche Modelle sind und genügend Speicher vorhanden ist, können beide Modelle geladen werden, und die Anfragen werden parallel verarbeitet. Wenn nicht, muss ein Modell entladen werden, und die Anfrage wird in die Warteschlange gestellt.

Zusammenfassungstabelle

Szenario Ergebnis
Zwei Anfragen, gleiche Modelle, genügend Parallelität Beide werden parallel (in Batch) verarbeitet
Zwei Anfragen, gleiche Modelle, Parallelität=1 Eine wird verarbeitet, die zweite wartet, bis die erste abgeschlossen ist
Zwei Anfragen, unterschiedliche Modelle, genügend Speicher Beide Modelle werden geladen, Anfragen werden parallel verarbeitet
Zwei Anfragen, unterschiedliche Modelle, nicht genügend Speicher Eine wartet, bis Speicher verfügbar ist oder ein Modell entladen wurde

Zusammenfassend ist Ollama so konzipiert, dass es mehrere gleichzeitige Anfragen effizient verarbeitet, vorausgesetzt, der Server ist für Parallelität konfiguriert und verfügt über ausreichende Ressourcen. Andernfalls werden Anfragen in die Warteschlange gestellt und in Reihenfolge verarbeitet.

Umgang mit unzureichendem Speicher

Wenn Ollama nicht genügend Speicher zur Verarbeitung eingehender Anfragen hat, setzt es eine Kombination aus Warteschlangemechanismen und Ressourcenverwaltungsstrategien ein, um die Stabilität zu gewährleisten:

Warteschlange

  • Neue Anfragen werden in eine FIFO-(First-In, First-Out)-Warteschlange gestellt, wenn Speicher nicht sofort zugewiesen werden kann.
  • Die Warteschlangengröße wird durch OLLAMA_MAX_QUEUE (Standardwert: 512 Anfragen) gesteuert.
  • Wenn die Warteschlange ihre Kapazität erreicht, erhalten neue Anfragen einen 503-Fehler „Server überlastet“.

Modellverwaltung

  • Aktive Modelle können aus dem Speicher entladen werden, wenn sie inaktiv werden, um Ressourcen für wartende Anfragen freizugeben.
  • Die Anzahl der gleichzeitig geladenen Modelle ist durch OLLAMA_MAX_LOADED_MODELS (Standardwert: 3×GPU-Zahl oder 3 für CPU) begrenzt.

Speicheroptimierung

  • Versuche, Anfragen für dasselbe Modell in Batch zu verarbeiten, um die Speichereffizienz zu maximieren.
  • Für GPU-Verarbeitung ist eine vollständige VRAM-Zuordnung pro Modell erforderlich – partielle Ladevorgänge werden nicht unterstützt.

Fehlerszenarien

Kritische Speichererschöpfung: Wenn selbst wartende Anfragen die verfügbaren Ressourcen überschreiten, kann Ollama:

  • Auf die Festplatte auslagern (leistungsfähigkeitsstarkes Verlust)
  • „Out of memory“-Fehler zurückgeben
  • Im Extremfall das Modellinstanz abstürzen lassen
Konfigurationsparameter Zweck Standardwert
OLLAMA_MAX_QUEUE Maximale Anzahl wartender Anfragen 512
OLLAMA_NUM_PARALLEL Parallele Anfragen pro geladenem Modell 4 (oder 1, wenn begrenzt)
OLLAMA_MAX_LOADED_MODELS Maximale Anzahl gleichzeitig geladener Modelle 3×GPU-Zahl oder 3

Administratoren sollten den Speicherbedarf überwachen und diese Parameter entsprechend der Hardwarekapazitäten anpassen. Die Umgang mit unzureichendem Speicher wird besonders wichtig, wenn größere Modelle (7B+ Parameter) ausgeführt oder mehrere parallelle Anfragen verarbeitet werden.

Ollama-Optimierungsstrategien

Aktiviere GPU-Beschleunigung mit export OLLAMA_CUDA=1 und setze CPU-Threads mit export OLLAMA_NUM_THREADS=84. Hardware-Verbesserungen

  • RAM: 32GB+ für 13B-Modelle, 64GB+ für 70B-Modelle
  • Speicher: NVMe-SSDs für schnellere Modellladung/Wechsel
  • GPU: NVIDIA RTX 3080/4090 mit 16GB+ VRAM für größere Modelle

Betriebsstrategien

  • Batch-Anfragen: Verarbeite mehrere Abfragen gleichzeitig, um die Speicherüberhead zu amortisieren
  • Automatisches Entladen von Modellen: Lasse Ollama inaktive Modelle aus dem Speicher entfernen
  • Cache häufig genutzte Modelle: Halte häufig genutzte Modelle im Speicher

Überwachung und Fehlerbehebung

  • Nutze nvidia-smi (GPU) und htop (CPU/RAM), um Engpässe zu identifizieren
  • Bei Speicherfehlern:
  • Upgrade auf quantisierte Modelle
  • Reduziere parallelle Anfragen
  • Erhöhe den Swap-Raum

Beispiel für eine Optimierungsworkflow:

# Nutze quantisiertes Modell mit GPU-Beschleunigung
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048

# Begrenze geladene Modelle und parallelle Anfragen
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4

Diese Anpassungen können den Speicherbedarf um 30–60 % reduzieren, während die Antwortqualität erhalten bleibt, insbesondere wenn mehrere Modelle ausgeführt oder viele Anfragen verarbeitet werden.

Ollama: Batchverarbeitung von Anfragen vs. parallele Ausführung

Batchverarbeitung bei Ollama bezieht sich auf die Praxis, mehrere eingehende Anfragen zu gruppieren und sie als Einheit zu verarbeiten. Dies ermöglicht eine effizientere Nutzung der Rechenressourcen, insbesondere bei Hardware, die von parallelen Operationen profitiert (z. B. GPUs).

Wenn mehrere Anfragen für dasselbe Modell gleichzeitig eintreffen, kann Ollama sie, sofern der Speicher es zulässt, gemeinsam in einem Batch verarbeiten. Dies erhöht die Durchsatzleistung und kann die Latenz pro Anfrage reduzieren, da das Modell optimierte Matrixoperationen über den Batch nutzen kann.

Batchverarbeitung ist besonders effektiv, wenn Anfragen in Größe und Komplexität ähnlich sind, da dies eine bessere Hardwareauslastung ermöglicht.

Parallele Ausführung bei Ollama bedeutet, mehrere Anfragen gleichzeitig zu verarbeiten, entweder für dasselbe Modell oder für unterschiedliche Modelle, abhängig von der verfügbaren Speicher und der Konfiguration.

Ollama unterstützt zwei Ebenen der Parallelität:

  • Mehrfaches Modellladen: Wenn genügend Speicher vorhanden ist, können mehrere Modelle geladen werden und gleichzeitig Anfragen bearbeiten.
  • Parallele Anfragen pro Modell: Jedes geladene Modell kann mehrere Anfragen parallel verarbeiten, was durch die Einstellung OLLAMA_NUM_PARALLEL (Standardwert ist 1 oder 4, je nach Speicher) gesteuert wird.

Wenn Anfragen die Parallelitätsgrenze überschreiten, werden sie in die Warteschlange (FIFO) gestellt, bis OLLAMA_MAX_QUEUE erreicht ist.

Zusammenfassung

Ollama nutzt sowohl Batchverarbeitung als auch parallele Ausführung, um mehrere Anfragen effizient zu verarbeiten. Batchverarbeitung gruppiert Anfragen für gleichzeitige Verarbeitung, während parallele Ausführung mehrere Anfragen (oder Modelle) gleichzeitig laufen lässt. Beide Methoden hängen vom Systemspeicher ab und sind für optimale Leistung konfigurierbar.