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

Обработка конкурентных запросов
-
Параллельная обработка: Ollama поддерживает конкурентную обработку запросов. Если в системе достаточно доступной памяти (ОЗУ для 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 сталкивается с недостатком памяти для обработки входящих запросов, он использует комбинацию механизмов очередей и стратегий управления ресурсами для поддержания стабильности:
Очередь запросов
- Новые запросы помещаются в 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/ОЗУ) для выявления узких мест - При ошибках памяти:
- Перейдите на квантованные модели
- Уменьшите количество конкурентных запросов
- Увеличьте пространство подкачки
Пример рабочего процесса оптимизации:
### Используйте квантованную модель с ускорением 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
Linux / macOS (системная служба systemd или оболочка):
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 слишком высокий
- Запросы периодически завершаются с ошибкой под нагрузкой
- Частая ошибка OOM GPU / выгрузка модели
- Скачки задержки при поступлении второго запроса
Симптомы того, что OLLAMA_NUM_PARALLEL слишком низкий
- CPU/GPU используются не полностью
- Задержки из-за очередей доминируют в общем времени ответа
Совет: Если вы также контролируете свой клиент, добавьте повторные попытки с джиттером (jitter) и поддерживайте постоянные соединения. Многие проблемы “Ollama работает медленно” на самом деле связаны с очередями и накладными расходами на соединения.
Ollama: Пакетная обработка запросов против параллельного выполнения
Пакетная обработка (Batching) в Ollama относится к практике группировки нескольких входящих запросов вместе и обработки их как единого целого. Это позволяет более эффективно использовать вычислительные ресурсы, особенно при работе на оборудовании, которое выигрывает от параллелизованных операций (таком как GPU).
Когда несколько запросов к одной и той же модели поступают одновременно, Ollama может обрабатывать их вместе в пакете, если позволяет память. Это увеличивает пропускную способность и может снизить задержку для каждого запроса, поскольку модель может использовать оптимизированные матричные операции над пакетом.
Пакетная обработка особенно эффективна, когда запросы схожи по размеру и сложности, так как это позволяет лучше использовать оборудование.
Параллельное выполнение в Ollama означает обработку нескольких запросов одновременно, либо для одной модели, либо для разных моделей, в зависимости от доступной памяти и конфигурации.
Ollama поддерживает два уровня параллелизма:
- Загрузка нескольких моделей: Если памяти достаточно, несколько моделей могут быть загружены и обслуживать запросы одновременно.
- Параллельные запросы на модель: Каждая загруженная модель может обрабатывать несколько запросов параллельно, что контролируется настройкой OLLAMA_NUM_PARALLEL (по умолчанию 1 или 4, в зависимости от памяти).
Когда запросы превышают лимит параллелизма, они ставятся в очередь (FIFO) до OLLAMA_MAX_QUEUE.
Вывод
Ollama использует как пакетную обработку, так и параллельное выполнение для эффективной обработки нескольких запросов. Пакетная обработка группирует запросы для одновременной обработки, а параллельное выполнение позволяет нескольким запросам (или моделям) выполняться конкурентно. Оба метода зависят от памяти системы и могут быть настроены для оптимальной производительности.
Для получения дополнительных бенчмарков, настройки конкурентности и рекомендаций по производительности, посетите наш хаб Производительность LLM: Бенчмарки, узкие места и оптимизация.