Ollama no Proxmox: LXC, VM e GPU passthrough
Proxmox VE é o canivete suíço do homelab: um hipervisor livre, com baixo consumo de recursos, capaz de fazer contêineres leves e máquinas virtuais isoladas coexistirem em um único servidor. Executar Ollama no Proxmox permite compartilhar uma GPU cara entre vários serviços, mantendo a inferência 100% em casa. Este guia abrange as duas opções — LXC com GPU compartilhada (simples) e VM com passthrough completo (uma solução limpa) — com a configuração NVIDIA detalhada e as armadilhas do IOMMU que fazem você perder noites inteiras.
#Por que hospedar Ollama no Proxmox
Num homelab, raramente queremos um servidor dedicado apenas à IA. O Proxmox permite colocar Ollama ao lado de seus outros serviços (NAS, domótica, reverse proxy) na mesma máquina, mantendo cada carga isolada. O daemon Ollama então roda em um contêiner ou em uma VM, escuta na porta habitual e torna-se acessível a partir de toda a sua infraestrutura local — pelo Open WebUI em outro contêiner, por um pipeline n8n ou pelo seu computador de trabalho.
O desafio central é a GPU. A inferência de LLM sem aceleração de hardware é utilizável, mas lenta; quando se quer rodar modelos de 14B ou 32B a uma velocidade razoável, é preciso dar ao Ollama acesso a uma placa NVIDIA. Porém, virtualizar uma GPU não é trivial: o Proxmox oferece duas abordagens radicalmente diferentes, com compromissos opostos em termos de simplicidade e limpeza da implementação.
#LXC vs VM: qual escolher para o Ollama
Agentes que agem na sua máquina: Cline agêntico, MCP, n8n + Ollama, automações locais.
- Espaço online vitalício
- PDF + arquivos
- Atualizações vitalícias
Esta é a primeira decisão, e ela condiciona todo o resto. Um contêiner LXC compartilha o kernel do host: é leve, tem inicialização instantânea e, sobretudo, pode acessar a GPU do host sem tirar dele o acesso a ela. Uma VM, por sua vez, é uma máquina completa e isolada; para disponibilizar uma GPU a ela, é preciso dedicá-la inteiramente à VM via passthrough VFIO — o host perde então totalmente o acesso a essa placa.
- LXC + GPU compartilhada
- O caminho simples. O driver NVIDIA é instalado no host e no contêiner (com as mesmas versões), e os dispositivos /dev/nvidia* são montados no contêiner. A GPU continua podendo ser usada pelo host e por outros contêineres simultaneamente. Ideal se você quiser compartilhar uma única placa.
- VM + passthrough completo
- A solução mais limpa. A GPU é desvinculada do host e atribuída à VM via VFIO/IOMMU. Isolamento total, drivers gerenciados na VM como em bare-metal, sem interferência. Mas a GPU fica dedicada exclusivamente a essa VM enquanto ela estiver em execução.
- O critério decisivo
- Uma única placa para compartilhar entre vários serviços → LXC. Uma placa dedicada à IA (ou múltiplos GPUs) e necessidade de isolamento rigoroso → VM. O passthrough também é obrigatório se você quiser rodar um sistema operacional diferente (Windows, um sistema com drivers específicos).
#Requisitos de hardware e VRAM
Dimensione a GPU de acordo com os modelos desejados. Com quantização Q4_K_M (o melhor equilíbrio entre qualidade e memória), veja a seguir a quantidade de VRAM necessária por tamanho de modelo. Sempre reserve uma margem para o contexto.
- 3B (≈2 GB)
- RTX 3060 12GB é amplamente suficiente. É confortável mesmo em modo CPU-only para testes.
- 7B (≈5 GB)
- RTX 3060 12GB ou RTX 4070 12GB. O ponto de entrada ideal para um homelab.
- 14B (≈9 GB)
- RTX 4070 12 GB com pouca folga, RTX 4080 16 GB com folga confortável.
- 32B (≈19 GB)
- É necessária uma RTX 4090 de 24 GB, ou duas placas em tensor-split.
- 70B (≈40 GB)
- Multi-GPU (2× RTX 4090) ou Mac M4 Pro/Max com memória unificada de 48 GB+
Quanto à virtualização, o passthrough em VM exige pré-requisitos rigorosos que não se aplicam ao LXC: uma CPU e uma placa-mãe com suporte a VT-d (Intel) ou AMD-Vi (AMD), o IOMMU ativado no BIOS e, idealmente, um grupo IOMMU exclusivo para a GPU. O LXC não precisa de nada disso — basta que o driver NVIDIA seja instalado no host.
#LXC com GPU compartilhada, a via simples
O princípio: instalar o driver NVIDIA no host Proxmox, criar um contêiner LXC não privilegiado, montar nele os dispositivos da GPU e depois instalar o mesmo driver (sem o módulo do kernel) e o Ollama no contêiner. A versão do driver deve ser idêntica no host e no contêiner; caso contrário, o espaço de usuário do contêiner se recusa a se comunicar com o módulo do kernel do host.
- 01Instalar o driver NVIDIA no hostAdicione os cabeçalhos do kernel e depois instale o driver a partir do repositório da NVIDIA (ou do arquivo .run oficial). Verifique com nvidia-smi se a placa é detectada corretamente no host antes de prosseguir.
- 02Criar um contêiner LXC sem privilégiosUm template Debian 12 ou Ubuntu 24.04 é suficiente. Ative o aninhamento (nesting=1) para permitir a execução dos runtimes GPU. Anote o ID do contêiner (ex. 200).
- 03Identificar os dispositivos GPUNo host, liste os nós de dispositivo /dev/nvidia* e anote seus números major/minor. São esses nós de dispositivo que vamos expor ao contêiner.
- 04Montar os dispositivos na configuração LXCEdite /etc/pve/lxc/200.conf para permitir os cgroups dos dispositivos NVIDIA e montá-los via bind mount. Reinicie o contêiner.
- 05Instalar o mesmo driver no contêinerNo contêiner, instale o driver NVIDIA com a opção --no-kernel-module (o módulo vem da máquina host). O nvidia-smi deve funcionar agora dentro do contêiner.
- 06Instalar OllamaO script oficial detecta automaticamente o GPU. Ollama inicia seu daemon e carrega os modelos na placa compartilhada.
#VM com passthrough completo: a solução mais limpa
Aqui, a GPU deixa de estar disponível para o host e é atribuída a uma VM via VFIO. A VM reconhece uma placa NVIDIA real e se comporta como um sistema bare-metal: o driver é instalado normalmente, sem adaptações improvisadas de versão. Em contrapartida, é necessário preparar o host para liberar a placa na inicialização (vinculação ao VFIO) e impedir que o kernel carregue o driver nvidia no host.
- 01Ativar IOMMU no bootAdicione intel_iommu=on (ou amd_iommu=on) e iommu=pt aos parâmetros do kernel, no GRUB ou no systemd-boot, conforme sua instalação do Proxmox.
- 02Isolar o GPU para VFIOIdentifique os IDs PCI da placa (GPU + seu áudio HDMI), declare-os em vfio-pci e bloqueie os drivers nouveau/nvidia no host para impedir que ele assuma o controle desses dispositivos.
- 03Recriar o initramfs e reiniciarAtualize o initramfs para incluir os módulos VFIO e, em seguida, reinicie o host. Verifique se a GPU está sendo gerenciada pelo vfio-pci.
- 04Criar a VM e atribuir a GPU a elaCrie uma VM (tipo de máquina q35, BIOS OVMF/UEFI), adicione o dispositivo PCI da GPU em passthrough e marque PCI-Express. Instale o sistema operacional convidado (Ubuntu Server recomendado).
- 05Instalar driver + Ollama na VMNa VM, instale o driver NVIDIA clássico (o módulo do kernel é permitido aqui, é uma máquina real), verifique com nvidia-smi, depois instale Ollama.
#IOMMU, drivers e armadilhas comuns
O pass-through raramente falha por acaso: quase sempre devido ao IOMMU ou a um grupo PCI mal isolado. A seguir, os bloqueios mais comuns e como diagnosticá-los.
- Grupos IOMMU não isolados
- Se o GPU compartilhar seu grupo IOMMU com outros dispositivos (controlador USB, outra placa), o Proxmox recusa o pass-through. Verifique os grupos; como último recurso, o patch ACS override separa os grupos, com isolamento menos rigoroso.
- O host monopoliza a GPU
- Se após reinício o comando lspci mostrar o GPU sob « nvidia » ou « nouveau » e não « vfio-pci », a blacklist não foi aplicada. Verifique /etc/modprobe.d e gere novamente o initramfs.
- IOMMU desativado no BIOS
- dmesg não mostra nenhuma linha DMAR/IOMMU: VT-d ou AMD-Vi está desativado no firmware. Ative-o no BIOS antes de tudo.
- Versão do driver no LXC fora de sincronia
- Apenas no LXC: incompatibilidade de versões da NVML após uma atualização do host. Alinhe novamente as versões do host e do contêiner.
- GPU usada pelo console do host
- É difícil fazer corretamente o passthrough de uma única GPU que também serve como saída de vídeo para o Proxmox. Idealmente, mantenha uma iGPU ou uma segunda placa para a saída de vídeo do host.
#Expor Ollama na rede local
Por padrão, o Ollama escuta apenas em http://localhost:11434 — ou seja, só pode ser acessado de dentro do contêiner ou da VM. Para chamá-lo a partir do Open WebUI hospedado em outro local ou do seu computador, é necessário configurá-lo para escutar em todas as interfaces por meio da variável OLLAMA_HOST.
#Solução de problemas
- nvidia-smi ausente no contêiner
- Dispositivos não montados ou permissões dos cgroups configuradas incorretamente. Verifique as linhas lxc.mount.entry e lxc.cgroup2.devices.allow, depois os números major reais dos dispositivos com ls -l /dev/nvidia*.
- Ollama roda na CPU apesar da GPU
- Verifique ollama ps: se o modelo estiver com '100% CPU', o runtime CUDA não detecta a placa. Verifique nvidia-smi e reinicie o daemon Ollama.
- A VM não inicia após a adição do PCI
- Frequentemente, trata-se de um problema com OVMF/q35 ou de um grupo IOMMU compartilhado. Consulte os logs da VM e verifique se a placa está realmente vinculada ao vfio-pci no host.
- Desempenho reduzido após atualização do Proxmox
- Uma atualização do kernel host pode quebrar o módulo NVIDIA (LXC) ou o binding VFIO. Reinstale os headers e o driver, gere novamente o initramfs.
#Para se aprofundar
Com o Ollama instalado no Proxmox, esses guias do site ajudam a finalizar a stack e a escolher o equipamento adequado:
- Instalar Ollama no Linux
- Detalha a instalação adequada do daemon, o systemd e a configuração de GPU NVIDIA/AMD — útil dentro do contêiner ou da VM.
- Implantar um LLM em produção com Docker Compose
- Para integrar Open WebUI, Qdrant e um proxy reverso ao seu Ollama no Proxmox em uma stack completa.
- Escolher sua GPU para IA local
- O guia de compra de 2026 para dimensionar a placa a ser disponibilizada em LXC ou via passthrough, conforme os modelos pretendidos.
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.