Jak Ollama obsługuje równoległe żądania
Zrozumienie współbieżności Ollamy, kolejkowania oraz sposobu dostrajania OLLAMA_NUM_PARALLEL w celu zapewnienia stabilnych równoległych zapytań.
Ten przewodnik wyjaśnia jak Ollama obsługuje równoległe żądania (konkurencja, kolejki i limity zasobów) oraz jak je optymalizować za pomocą zmiennej środowiskowej OLLAMA_NUM_PARALLEL (i powiązanych parametrów).
Przeskocz do: Co to jest OLLAMA_NUM_PARALLEL? · Szybkie przepisy do strojenia · Jak działa kolejkowanie · Rozwiązywanie problemów · Powiązane: Ściąga poleceń Ollama CLI
Aby uzyskać więcej informacji na temat przepustowości, opóźnień, VRAM i benchmarków w różnych środowiskach wykonawczych i sprzęcie, zobacz Wydajność LLM: Benchmarks, wąskie gardła i optymalizacja.
Agentom wieloetapowym mnożą się próby ponownych połączeń, gdy próbkowanie jest niestabilne; aby poznać domyślne wartości temperatury, top_p i kar dla modeli z klasy Qwen i Gemma, zobacz parametry wnioskowania agentowego dla Qwen i Gemma.

