Как Ollama обрабатывает параллельные запросы
Поймите механизм параллелизма и очередей в Ollama, а также настройте OLLAMA_NUM_PARALLEL для стабильной обработки параллельных запросов.
В этом руководстве объясняется как Ollama обрабатывает параллельные запросы (конкурентность, очередь и ограничения ресурсов) и как настроить это с помощью переменной окружения OLLAMA_NUM_PARALLEL (и связанных параметров).
Быстрые ссылки: Что такое OLLAMA_NUM_PARALLEL? · Быстрые рецепты настройки · Как работает очередь · Устранение неполадок · Связанное: Шпаргалка по командам CLI Ollama
Для дополнительной информации по пропускной способности, задержкам, VRAM и бенчмаркам на разных рантаймах и аппаратных средствах см. Производительность LLM: бенчмарки, узкие места и оптимизация.
Многоступенчатые агенты умножают повторы (retries), если сэмплирование нестабильно; для параметров температуры, top_p и штрафов по умолчанию на моделях класса Qwen и Gemma см. Агентные параметры вывода для Qwen и Gemma.

Обработка конкурентных запросов
-
Параллельная обработка: Ollama поддерживает конкурентную обработку запросов. Если в системе достаточно доступной памяти (RAM для CPU-инференса, VRAM для GPU-инференса), несколько моделей могут быть загружены одновременно, и каждая загруженная модель может обрабатывать несколько запросов параллельно. Это контролируется переменной окружения
OLLAMA_NUM_PARALLEL, которая устанавливает максимальное количество параллельных запросов, которые каждая модель может обрабатывать одновременно. По умолчанию это значение установлено в 4 (или 1, в зависимости от доступности памяти), но его можно отрегулировать. -
Объединение в батчи (Batching): Когда несколько запросов к одной и той же модели поступают одновременно, Ollama объединяет их в батч и обрабатывает вместе. Это означает, что оба запроса обрабатываются параллельно, и пользователи будут видеть поток ответов одновременно. Сервер не намеренно ждет заполнения батча; обработка начинается сразу, как только запросы становятся доступными.
Очередь и лимиты
-
Очередь: Если количество конкурентных запросов превышает настроенную параллельность (например, больше запросов к модели, чем позволяет
OLLAMA_NUM_PARALLEL), дополнительные запросы помещаются в очередь. Очередь работает по принципу «первый пришел — первый обслужен» (FIFO). -
Лимиты очереди: Максимальное количество запросов в очереди контролируется переменной
OLLAMA_MAX_QUEUE(по умолчанию: 512). Если очередь заполнена, новые запросы получают ошибку 503, указывающую на перегрузку сервера. -
Загрузка моделей: Количество различных моделей, которые могут быть загружены одновременно, контролируется переменной
OLLAMA_MAX_LOADED_MODELS. Если для запроса требуется загрузка новой модели, а памяти недостаточно, Ollama разгрузит бездействующие модели, чтобы освободить место, и запрос будет помещен в очередь до тех пор, пока модель не будет загружена.
Пример сценария
Если два запроса к одной модели поступают одновременно, а параллельность сервера установлена не менее 2, оба запроса будут обработаны вместе в батче, и оба пользователя получат ответы параллельно. Если параллельность установлена в 1, один запрос будет обработан немедленно, а второй будет ждать в очереди до завершения первого.
Если запросы относятся к разным моделям, и памяти достаточно, обе модели могут быть загружены, и запросы обработаны параллельно. Если памяти не хватает, может потребоваться разгрузить одну из моделей, и запрос будет помещен в очередь.
Сводная таблица
| Сценарий | Результат |
|---|---|
| Два запроса, одна модель, достаточная параллельность | Оба обработаны вместе параллельно (в батче) |
| Два запроса, одна модель, параллельность=1 | Один обработан, второй в очереди до завершения первого |
| Два запроса, разные модели, достаточно памяти | Обе модели загружены, запросы обработаны параллельно |
| Два запроса, разные модели, недостаточно памяти | Один в очереди до освобождения памяти или разгрузки модели |
Подводя итог, Ollama спроектирован так, чтобы эффективно обрабатывать несколько одновременных запросов, при условии, что сервер настроен для конкурентности и имеет достаточные ресурсы. В противном случае запросы помещаются в очередь и обрабатываются по порядку.
Если повышение OLLAMA_NUM_PARALLEL больше не позволяет держать задержку стабильной, а очередь продолжает расти при реальной нагрузке, это один из более явных сигналов, который стоит взвесить при переходе на специализированный движок сервинга. С Ollama на vLLM: когда мигрировать ваш локальный LLM-сервер разбирает это решение, включая непрерывное батчинг (continuous batching) и PagedAttention как механизмы, которые vLLM использует, чтобы предотвратить деградацию производительности при конкурентных запросах.
Обработка недостатка памяти
Когда Ollama сталкивается с недостатком памяти для обработки входящих запросов, он использует комбинацию механизмов очередей и стратегий управления ресурсами для поддержания стабильности:
Очередь запросов
- Новые запросы помещаются в FIFO (First-In, First-Out) очередь, если память не может быть выделена немедленно.
- Размер очереди контролируется переменной OLLAMA_MAX_QUEUE (по умолчанию: 512 запросов).
- Если очередь достигает предела, новые запросы получают ошибки 503 «Сервер перегружен».
Управление моделями
- Активные модели могут быть выгружены из памяти, когда они становятся неактивными, чтобы освободить ресурсы для запросов в очереди.
- Количество одновременно загруженных моделей ограничено переменной OLLAMA_MAX_LOADED_MODELS (по умолчанию: 3 × количество GPU или 3 для CPU).
Оптимизация памяти
- Попытки обрабатывать запросы для одной модели в батче для максимизации эффективности использования памяти.
- Для GPU-инференса требуется полное выделение VRAM на модель — частичная загрузка не поддерживается.
Сценарии сбоев
Критическое исчерпание памяти: Когда даже запросы из очереди превышают доступные ресурсы, Ollama может:
- Перемещать данные на диск (что резко снижает производительность)
- Возвращать ошибки «недостаточно памяти»
- Завершать работу экземпляра модели в крайних случаях
| Параметр настройки | Назначение | Значение по умолчанию |
|---|---|---|
| OLLAMA_MAX_QUEUE | Максимальное количество запросов в очереди | 512 |
| OLLAMA_NUM_PARALLEL | Параллельные запросы на загруженную модель | 4 (или 1 при ограничении) |
| OLLAMA_MAX_LOADED_MODELS | Максимальное количество одновременно загруженных моделей | 3 × количество GPU или 3 |
Администраторам следует отслеживать использование памяти и настраивать эти параметры в соответствии с возможностями их аппаратного обеспечения. Обработка недостатка памяти становится критически важной при запуске более крупных моделей (7B+ параметров) или обработке нескольких конкурентных запросов.
Стратегии оптимизации Ollama
Включите ускорение на GPU с помощью export OLLAMA_CUDA=1 и настройте потоки CPU через export OLLAMA_NUM_THREADS=84.
Улучшение аппаратного обеспечения
- ОЗУ: 32 ГБ+ для моделей 13B, 64 ГБ+ для моделей 70B
- Накопитель: NVMe SSD для более быстрого загрузки/переключения моделей
- GPU: NVIDIA RTX 3080/4090 с VRAM 16 ГБ+ для более крупных моделей
Операционные стратегии
- Батчинг запросов: Обрабатывайте несколько запросов одновременно, чтобы амортизировать накладные расходы на память
- Автоматическая разгрузка моделей: Позволяет Ollama удалять неактивные модели из памяти
- Кеширование часто используемых моделей: Держите обычные модели в памяти постоянно
Мониторинг и устранение неполадок
- Используйте
nvidia-smi(для GPU) иhtop(для CPU/ОЗУ) для выявления узких мест - При ошибках памяти:
- Перейдите на квантованные модели
- Уменьшите количество конкурентных запросов
- Увеличьте размер swap-пространства
Пример рабочего процесса оптимизации:
### Используйте квантованную модель с ускорением на GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
### Ограничьте количество загруженных моделей и параллельных запросов
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
Эти корректировки могут снизить использование памяти на 30–60%, сохраняя качество ответов, что особенно полезно при запуске нескольких моделей или обработке большого объема запросов.
Переменная окружения OLLAMA_NUM_PARALLEL
OLLAMA_NUM_PARALLEL контролирует, сколько запросов Ollama будет выполнять параллельно. Если вы отправляете несколько запросов на один и тот же сервер Ollama, этот параметр во многом определяет, выполняются ли они одновременно или встают в очередь.
- Более высокие значения могут увеличить пропускную способность если у вас достаточно CPU/GPU/VRAM, но могут увеличить задержку и нагрузку на память.
- Более низкие значения снижают конкуренцию за ресурсы и могут улучшить стабильность, но запросы будут чаще попадать в очередь.
Память, в частности, масштабируется по формуле OLLAMA_NUM_PARALLEL * OLLAMA_CONTEXT_LENGTH: четыре параллельных слота при контексте 32K резервируют KV-кэш так, будто загружена одна последовательность 128K, даже до того, как какой-либо запрос начался. На карте на 16 ГБ этот расчет бюджета обычно важнее, чем поведение очереди — см. KV Cache на GPU с 16 ГБ для полного бюджета VRAM и почему OLLAMA_NUM_PARALLEL=1 обычно является правильным стартовым пунктом для одной сессии с длинным контекстом.
Как установить OLLAMA_NUM_PARALLEL
Linux / macOS (сервис systemd или shell):
export OLLAMA_NUM_PARALLEL=2
ollama serve
Одноразовый запуск (префикс только для этой команды):
OLLAMA_NUM_PARALLEL=2 ollama serve
Docker (пример):
docker run --rm -e OLLAMA_NUM_PARALLEL=2 -p 11434:11434 ollama/ollama
Как выбрать значение
Начните с 1–2 для одного GPU / ограниченного VRAM, затем постепенно увеличивайте, наблюдая за:
- Использованием VRAM GPU (OOM / выгрузки)
- Использованием CPU и средней нагрузкой
- p95 задержкой ваших типичных запросов
- Частотой ошибок / таймаутов
Если вы оптимизируете конкретную страницу для использования CLI, смотрите раздел Ollama CLI в шпаргалке, а также примеры команд для
ollama serve,ollama psиollama run.
Быстрые рецепты настройки
Приоритет стабильности
OLLAMA_NUM_PARALLEL=1- Используйте меньшие / квантованные модели
- Предпочитайте меньшие размеры контекста
Приоритет пропускной способности
OLLAMA_NUM_PARALLEL=2(или выше, если есть запас)- Рассмотрите батчинг запросов на уровне клиента
- Убедитесь, что достаточно VRAM и потоков CPU
«У меня заканчивается VRAM, когда приходят два запроса»
- Уменьшите
OLLAMA_NUM_PARALLEL - Используйте более агрессивно квантованную модель
- Уменьшите длину контекста / максимальное количество токенов
Устранение неполадок
Признаки, что OLLAMA_NUM_PARALLEL слишком высокий
- Запросы периодически падают под нагрузкой
- Часто происходят GPU OOM / разгрузки моделей
- Скачки задержки при поступлении второго запроса
Признаки, что OLLAMA_NUM_PARALLEL слишком низкий
- CPU/GPU недоиспользуется
- Задержки в очереди доминируют над общим временем ответа
Совет: Если вы также управляете вашим клиентом, добавьте повторы (retries) с джиттером и поддерживайте соединения keep-alive. Многие проблемы «Ollama медленный» на самом деле являются следствием очереди + накладных расходов на соединение.
Ollama: Батчинг запросов vs Параллельное выполнение
Батчинг в Ollama относится к практике группировки нескольких входящих запросов вместе и обработки их как единого блока. Это позволяет более эффективно использовать вычислительные ресурсы, особенно при работе на аппаратном обеспечении, которое выигрывает от параллельных операций (таком как GPU).
Когда несколько запросов к одной модели поступают одновременно, Ollama может обработать их вместе в батче, если позволяет память. Это увеличивает пропускную способность и может снизить задержку для каждого запроса, так как модель может использовать оптимизированные матричные операции по всему батчу.
Батчинг особенно эффективен, когда запросы сходны по размеру и сложности, так как это позволяет лучше использовать аппаратное обеспечение.
Параллельное выполнение в Ollama означает обработку нескольких запросов одновременно, либо для одной модели, либо для разных моделей, в зависимости от доступной памяти и конфигурации.
Ollama поддерживает два уровня параллельности:
- Загрузка нескольких моделей: Если достаточно памяти, несколько моделей могут быть загружены и обслуживать запросы одновременно.
- Параллельные запросы на модель: Каждая загруженная модель может обрабатывать несколько запросов параллельно, это контролируется настройкой OLLAMA_NUM_PARALLEL (по умолчанию 1 или 4, в зависимости от памяти).
Когда запросы превышают лимит параллельности, они помещаются в очередь (FIFO) до размера OLLAMA_MAX_QUEUE.
Итог
Ollama использует как батчинг, так и параллельное выполнение для эффективной обработки нескольких запросов. Батчинг группирует запросы для одновременной обработки, а параллельное выполнение позволяет нескольким запросам (или моделям) работать конкурентно. Оба метода зависят от системной памяти и могут быть настроены для оптимальной производительности.
Для дополнительных бенчмарков, настройки конкурентности и рекомендаций по производительности, ознакомьтесь с нашим хабом: Производительность LLM: бенчмарки, узкие места и оптимизация.