Avançado 15 minProxmox

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 Mohamed Meguedmi·Atualização 2026-08-27·Testado no Windows, macOS e Linux

#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.

i
O que este guia pressupõe
Proxmox VE 8.x instalado e funcionando, uma GPU NVIDIA (RTX 3060 12GB ou melhor) e acesso root ao nó via SSH ou pela console web. Os comandos são fornecidos para um host Debian 12 (base do Proxmox 8) e um sistema convidado Debian/Ubuntu.

#LXC vs VM: qual escolher para o Ollama

O kit Agentes Locais

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).
→
Recomendação padrão
Para uma primeira instalação com uma única GPU em um homelab, comece com o LXC. É mais rápido de configurar, tem menos armadilhas e mantém a placa disponível para outros usos. Passe para a VM quando você tiver uma necessidade real de isolamento ou uma GPU dedicada.

#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.

  1. 01
    Instalar o driver NVIDIA no host
    Adicione 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.
  2. 02
    Criar um contêiner LXC sem privilégios
    Um 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).
  3. 03
    Identificar os dispositivos GPU
    No 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.
  4. 04
    Montar os dispositivos na configuração LXC
    Edite /etc/pve/lxc/200.conf para permitir os cgroups dos dispositivos NVIDIA e montá-los via bind mount. Reinicie o contêiner.
  5. 05
    Instalar o mesmo driver no contêiner
    No 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.
  6. 06
    Instalar Ollama
    O script oficial detecta automaticamente o GPU. Ollama inicia seu daemon e carrega os modelos na placa compartilhada.
Host Proxmox
# 1. En-têtes noyau + driver NVIDIA sur l'hôte
apt update && apt install -y pve-headers-$(uname -r)
apt install -y nvidia-driver nvidia-smi

# Vérifier la détection
nvidia-smi

# 2. Repérer les device nodes (relever major:minor)
ls -l /dev/nvidia*
/etc/pve/lxc/200.conf
# Conteneur non privilégié + nesting
features: nesting=1

# Autoriser les cgroups des périphériques NVIDIA (major 195, 234, 508 selon setup)
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 234:* rwm
lxc.cgroup2.devices.allow: c 509:* rwm

# Monter les device nodes dans le conteneur
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
No contêiner LXC
# Même version de driver, SANS le module noyau (fourni par l'hôte)
./NVIDIA-Linux-x86_64-<version>.run --no-kernel-module

# nvidia-smi doit répondre à l'intérieur du conteneur
nvidia-smi

# Installer Ollama (détecte le GPU tout seul)
curl -fsSL https://ollama.com/install.sh | sh

# Test : le modèle doit se charger sur le GPU
ollama run qwen3.5:9b
!
A armadilha das versões do driver
Se nvidia-smi exibir « Failed to initialize NVML: Driver/library version mismatch » no contêiner, é porque o driver do contêiner não corresponde exatamente ao do host. Reinstale a versão idêntica ou, após uma atualização do host, reinicie o contêiner para ressincronizar.

#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.

  1. 01
    Ativar IOMMU no boot
    Adicione 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.
  2. 02
    Isolar o GPU para VFIO
    Identifique 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.
  3. 03
    Recriar o initramfs e reiniciar
    Atualize o initramfs para incluir os módulos VFIO e, em seguida, reinicie o host. Verifique se a GPU está sendo gerenciada pelo vfio-pci.
  4. 04
    Criar a VM e atribuir a GPU a ela
    Crie 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).
  5. 05
    Instalar driver + Ollama na VM
    Na 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.
Host — ativar IOMMU (GRUB)
# Éditer /etc/default/grub, ligne GRUB_CMDLINE_LINUX_DEFAULT
# Intel :
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD :
# GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

update-grub
reboot

# Après reboot : vérifier que l'IOMMU est actif
dmesg | grep -e DMAR -e IOMMU
Host — binding VFIO
# Trouver les IDs PCI et les vendor:device IDs du GPU
lspci -nn | grep -i nvidia
# ex. 01:00.0 ... [10de:2504]  (GPU)
#     01:00.1 ... [10de:228e]  (audio HDMI de la carte)

# Déclarer les IDs pour vfio-pci
echo "options vfio-pci ids=10de:2504,10de:228e" > /etc/modprobe.d/vfio.conf

# Blacklister les drivers côté hôte
echo -e "blacklist nouveau\nblacklist nvidia\nblacklist nvidiafb" > /etc/modprobe.d/blacklist-nvidia.conf

# Charger vfio au boot puis régénérer l'initramfs
echo -e "vfio\nvfio_iommu_type1\nvfio_pci" >> /etc/modules
update-initramfs -u -k all
reboot

# Après reboot : le GPU doit utiliser vfio-pci
lspci -nnk -d 10de:2504
→
Adição do PCI na interface Proxmox
Na VM → Hardware → Add → PCI Device, escolha a GPU. Marque « All Functions » para incluir o áudio HDMI e « PCI-Express » (requer uma VM com tipo de máquina q35 e BIOS OVMF). Com os drivers NVIDIA recentes, não é mais necessário contornar o famoso « Code 43 » no Linux convidado.

#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.
Host — verificar os grupos IOMMU
# Lister les groupes IOMMU et leurs périphériques
for g in /sys/kernel/iommu_groups/*; do
  echo "Groupe ${g##*/}:"
  for d in $g/devices/*; do
    echo -n "  "; lspci -nns "${d##*/}"
  done
done

# Le GPU (et son audio) doit idéalement être seul dans son groupe

#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.

No contêiner / na máquina virtual
# Écouter sur toutes les interfaces (override du service systemd)
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF

systemctl daemon-reload
systemctl restart ollama

# Depuis un autre hôte du LAN, tester l'API
curl http://<ip-conteneur>:11434/api/tags
!
Não expor o Ollama na internet sem proteção
A API do Ollama não possui autenticação. Ao escutar em 0.0.0.0, mantenha-a estritamente na sua rede local ou atrás de um proxy reverso com autenticação (Traefik, Caddy). Nunca redirecione diretamente a porta 11434 no seu modem/roteador.

#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.
Verificações rápidas
# Le GPU est-il vu par Ollama ?
ollama ps          # doit montrer un % GPU, pas 100% CPU

# État de la carte et VRAM utilisée
nvidia-smi

# Le daemon répond-il ?
curl http://localhost:11434/api/tags

#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.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.