Configurar GPU Passthrough no Proxmox VE é uma das técnicas mais poderosas para extrair performance máxima de máquinas virtuais, especialmente quando o objetivo é computação gráfica pesada, renderização 3D ou, cada vez mais comum, treinamento de modelos de Inteligência Artificial e Machine Learning. Ao contrário da virtualização tradicional, onde a GPU é emulada (como na VGA padrão), o PCI Passthrough permite que a máquina virtual Linux tenha acesso direto ao hardware físico da placa de vídeo.
Este tutorial técnico guia você, sysadmin ou desenvolvedor, através do processo completo de configuração. O foco é garantir estabilidade e performance em ambientes de produção, utilizando boas práticas de isolamento de dispositivos e configuração do kernel no Proxmox VE.
1. Verificação de Compatibilidade e Pré-requisitos
Antes de modificar qualquer configuração, é fundamental garantir que seu hardware suporte a virtualização com I/O (Input/Output) direto. O Proxmox VE depende do suporte ao IOMMU (I/O Memory Management Unit), presente tanto na tecnologia Intel VT-d quanto AMD-Vi.
Verifique se o processador suporta essas tecnologias consultando as especificações técnicas do fabricante ou executando comandos no shell do host Proxmox. Além disso, certifique-se de que a virtualização está habilitada na BIOS/UEFI da sua máquina física. Sem essa configuração prévia, o processo falhará imediatamente.
Outro ponto crítico é o isolamento dos dispositivos. O PCI Passthrough funciona melhor quando a GPU desejada não está sendo utilizada pelo host Proxmox para saída de vídeo principal ou gerenciamento do sistema. Recomenda-se fortemente que você tenha uma segunda placa de vídeo integrada (iGPU) ou discreta dedicada ao host, caso contrário, perderá acesso à interface gráfica do próprio Proxmox.
2. Habilitando o IOMMU no Kernel
O primeiro passo técnico consiste em instruir o kernel do Linux a ativar o suporte ao IOMMU. A configuração varia ligeiramente dependendo se você utiliza processadores Intel ou AMD.
Acesse o shell do seu nó Proxmox e edite o arquivo de configuração do GRUB:
nano /etc/default/grub
Localize a linha que começa com GRUB_CMDLINE_LINUX_DEFAULT. Adicione as seguintes opções ao final da string, entre as aspas:
- Para processadores Intel:
intel_iommu=on iommu=pt - Para processadores AMD:
amd_iommu=on iommu=pt
O parâmetro iommu=pt (Pass-Through) é uma otimização recomendada que reduz a sobrecarga de tradução de endereços para dispositivos não atribuídos, melhorando a performance geral do host.
Após salvar o arquivo, atualize a configuração do GRUB e reinicie o servidor:
update-grub
reboot
3. Configurando Módulos do Kernel
Agora que o IOMMU está habilitado no bootloader, precisamos carregar os módulos específicos necessários para a gestão de GPUs virtuais e PCI. Isso é feito criando ou editando um arquivo de módulo dedicado.
nano /etc/modules
Adicione as seguintes linhas ao final do arquivo:
vfio
vfio-pci
vfio-virqfd
O módulo vfio-pci é o responsável por interceptar o driver nativo da GPU (como NVIDIA ou AMD) e substituí-lo pelo driver de virtualização seguro, impedindo que o host tente inicializar a placa antes que ela seja passada para a VM.
Em seguida, atualize o initramfs para garantir que esses módulos sejam carregados durante o boot:
update-initramfs -u -k all
reboot
4. Isolamento da GPU via Blacklist e Binding
Para evitar conflitos, é essencial impedir que os drivers padrão do Linux (como nvidiafb, nouveau ou radeon) tentem controlar a GPU que será passada. Além disso, devemos forçar o kernel a associar a placa de vídeo ao driver vfio-pci logo na inicialização.
Crie um arquivo de configuração para blacklisting:
nano /etc/modprobe.d/vfio.conf
Insira o conteúdo abaixo. Você precisará identificar o Vendor ID e Device ID da sua GPU. Para isso, execute no terminal do host:
lspci -nn | grep -i nvidia
# ou para AMD:
lspci -nn | grep -i amd
O comando retornará algo como [10de:2204], onde 10de é o Vendor ID e 2204 é o Device ID. Substitua os valores no arquivo de configuração:
options vfio-pci ids=10de:2204,10de:1aef
# Nota: Placas NVIDIA possuem dois dispositivos (GPU e Áudio). É necessário listar ambos.
O exemplo acima mostra a GPU e o controlador de áudio integrado à placa gráfica. Ambos devem ser passados para a VM para que o driver oficial funcione corretamente no ambiente virtualizado.
5. Verificação do Grupo IOMMU
Antes de criar a VM, verifique se o kernel conseguiu isolar a GPU em um grupo IOMMU independente. Grupos isolados garantem que apenas os dispositivos selecionados sejam passados, sem afetar outros componentes do sistema.
cat /sys/kernel/iommu_groups/0/devices/0000:xx:xx.x | head -n 1
Você pode listar todos os grupos com:
ls -l /sys/kernel/iommu_groups/
Se a sua GPU aparecer em um grupo exclusivo ou compartilhado apenas com dispositivos compatíveis (como o áudio da mesma placa), a configuração está correta. Se ela estiver misturada com discos SATA ou controladores USB críticos, pode ser necessário ajustar as opções do BIOS (como "Above 4G Decoding") ou recarregar os módulos manualmente para testar.
6. Criando a Máquina Virtual Linux
Agora que o host está preparado, vamos criar a VM no Proxmox VE através da interface web ou linha de comando. Para este tutorial, assumiremos a criação via CLI para maior precisão, mas os passos são idênticos na GUI.
Crie uma nova VM (ex: ID 100) com as seguintes especificações recomendadas:
pveam create vm-100 --ostype=l26 --memory 8192 --cores 4
Instale o sistema operacional Linux desejado (Ubuntu Server, Debian, etc.) nesta VM. Certifique-se de que a instalação seja feita sem interface gráfica pesada se o foco for computação, ou instale o desktop se for usar para renderização.
7. Configurando o PCI Passthrough na VM
Com a VM criada e parada, adicione o dispositivo PCI. Na linha de comando:
pvesh create /nodes/localhost/hwlocations/pci -vmid 100 -pci0 0000:xx:xx.x
Substitua 0000:xx:xx.x pelo endereço PCI exato da sua GPU, obtido anteriormente via lspci. Se você tiver mais de um dispositivo (como o áudio), adicione-o como um segundo slot PCI ou inclua ambos no mesmo comando se a versão do Proxmox permitir múltiplos IDs.
Além disso, para garantir que a VM tenha acesso direto e sem atrasos (low latency), é recomendável ajustar algumas configurações avançadas:
- QEMU Agent: Habilite o QEMU Guest Agent na aba "Options" da VM para melhor integração.
- SMP: Use
sockets=1,cores=Xem vez de threads duplos, pois alguns drivers de GPU preferem topologias de núcleos físicos diretos. - EFI: Se a VM for usar UEFI (Recomendado para GPUs modernas), vá em "Options" > "BIOS" e selecione
UEFI.
8. Instalação dos Drivers na VM Linux
Inicie a máquina virtual Linux. Como ela agora possui acesso direto à GPU, o sistema operacional detectará o hardware como se estivesse em uma máquina física.
No ambiente da VM Linux, execute os comandos padrão para instalação dos drivers proprietários ou open-source:
Para NVIDIA:
sudo apt update
sudo apt install ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
Reinicie a VM após a instalação. Se tudo correu bem, o comando nvidia-smi dentro da VM deve listar a GPU e seus processos corretamente.
9. Testes de Performance e Validação
A validação final é crucial para garantir que o passthrough está funcional e performático. Dentro da VM Linux, utilize as seguintes ferramentas:
- nvidia-smi: Verifica se a GPU está reconhecida e operando na frequência correta.
- glxinfo | grep "OpenGL renderer": Confirma que o renderizador OpenGL está usando a GPU dedicada, e não o software swrast.
- Unigine Heaven ou Superposition: Benchmarks gráficos para testar estabilidade sob carga pesada.
Se você notar travamentos ou queda de performance, verifique se o host Proxmox está sobrecarregado. O PCI Passthrough consome recursos do host (como a linha PCIe) e pode impactar outras VMs se o barramento estiver saturado.
10. Considerações Finais e Boas Práticas
A implementação de GPU Passthrough no Proxmox VE é um processo que exige precisão, mas oferece resultados incomparáveis em termos de performance computacional para VMs Linux. Lembre-se sempre de:
- Faça backups: Antes de alterar configurações de kernel ou IOMMU, tenha uma snapshot ou backup do seu ambiente.
- Monitoramento: Acompanhe as temperaturas da GPU dentro e fora da VM. O gerenciamento térmico pode variar entre o host e a guest.
- Atualizações: Mantenha o Proxmox VE atualizado. Novas versões trazem melhorias na gestão de IOMMU e suporte a novos hardware.
Com esta configuração, você transforma seu servidor de virtualização em uma estação de trabalho gráfica poderosa ou um nó de inferência de IA robusto, aproveitando ao máximo o potencial da infraestrutura Proxmox VE.