Causa: Driver NVIDIA não instalado na VM.
Solução:
sudo apt update
sudo apt install -y nvidia-driver-535
sudo reboot
nvidia-smiCausa: GPU não atribuída à VM via DDA, ou DDA não configurado corretamente.
Solução:
- No host Windows, verificar se a GPU está atribuída:
Get-VMAssignableDevice -VMName "Ubuntu-GPU"- Se vazio, reatribuir (VM deve estar desligada):
Stop-VM -Name "Ubuntu-GPU" -Force
Add-VMAssignableDevice -VMName "Ubuntu-GPU" -LocationPath $locationPath
Start-VM -Name "Ubuntu-GPU"- Verificar se Secure Boot está desabilitado na VM (obrigatório para DDA).
Causa: Modelo muito grande para a VRAM disponível, ou contexto muito longo.
Sintomas:
Error: CUDA out of memory. Tried to allocate X MiB
Solução:
# Verificar uso atual de VRAM
nvidia-smi
# Descarregar modelo atual
curl http://localhost:11434/api/generate -d '{"model": "qwen2.5:7b-instruct", "keep_alive": 0}'
# Usar modelo menor
docker exec ollama ollama pull qwen2.5:7b-instruct # 5 GB vs 9 GB do 14B
# Ou limitar contexto
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:14b",
"prompt": "...",
"options": {"num_ctx": 4096}
}'Causa: Modelo carregado na VRAM mas sem requisições ativas. Isso é normal — a GPU só é utilizada durante a geração.
Verificação:
# Enviar uma requisição e observar GPU-Util subir
watch -n 1 nvidia-smi
# Em outro terminal:
curl http://localhost:11434/api/generate -d '{"model": "qwen2.5:7b-instruct", "prompt": "Conte até 100", "stream": false}'Causa: NVIDIA Container Toolkit não instalado ou Docker não reiniciado.
Solução:
# Instalar toolkit
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# Testar
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smiCausa: GPU não acessível, ou VRAM insuficiente para carregar.
Diagnóstico:
docker logs ollama --tail=50Soluções comuns:
- Verificar se
--gpus allestá no docker run ou no docker-compose - Verificar se NVIDIA Container Toolkit está configurado
- Verificar se outro processo está usando a GPU
Causa: Usuário não tem permissão ou cgroups não configurados.
Solução:
# Verificar grupos
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# Se persistir, rodar container como root
docker run --rm --gpus all --user root nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smiCausa: Ollama não está rodando ou está em outra porta.
Diagnóstico:
# Verificar se container está rodando
docker ps | grep ollama
# Verificar logs
docker logs ollama --tail=20
# Verificar porta
docker port ollama
# Deve mostrar: 11434/tcp -> 0.0.0.0:11434Solução:
# Reiniciar
docker restart ollama
# Se não resolver, recriar
docker rm -f ollama
docker run -d --gpus all \
-v ollama-data:/root/.ollama \
-p 11434:11434 \
--name ollama \
--restart unless-stopped \
ollama/ollamaCausa: Modelo não foi baixado ou nome incorreto.
Solução:
# Listar modelos disponíveis
docker exec ollama ollama list
# Baixar modelo (nome exato)
docker exec ollama ollama pull qwen2.5:7b-instruct
# Nomes comuns:
# qwen2.5:7b-instruct (NÃO qwen2.5-7b-instruct)
# qwen2.5-coder:7b (NÃO qwen2.5:coder-7b)
# qwen3:14b (NÃO qwen3-14b)Causa: Modelo rodando em CPU em vez de GPU.
Diagnóstico:
# Verificar se GPU está sendo usada durante geração
nvidia-smi # GPU-Util deve subir durante geração
# Verificar logs do Ollama
docker logs ollama 2>&1 | grep -i "gpu\|cuda\|cpu"Solução:
# Garantir que container tem acesso à GPU
docker rm -f ollama
docker run -d --gpus all \
-v ollama-data:/root/.ollama \
-p 11434:11434 \
--name ollama \
--restart unless-stopped \
ollama/ollama
# Verificar
docker exec ollama nvidia-smiCausa: KV cache excedeu a VRAM disponível.
Solução:
# Limitar contexto
curl http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b-instruct",
"prompt": "...",
"options": {"num_ctx": 4096}
}'
# Ou reiniciar Ollama para limpar memória
docker restart ollamaCausa: Slot PCIe não suporta DDA (sem ACS ou FLR).
Solução:
- Mover GPU para outro slot PCIe (preferencialmente x16 mais próximo do CPU)
- Verificar BIOS: habilitar IOMMU/VT-d/AMD-Vi
- Verificar BIOS: habilitar ACS (Access Control Services) se disponível
- Atualizar firmware da placa-mãe
Causa: GPU está em slot PCIe que compartilha bridge com outros dispositivos.
Solução: Mover GPU para slot direto no root complex (sem bridge intermediário). Geralmente é o slot x16 primário.
Causa: Configuração de MMIO insuficiente.
Solução:
Stop-VM -Name "Ubuntu-GPU" -Force
Set-VM -Name "Ubuntu-GPU" -LowMemoryMappedIoSpace 3Gb
Set-VM -Name "Ubuntu-GPU" -HighMemoryMappedIoSpace 33280Mb
Start-VM -Name "Ubuntu-GPU"Causa: DDA não persiste automaticamente em alguns cenários.
Solução: Criar script de startup no host:
# Salvar como C:\Scripts\reassign-gpu.ps1
$vmName = "Ubuntu-GPU"
$locationPath = "PCIROOT(0)#PCI(0100)#PCI(0000)"
if ((Get-VM -Name $vmName).State -eq "Off") {
Add-VMAssignableDevice -VMName $vmName -LocationPath $locationPath -ErrorAction SilentlyContinue
Start-VM -Name $vmName
}Causa: URL incorreta ou rede Docker não compartilhada.
Diagnóstico:
# Testar de dentro do container app
docker exec debuga-app curl -s http://ollama:11434
# Deve retornar: "Ollama is running"Se falhar:
# Verificar se estão na mesma rede
docker network inspect projeto-teste_default | grep -A5 "ollama\|app"
# Verificar nome do serviço no docker-compose
grep "ollama" docker/docker-compose.ymlCausa: Variável não chegou ao container (rebuild necessário).
Solução:
# Verificar variável dentro do container
docker exec debuga-app env | grep LOCAL_INFERENCE
# Se não aparecer, rebuild
docker compose -f docker/docker-compose.yml up -d --build appCausa: Modelo muito grande, contexto muito longo, ou primeira requisição (cold start).
Solução:
# Pré-carregar modelo (warm up)
docker exec debuga-ollama curl -s http://localhost:11434/api/generate -d '{
"model": "qwen2.5:7b-instruct",
"prompt": "Olá",
"keep_alive": -1
}'
# Aumentar timeout no backend (se configurável)
# Ou usar modelo menor para respostas mais rápidasCausa: Fragmentação de memória GPU após múltiplos load/unload.
Solução:
# Reiniciar Ollama para limpar VRAM
docker restart ollama
# Verificar VRAM limpa
nvidia-smi
# Memory-Usage deve mostrar ~0 MiBCausa: Ventilação insuficiente ou carga contínua prolongada.
Monitoramento:
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader -l 5Solução:
- Verificar ventilação do servidor/rack
- Limitar concorrência (uma requisição por vez)
- Usar modelo menor (menos carga na GPU)
- Configurar power limit:
sudo nvidia-smi -pl 300 # Limitar a 300W (padrão 350W na 3090)#!/bin/bash
echo "=== Diagnóstico Rápido ==="
echo -n "1. nvidia-smi: "
nvidia-smi --query-gpu=name,memory.used,memory.total --format=csv,noheader 2>/dev/null || echo "FALHOU"
echo -n "2. Docker: "
docker --version 2>/dev/null || echo "FALHOU"
echo -n "3. NVIDIA Toolkit: "
nvidia-ctk --version 2>/dev/null || echo "FALHOU"
echo -n "4. Container Ollama: "
docker ps --filter name=ollama --format "{{.Status}}" 2>/dev/null || echo "FALHOU"
echo -n "5. Ollama API: "
curl -s http://localhost:11434 2>/dev/null || echo "FALHOU"
echo -n "6. Modelos: "
curl -s http://localhost:11434/api/tags 2>/dev/null | jq -r '.models[].name' 2>/dev/null || echo "NENHUM"
echo -n "7. GPU no container: "
docker exec ollama nvidia-smi --query-gpu=name --format=csv,noheader 2>/dev/null || echo "FALHOU"
echo "=== Fim ==="| Sintoma | Causa provável | Solução |
|---|---|---|
| Respostas lentas com modelo 7B | GPU saturada por concorrência | Limitar requisições simultâneas |
| OOM frequente com 14B | VRAM insuficiente para contexto | Limitar num_ctx ou usar 7B |
| Latência alta (>5s TTFT) | Cold start (modelo descarregado) | keep_alive=-1 |
| Qualidade insuficiente | Modelo pequeno demais | Upgrade para 14B ou 30B-a3b |
| Múltiplos usuários simultâneos | Single-GPU não escala | Adicionar segunda GPU ou usar vLLM |
- Ollama GitHub Issues — problemas conhecidos e workarounds
- NVIDIA Container Toolkit Docs — documentação oficial
- Hyper-V DDA Guide — guia Microsoft oficial