Como o Ollama lida com solicitações paralelas
Configurando ollama para execução de solicitações em paralelo.
Quando o servidor Ollama recebe duas solicitações ao mesmo tempo, seu comportamento depende da sua configuração e dos recursos do sistema disponíveis.
Tratamento de Solicitações Concorrentes
-
Processamento Paralelo: Ollama suporta o processamento concorrente de solicitações. Se o sistema tiver memória suficiente disponível (RAM para inferência de CPU, VRAM para inferência de GPU), vários modelos podem ser carregados ao mesmo tempo, e cada modelo carregado pode processar várias solicitações em paralelo. Isso é controlado pela variável de ambiente
OLLAMA_NUM_PARALLEL
, que define o número máximo de solicitações paralelas que cada modelo pode processar simultaneamente. Por padrão, esse valor é definido como 4 (ou 1, dependendo da disponibilidade de memória), mas pode ser ajustado. -
Agrupamento: Quando várias solicitações para o mesmo modelo chegam simultaneamente, o Ollama as agrupa e as processa juntas. Isso significa que ambas as solicitações são processadas em paralelo, e os usuários verão as respostas sendo enviadas de volta ao mesmo tempo. O servidor não espera intencionalmente para preencher um lote; o processamento começa assim que as solicitações estiverem disponíveis.
Filas e Limites
-
Fila: Se o número de solicitações concorrentes exceder a paralelismo configurado (por exemplo, mais de
OLLAMA_NUM_PARALLEL
solicitações para um modelo), solicitações adicionais são colocadas em fila. A fila opera em ordem de chegada (FIFO - First In, First Out). -
Limites da Fila: O número máximo de solicitações em fila é controlado por
OLLAMA_MAX_QUEUE
(padrão: 512). Se a fila estiver cheia, novas solicitações receberão um erro 503 indicando que o servidor está sobrecarregado. -
Carregamento de Modelos: O número de modelos diferentes que podem ser carregados ao mesmo tempo é controlado por
OLLAMA_MAX_LOADED_MODELS
. Se uma solicitação exigir o carregamento de um novo modelo e a memória estiver insuficiente, o Ollama descarregará modelos ociosos para liberar espaço, e a solicitação será colocada em fila até que o modelo seja carregado.
Exemplo de Cenário
Se duas solicitações para o mesmo modelo chegarem ao mesmo tempo e o paralelismo do servidor estiver configurado para pelo menos 2, ambas as solicitações serão processadas juntas em um lote, e ambos os usuários receberão respostas simultaneamente. Se o paralelismo estiver configurado para 1, uma solicitação será processada imediatamente, e a outra será colocada em fila até que a primeira termine.
Se as solicitações forem para modelos diferentes e houver memória suficiente, ambos os modelos podem ser carregados e as solicitações processadas em paralelo. Se não houver, um modelo pode precisar ser descarregado, e a solicitação será colocada em fila.
Tabela de Resumo
Cenário | Resultado |
---|---|
Duas solicitações, mesmo modelo, paralelismo suficiente | Ambas processadas juntas em paralelo (agrupadas) |
Duas solicitações, mesmo modelo, paralelismo=1 | Uma processada, segunda em fila até que a primeira termine |
Duas solicitações, modelos diferentes, memória suficiente | Ambos modelos carregados, solicitações processadas em paralelo |
Duas solicitações, modelos diferentes, memória insuficiente | Uma em fila até que a memória esteja disponível ou um modelo seja descarregado |
Em resumo, o Ollama foi projetado para lidar com múltiplas solicitações simultâneas de forma eficiente, desde que o servidor esteja configurado para concorrência e tenha recursos suficientes. Caso contrário, as solicitações são colocadas em fila e processadas em ordem.
Tratamento de Insuficiência de Memória
Quando o Ollama encontra memória insuficiente para lidar com solicitações entrantes, ele emprega uma combinação de mecanismos de fila e estratégias de gerenciamento de recursos para manter a estabilidade:
Filas de Solicitações
- Novas solicitações são colocadas em uma fila FIFO (Primeiro a Entrar, Primeiro a Sair) quando a memória não pode ser alocada imediatamente.
- O tamanho da fila é controlado por
OLLAMA_MAX_QUEUE
(padrão: 512 solicitações). - Se a fila atingir a capacidade, novas solicitações receberão erros 503 “Servidor Sobrecarregado”.
Gerenciamento de Modelos
- Modelos ativos podem ser descarregados da memória quando ficarem ociosos para liberar recursos para solicitações em fila.
- O número de modelos carregados simultaneamente é limitado por
OLLAMA_MAX_LOADED_MODELS
(padrão: 3×contagem de GPU ou 3 para CPU).
Otimização de Memória
- Tentativas de processar solicitações agrupadas para o mesmo modelo para maximizar a eficiência da memória.
- Para inferência em GPU, é necessária a alocação completa de VRAM por modelo - carregamentos parciais não são suportados.
Cenários de Falha
Exaustão Crítica de Memória: Quando até as solicitações em fila excederem os recursos disponíveis, o Ollama pode:
- Páginas para disco (severamente prejudicando o desempenho)
- Retornar erros “fora de memória”
- Em casos extremos, crashar a instância do modelo
Configuração de Controle | Propósito | Valor Padrão |
---|---|---|
OLLAMA_MAX_QUEUE | Número máximo de solicitações em fila | 512 |
OLLAMA_NUM_PARALLEL | Solicitações paralelas por modelo carregado | 4 (ou 1 se limitado) |
OLLAMA_MAX_LOADED_MODELS | Número máximo de modelos carregados simultaneamente | 3×contagem de GPU ou 3 |
Administradores devem monitorar o uso de memória e ajustar esses parâmetros com base nas capacidades do hardware. O tratamento de insuficiência de memória se torna crucial ao executar modelos maiores (7B+ parâmetros) ou processar várias solicitações concorrentes.
Estratégias de Otimização do Ollama
Ative a aceleração por GPU com export OLLAMA_CUDA=1
e defina threads da CPU com export OLLAMA_NUM_THREADS=84
.
Melhorias de Hardware
- RAM: 32GB+ para modelos de 13B, 64GB+ para modelos de 70B
- Armazenamento: SSD NVMe para carregamento/swap mais rápido de modelos
- GPU: NVIDIA RTX 3080/4090 com 16GB+ de VRAM para modelos maiores
Estratégias Operacionais
- Agrupar Solicitações: Processar várias consultas simultaneamente para amortizar o custo de memória
- Descarregar Automaticamente Modelos: Permitir que o Ollama remova modelos ociosos da memória
- Cache de Modelos Frequentemente Usados: Manter modelos comuns residentes na memória
Monitoramento e Solução de Problemas
- Use
nvidia-smi
(GPU) ehtop
(CPU/RAM) para identificar gargalos - Para erros de memória:
- Migre para modelos quantizados
- Reduza as solicitações concorrentes
- Aumente o espaço de troca
Exemplo de fluxo de otimização:
# Use um modelo quantizado com aceleração por GPU
export OLLAMA_CUDA=1
ollama run llama2:7b-q4_0 --context-size 2048
# Limite modelos carregados e solicitações paralelas
export OLLAMA_MAX_LOADED_MODELS=2
export OLLAMA_NUM_PARALLEL=4
Esses ajustes podem reduzir o uso de memória em 30-60% enquanto mantém a qualidade das respostas, especialmente benéfico ao executar múltiplos modelos ou lidar com volumes altos de solicitações.
Ollama: Agrupamento de Solicitações vs Execução Paralela
Agrupamento no Ollama refere-se à prática de agrupar várias solicitações entrantes e processá-las como uma unidade. Isso permite um uso mais eficiente dos recursos computacionais, especialmente quando executado em hardware que se beneficia de operações paralelizadas (como GPUs).
Quando várias solicitações para o mesmo modelo chegam simultaneamente, o Ollama pode processá-las juntas em um lote, se a memória permitir. Isso aumenta a taxa de processamento e pode reduzir a latência para cada solicitação, pois o modelo pode aproveitar operações matriciais otimizadas sobre o lote.
O agrupamento é particularmente eficaz quando as solicitações são semelhantes em tamanho e complexidade, pois isso permite um melhor uso do hardware.
Execução paralela no Ollama significa lidar com múltiplas solicitações ao mesmo tempo, seja para o mesmo modelo ou para modelos diferentes, dependendo da memória disponível e da configuração.
O Ollama suporta dois níveis de paralelismo:
- Carregamento de Múltiplos Modelos: Se houver memória suficiente disponível, vários modelos podem ser carregados e servir solicitações simultaneamente.
- Solicitações Paralelas por Modelo: Cada modelo carregado pode processar várias solicitações em paralelo, controlado pela configuração
OLLAMA_NUM_PARALLEL
(padrão é 1 ou 4, dependendo da memória).
Quando as solicitações excederem o limite de paralelismo, elas serão colocadas em fila (FIFO) até OLLAMA_MAX_QUEUE
.
Conclusão
O Ollama aproveita tanto o agrupamento quanto a execução paralela para processar múltiplas solicitações de forma eficiente. O agrupamento agrupa solicitações para processamento simultâneo, enquanto a execução paralela permite que múltiplas solicitações (ou modelos) sejam executadas simultaneamente. Ambas as abordagens dependem da memória do sistema e são configuráveis para um desempenho otimizado.
Links Úteis
- Dica rápida do Ollama
- Mover modelos do Ollama para um disco ou pasta diferente
- Como o Ollama usa o desempenho e núcleos eficientes da CPU Intel
- Espaço do Ollama
- Auto-hospedagem do Perplexica com Ollama
- Testando Deepseek-r1 no Ollama
- Como o Ollama lida com solicitações paralelas
- Testando Deepseek-r1 no Ollama
- Dica rápida do Python
- Espaço do Python
- Reclassificação de documentos de texto com Ollama e modelo de embedding Qwen3 - em Go