Voltar ao blog

Ollama não usa a GPU? Corrija no Linux, Windows e WSL

16 de setembro de 2026

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:

  1. 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.
  2. Contexto mais curto. O num_ctx domina o tamanho do cache. 32K de contexto numa placa de 8 GB significa a maioria das camadas no CPU.
  3. Menos camadas na GPU. A opção num_gpu limita 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:

  1. Uma biblioteca de backend fixada. O OLLAMA_LLM_LIBRARY força um runner específico (cuda_v11, rocm ou 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
  1. 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.
  2. 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

SintomaCausa provávelCorreção
100% CPU no ollama ps, placa NVIDIA presenteDriver velho demais para o CUDA embutidoAtualize o driver, reinicie, reinicie o serviço
100% CPU, AMD no LinuxFaltam os grupos render/videousermod -aG render,video, login de novo
100% CPU, placa AMD não suportadaO ROCm rejeita o alvo gfxHSA_OVERRIDE_GFX_VERSION=10.3.0
Split 40%/60% CPU/GPUModelo + contexto passam da VRAMQuant menor ou num_ctx mais curto
GPU ontem, CPU hojeOLLAMA_LLM_LIBRARY fixado ou driver velhoAche e remova a env var; atualize o driver
GPU em execução nativa, CPU no DockerContêiner subido sem flags de GPURecrie 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.

self-hosted · no third parties · one-click unsubscribe

what is this?

Git revert vs reset: qual salva o seu histórico?

Gostou dos artigos? É assim que eu construo profissionalmente. me contrate