Obsługa równoległych żądań
-
Przetwarzanie równoległe: Ollama obsługuje równoległe przetwarzanie żądań. Jeśli system ma wystarczająco dużo dostępnej pamięci (RAM dla wnioskowania CPU, VRAM dla wnioskowania GPU), wiele modeli może być załadowanych jednocześnie, a każdy załadowany model może obsługiwać kilka żądań równolegle. Jest to kontrolowane przez zmienną środowiskową
OLLAMA_NUM_PARALLEL, która ustawia maksymalną liczbę równoległych żądań, które każdy model może przetwarzać jednocześnie. Domyślnie jest to ustawione na 4 (lub 1, w zależności od dostępnej pamięci), ale można to dostosować. -
Grupowanie (Batching): Gdy wiele żądań dla tego samego modelu przychodzi jednocześnie, Ollama grupuje je i przetwarza razem. Oznacza to, że oba żądania są obsługiwane równolegle, a użytkownicy zobaczą odpowiedzi przesyłane strumieniowo w tym samym czasie. Serwer nie celowo czeka na wypełnienie partii; przetwarzanie rozpoczyna się, gdy tylko żądania są dostępne.
Kolejki i limity
-
Kolejkowanie: Jeśli liczba równoległych żądań przekroczy skonfigurowaną równoległość (np. więcej niż
OLLAMA_NUM_PARALLELżądań dla modelu), dodatkowe żądania są umieszczane w kolejce. Kolejka działa w sposób FIFO (First-In, First-Out). -
Limity kolejki: Maksymalna liczba żądań w kolejce jest kontrolowana przez
OLLAMA_MAX_QUEUE(domyślnie: 512). Jeśli kolejka jest pełna, nowe żądania otrzymują błąd 503, wskazujący, że serwer jest przeciążony. -
Ładowanie modeli: Liczba różnych modeli, które mogą być załadowane jednocześnie, jest kontrolowana przez
OLLAMA_MAX_LOADED_MODELS. Jeśli żądanie wymaga załadowania nowego modelu, a pamięci jest niewystarczająco, Ollama odładuje bezczynne modele, aby zrobić miejsce, a żądanie zostanie umieszczone w kolejce do czasu załadowania modelu.
Przykładowy scenariusz
Jeśli dwa żądania dla tego samego modelu przyjdą w tym samym czasie, a równoległość serwera jest ustawiona na co najmniej 2, oba żądania zostaną przetworzone razem w partii, a obaj użytkownicy otrzymają odpowiedzi równocześnie. Jeśli równoległość jest ustawiona na 1, jedno żądanie jest przetwarzane natychmiast, a drugie jest umieszczane w kolejce do czasu zakończenia pierwszego.
Jeśli żądania są dla różnych modeli i jest wystarczająco dużo pamięci, oba modele mogą być załadowane, a żądania obsłużone równolegle. Jeśli nie, jeden model może wymagać odładowania, a żądanie zostanie umieszczone w kolejce.
Tabela podsumowująca
| Scenariusz | Wynik |
|---|---|
| Dwa żądania, ten sam model, wystarczająca równoległość | Oba przetwarzane razem równolegle (grupowane) |
| Dwa żądania, ten sam model, równoległość=1 | Jedno przetwarzane, drugie w kolejce do czasu zakończenia pierwszego |
| Dwa żądania, różne modele, wystarczająca pamięć | Oba modele załadowane, żądania obsługiwane równolegle |
| Dwa żądania, różne modele, niewystarczająca pamięć | Jedno w kolejce do czasu dostępności pamięci lub odładowania modelu |
Podsumowując, Ollama jest zaprojektowany do efektywnej obsługi wielu jednoczesnych żądań, pod warunkiem, że serwer jest skonfigurowany do konkurencji i ma wystarczające zasoby. W przeciwnym razie żądania są umieszczane w kolejce i przetwarzane kolejno.
Jeśli zwiększanie OLLAMA_NUM_PARALLEL nie utrzymuje już stabilnego opóźnienia, a kolejka nieustannie rośnie pod rzeczywistym obciążeniem, jest to jeden z wyraźniejszych sygnałów, który należy rozważyć przy przejściu na specjalistyczny silnik serwowania. Ollama do vLLM: Kiedy przenieść lokalny serwer LLM omawia tę decyzję, w tym ciągłe grupowanie i PagedAttention jako mechanizmy, których vLLM używa, aby zapobiec wzajemnemu pogarszaniu się równoległych żądań.
Obsługa niewystarczającej pamięci
Gdy Ollama napotka niewystarczającą pamięć do obsługi przychodzących żądań, stosuje kombinację mechanizmów kolejkowania i strategii zarządzania zasobami, aby utrzymać stabilność:
Kolejkowanie żądań
- Nowe żądania są umieszczane w kolejce FIFO (First-In, First-Out), gdy pamięć nie może zostać przydzielona natychmiast.
- Rozmiar kolejki jest kontrolowany przez OLLAMA_MAX_QUEUE (domyślnie: 512 żądań).
- Jeśli kolejka osiągnie pojemność, nowe żądania otrzymują błędy 503 “Serwer przeciążony”.
Zarządzanie modelami
- Aktywne modele mogą być odładowywane z pamięci, gdy stają się bezczynne, aby zwolnić zasoby dla żądań w kolejce.
- Liczba jednocześnie załadowanych modeli jest ograniczona przez OLLAMA_MAX_LOADED_MODELS (domyślnie: 3× liczba GPU lub 3 dla CPU).
Optymalizacja pamięci
- Próby grupowania żądań dla tego samego modelu, aby zmaksymalizować efektywność pamięci.
- Dla wnioskowania GPU wymaga pełnej alokacji VRAM dla każdego modelu – częściowe załadowanie nie jest obsługiwane.
Scenariusze awaryjne
Krytyczne wyczerpanie pamięci: Gdy nawet żądania w kolejce przekraczają dostępne zasoby, Ollama może:
- Prowadzić do dysku (poważnie pogarszając wydajność)
- Zwracać błędy “brak pamięci”
- Wywoływać awarię instancji modelu w skrajnych przypadkach
| Kontrola konfiguracji Ustawienie | Cel | Wartość domyślna |
|---|---|---|
| OLLAMA_MAX_QUEUE | Maksymalna liczba żądań w kolejce | 512 |
| OLLAMA_NUM_PARALLEL | Równoległe żądania dla załadowanego modelu | 4 (lub 1, jeśli ograniczone) |
| OLLAMA_MAX_LOADED_MODELS | Maksymalna liczba jednocześnie załadowanych modeli | 3× liczba GPU lub 3 |
Administratorzy powinni monitorować użycie pamięci i dostosowywać te parametry w zależności od możliwości sprzętowych. Obsługa niewystarczającej pamięci staje się kluczowa podczas uruchamiania większych modeli (7B+ parametrów) lub przetwarzania wielu równoległych żądań.
Strategie optymalizacji Ollama
Włącz przyspieszenie GPU za pomocą export OLLAMA_CUDA=1 i ustaw wątki CPU za pomocą export OLLAMA_NUM_THREADS=84.
Usprawnienia sprzętowe
- RAM: 32GB+ dla modeli 13B, 64GB+ dla modeli 70B
- Przechowywanie: Dyski NVMe SSD dla szybszego ładowania/przełączania modeli
- GPU: NVIDIA RTX 3080/4090 z 16GB+ VRAM dla większych modeli
Strategie operacyjne
- Grupowanie żądań: Przetwarzaj wiele zapytań jednocześnie, aby rozłożyć narzut pamięci
- Automatyczne odładowywanie modeli: Pozwala Ollama usunąć bezczynne modele z pamięci
- Buforowanie często używanych modeli: Utrzymuj wspólne modele w pamięci
Monitorowanie i rozwiązywanie problemów
- Użyj
nvidia-smi(GPU) ihtop(CPU/RAM) do identyfikacji wąskich gardeł - Dla błędów pamięci:
- Przejrzyj do modeli kwantyzowanych
- Zmniejsz liczbę równoległych żądań
- Zwiększ przestrzeń swap
Przykładowy przepływ optymalizacji:
### Użyj modelu kwantyzowanego z przyspieszeniem GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
### Ogranicz załadowane modele i równoległe żądania
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
Te dostosowania mogą zmniejszyć użycie pamięci o 30-60%, zachowując jakość odpowiedzi, co jest szczególnie korzystne przy uruchamianiu wielu modeli lub obsłudze dużych objętości żądań.
Zmienna środowiskowa OLLAMA_NUM_PARALLEL
OLLAMA_NUM_PARALLEL kontroluje, ile żądań Ollama wykona równolegle. Jeśli wyślesz wiele żądań do tego samego serwera Ollama, to ustawienie w dużej mierze decyduje, czy będą one wykonywane równolegle, czy umieszczone w kolejce.
- Wyższe wartości mogą zwiększyć przepustowość jeśli masz wystarczająco dużo CPU/GPU/VRAM, ale mogą zwiększyć opóźnienie i presję na pamięć.
- Niższe wartości zmniejszają konkurencję i mogą poprawić stabilność, ale żądania będą częściej umieszczane w kolejce.
Jak ustawić OLLAMA_NUM_PARALLEL
Linux / macOS (usługa systemd lub powłoka):
export OLLAMA_NUM_PARALLEL=2
ollama serve
Uruchomienie jednorazowe (prefiks tylko dla tego polecenia):
OLLAMA_NUM_PARALLEL=2 ollama serve
Docker (przykład):
docker run --rm -e OLLAMA_NUM_PARALLEL=2 -p 11434:11434 ollama/ollama
Jak wybrać wartość
Zacznij od 1–2 dla pojedynczego GPU / ograniczonego VRAM, a następnie zwiększaj stopniowo, obserwując:
- Użycie VRAM GPU (OOM / usunięcia)
- Użycie CPU i średnią obciążenia
- Opóźnienie p95 typowych żądań
- Poziom błędów / przekroczeń limitu czasu
Jeśli optymalizujesz konkretną stronę dla użytku CLI, zobacz sekcję Ollama CLI w ściadze oraz przykłady poleceń dla
ollama serve,ollama psiollama run.
Szybkie przepisy do strojenia
Priorytet: Stabilność
OLLAMA_NUM_PARALLEL=1- Używaj mniejszych / kwantyzowanych modeli
- Wol krótszych rozmiarów kontekstu
Priorytet: Przepustowość
OLLAMA_NUM_PARALLEL=2(lub wyższe, jeśli masz zapas)- Rozważ grupowanie żądań na warstwie klienta
- Zapewnij wystarczający VRAM i wątki CPU
“Brakuje mi VRAM, gdy przychodzą dwa żądania”
- Zmniejsz
OLLAMA_NUM_PARALLEL - Użyj bardziej agresywnie kwantyzowanego modelu
- Zmniejsz długość kontekstu / maksymalną liczbę tokenów
Rozwiązywanie problemów
Objawy, że OLLAMA_NUM_PARALLEL jest zbyt wysoki
- Żądania kończą się niepowodzeniem od czasu do czasu pod obciążeniem
- OOM GPU / odładowywanie modeli występuje często
- Skoki opóźnień, gdy pojawia się drugie żądanie
Objawy, że OLLAMA_NUM_PARALLEL jest zbyt niski
- CPU/GPU jest niedokorzystywany
- Opóźnienia kolejkowania dominują całkowity czas odpowiedzi
Wskazówka: Jeśli kontrolujesz również swój klient, dodaj powtórzenia z jitterem i połączenia keep-alive. Wiele problemów z “wolnym Ollama” to w rzeczywistości kolejkowanie + narzut połączeń.
Ollama: Grupowanie żądań vs Wykonywanie równoległe
Grupowanie w Ollama odnosi się do praktyki grupowania wielu przychodzących żądań i przetwarzania ich jako jednej jednostki. Pozwala to na bardziej efektywne wykorzystanie zasobów obliczeniowych, zwłaszcza przy uruchamianiu na sprzęcie, który korzysta z operacji równoległych (takich jak GPU).
Gdy wiele żądań dla tego samego modelu przychodzi jednocześnie, Ollama może przetwarzać je razem w partii, jeśli pamięci na to pozwala. Zwiększa to przepustowość i może zmniejszyć opóźnienie dla każdego żądania, ponieważ model może wykorzystać zoptymalizowane operacje macierzowe na partii.
Grupowanie jest szczególnie skuteczne, gdy żądania są podobne pod względem rozmiaru i złożoności, co pozwala na lepsze wykorzystanie sprzętu.
Wykonywanie równoległe w Ollama oznacza obsługę wielu żądań w tym samym czasie, zarówno dla tego samego modelu, jak i dla różnych modeli, w zależności od dostępnej pamięci i konfiguracji.
Ollama obsługuje dwa poziomy równoległości:
- Ładowanie wielu modeli: Jeśli jest wystarczająco dużo pamięci, wiele modeli może być załadowanych i obsługiwać żądania jednocześnie.
- Równoległe żądania na model: Każdy załadowany model może przetwarzać kilka żądań równolegle, co jest kontrolowane przez ustawienie OLLAMA_NUM_PARALLEL (domyślnie 1 lub 4, w zależności od pamięci).
Gdy żądania przekraczają limit równoległości, są umieszczane w kolejce (FIFO) do OLLAMA_MAX_QUEUE.
Podsumowanie
Ollama wykorzystuje zarówno grupowanie, jak i wykonanie równoległe do efektywnego przetwarzania wielu żądań. Grupowanie łączy żądania do jednoczesnego przetwarzania, podczas gdy wykonanie równoległe pozwala na jednoczesne uruchamianie wielu żądań (lub modeli). Obie metody zależą od pamięci systemowej i są konfigurowalne dla optymalnej wydajności.
Aby uzyskać więcej benchmarków, strojenia konkurencji i wskazówek dotyczących wydajności, sprawdź nasz Wydajność LLM: Benchmarks, wąskie gardła i optymalizacja.