TL;DR
Rode ollama ps com um modelo carregado: a coluna PROCESSOR te conta a verdade. 100% GPU significa que a GPU está bem e você pode parar de ler. Um split tipo 40%/60% CPU/GPU significa que o modelo não coube na VRAM — use um quant menor. 100% CPU significa que o Ollama não achou GPU utilizável: geralmente um driver desatualizado, ausência num grupo (AMD no Linux), um OLLAMA_LLM_LIBRARY fixado ou um contêiner subido sem acesso à GPU. Conserte a causa que o log nomear; são umas cinco no total.
Como verificar se o Ollama está mesmo usando a GPU?
Dois comandos, zero achismo.
# Em um terminal: carregue um modelo
ollama run llama3.2 "hello"
# Em outro: veja onde ele roda
ollama ps NAME ID SIZE PROCESSOR UNTIL
llama3.2:latest a80c4de17cd9 3.3 GB 100% GPU 4 minutes from now A coluna PROCESSOR tem três estados:
100% GPU— todas as camadas offloaded. Pronto.48%/52% CPU/GPU— offload parcial. A GPU está trabalhando, mas o modelo mais o contexto não couberam na VRAM. Veja a seção de VRAM abaixo.100% CPU— a inferência está no CPU. Ou a GPU não foi detectada, ou foi desativada de propósito.
Depois leia o log do servidor, que nomeia o hardware que o Ollama realmente encontrou na inicialização:
journalctl -u ollama --no-pager | grep -i "inference compute" Numa máquina NVIDIA saudável você quer uma linha assim:
inference compute id=GPU-xxxx library=CUDA compute=8.9 driver=12.4 name=NVIDIA GeForce RTX 4070 Nenhuma linha, ou uma que termina com mensagem de fallback CPU-only, e você achou o problema. O resto do post são as cinco causas, da mais provável para a menos.
Por que o Ollama diz “no compatible GPU discovered”?
Na NVIDIA, o culpado de sempre é o driver, não o CUDA. O Ollama traz as próprias bibliotecas de runtime CUDA, então você não precisa do CUDA toolkit instalado — mas o runtime embutido precisa de um driver novo o bastante para falar com ele. O nvidia-smi funcionar não é prova; ele só prova que existe um driver, não que é recente o suficiente.
nvidia-smi --query-gpu=driver_version --format=csv,noheader Se a versão tem anos de idade, atualize e reinicie:
# Família Debian/Ubuntu
sudo apt install nvidia-driver-570
# Família Arch
sudo pacman -S nvidia Depois de atualizar o driver, reinicie o serviço do Ollama para que ele detecte os dispositivos de novo — a detecção acontece uma vez, na inicialização, não por requisição:
sudo systemctl restart ollama Se o log agora imprime sua GPU com library=CUDA, acabou. Se ele ainda recusa, confira se o OLLAMA_LLM_LIBRARY não está definido em algum lugar — veja a seção “depois de uma atualização”.
Por que o Ollama usa a GPU para só parte do modelo?
Offload parcial é aritmética, não bug: os pesos do modelo mais o KV cache da sua janela de contexto precisam caber na VRAM. Um modelo 7B em Q4 tem uns 4–5 GB; dê um contexto de 8K e o cache adiciona mais. Numa placa de 8 GB algo tem que ficar no CPU, e o ollama ps mostra o split.
Três jeitos de fechar a diferença, do mais barato para o mais caro:
- Quant menor. Descer de Q8 para Q4 corta o tamanho dos pesos pela metade com custo modesto de qualidade. Os trade-offs estão em níveis de quantização GGUF explicados.
- Contexto mais curto. O
num_ctxdomina o tamanho do cache. 32K de contexto numa placa de 8 GB significa a maioria das camadas no CPU. - Menos camadas na GPU. A opção
num_gpulimita quantas camadas recebem offload. Deixá-la abaixo do total de camadas garante um split — se alguém definiu isso num Modelfile ou chamada de API, remova.
Note a armadilha contrária também: uma GPU que mostra 100% GPU mas roda mais devagar que o esperado pode estar fazendo swap na RAM do sistema. Compare o SIZE do ollama ps com a sua VRAM real.
Por que o Ollama não usa a minha GPU AMD?
AMD no Linux precisa de três coisas, e as três são verificáveis:
1. Suporte a ROCm no build. O script oficial de instalação no Linux vem com um build ROCm. Confirme o que o servidor detectou:
journalctl -u ollama --no-pager | grep -iE "rocm|inference compute" 2. Presença nos grupos. O runtime ROCm precisa de acesso a /dev/kfd e /dev/dri, o que significa os grupos render e video:
sudo usermod -aG render,video $USER
# saia e entre de novo, depois:
sudo systemctl restart ollama Esse grupo faltando, sozinho, é o post “Ollama not using GPU on Ubuntu” mais comum de todo fórum, e ele sobrevive a reinstalações de driver porque o driver nunca foi o problema.
3. Uma GPU suportada — ou um override. Placas RDNA2 consumer não suportadas (gfx1031, gfx1032) falham na detecção mesmo com a pilha ROCm funcionando. O workaround padrão é alegar um alvo compatível:
sudo systemctl edit ollama [Service]
Environment="HSA_OVERRIDE_GFX_VERSION=10.3.0" Depois sudo systemctl restart ollama. Este é um override não suportado mas amplamente usado; se se comportar mal, remova e você volta ao território de suporte oficial. Se você prefere controle total sobre os backends a brigar com a autodetecção, essa é a diferença central coberta em llama.cpp vs Ollama.
No Windows, o suporte a AMD é mais estreito — confira a lista de GPUs suportadas do Ollama para a sua placa antes de assumir que a instalação está quebrada.
Por que o Ollama parou de usar a GPU depois de uma atualização?
Atualizações mudam uma de três coisas, nesta ordem de probabilidade:
- Uma biblioteca de backend fixada. O
OLLAMA_LLM_LIBRARYforça um runner específico (cuda_v11,rocmou atécpu). Ele existe para debugging, sobrescreve a autodetecção em silêncio e persiste em perfis de shell e arquivos de serviço muito depois do motivo ter sido esquecido. Encontre e remova:
systemctl show ollama --property=Environment | grep -i llm_library
env | grep OLLAMA - O driver ficou para trás do runtime. Upgrades do Ollama trazem um runtime CUDA mais novo; o seu driver não se mexe até você mexer. Mesmo conserto da seção de driver acima.
- O serviço é um contêiner e os flags se perderam. Um contêiner recriado sem os flags de GPU é um contêiner CPU-only. A invocação NVIDIA é:
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama Para contêineres AMD, o equivalente é passthrough de dispositivos mais adição de grupos:
docker run -d --device=/dev/kfd --device=/dev/dri
--group-add video --group-add render
-v ollama:/root/.ollama -p 11434:11434 ollama/ollama Sem --gpus=all, sem GPU — o Docker não tem motivo para ser generoso.
O Ollama funciona no WSL2?
Funciona, com o driver certo no lugar certo: instale o driver NVIDIA do Windows, nunca um driver Linux dentro da distro — um driver dentro do WSL quebra o passthrough de CUDA em vez de consertar. Depois atualize o próprio WSL e confirme que o dispositivo de passthrough existe:
wsl --update # a partir do PowerShell
ls /dev/dxg # dentro do WSL — precisa existir para usar a GPU Com o /dev/dxg presente e um driver do Windows atual, o Ollama no WSL2 faz offload para a GPU como uma instalação nativa. Se você prefere pular a indireção por completo, o build Windows do Ollama roda nativo e vê a GPU sem WSL.
O Ollama precisa de GPU mesmo?
Não — rodar só no CPU é funcionalmente idêntico, só mais lento, e para modelos pequenos num CPU rápido pode ser perfeitamente utilizável. No Apple Silicon a pergunta se dissolve: o Metal usa memória unificada automaticamente, e o único limite é quanta RAM você está disposto a dividir com o modelo.
O checklist de cinco minutos
| Sintoma | Causa provável | Correção |
|---|---|---|
100% CPU no ollama ps, placa NVIDIA presente | Driver velho demais para o CUDA embutido | Atualize o driver, reinicie, reinicie o serviço |
100% CPU, AMD no Linux | Faltam os grupos render/video | usermod -aG render,video, login de novo |
100% CPU, placa AMD não suportada | O ROCm rejeita o alvo gfx | HSA_OVERRIDE_GFX_VERSION=10.3.0 |
Split 40%/60% CPU/GPU | Modelo + contexto passam da VRAM | Quant menor ou num_ctx mais curto |
| GPU ontem, CPU hoje | OLLAMA_LLM_LIBRARY fixado ou driver velho | Ache e remova a env var; atualize o driver |
| GPU em execução nativa, CPU no Docker | Contêiner subido sem flags de GPU | Recrie com --gpus=all (ou dispositivos AMD) |
Cheque nesta ordem: ollama ps para o estado, logs do servidor para a lista de detecção, depois a tabela. Nove vezes em dez a linha de log já te disse em qual fileira você está.
— mrsaynothing
Get the next one by email
One email per post. No spam, no algorithms.
what is this?Git revert vs reset: qual salva o seu histórico?
Gostou dos artigos? É assim que eu construo profissionalmente. me contrate