{ "meta": { "title": "Adicionar GPU ao LXC | Documentação ProxMenux", "description": "Partilhe GPU Intel, AMD ou NVIDIA com LXC. O ProxMenux configura dispositivos, grupos e bibliotecas conforme a distribuição; a aplicação tem de suportar e configurar a aceleração." }, "header": { "title": "Adicionar GPU ao LXC", "description": "Partilha acesso GPU com LXC através dos dispositivos do anfitrião. O controlador permanece no anfitrião; as aplicações exigem bibliotecas compatíveis e configuração própria.", "section": "Hardware: GPUs e Coral-TPU" }, "intro": { "title": "O que faz", "body": "Adiciona entradas dev<N> a /etc/pve/lxc/<ctid>.conf para os nós /dev/dri/*, /dev/kfd ou /dev/nvidia* aplicáveis. Inicia o contentor, instala pacotes userspace da sua distribuição e, para Intel/AMD, alinha os grupos video e render. A aceleração das aplicações continua a exigir hardware, bibliotecas e configuração da aplicação compatíveis." }, "compare": { "heading": "Partilha LXC ou atribuição direta a uma VM", "intro": "O LXC partilha o kernel e pode partilhar a GPU entre anfitrião e contentores. Com atribuição completa a uma VM, o dispositivo fica dedicado à VM e indisponível para o controlador do anfitrião.", "headerFeature": "Característica", "headerLxc": "LXC (esta página)", "headerVm": "VM", "rows": [ { "feature": "O host continua usando o GPU?", "lxc": "Sim", "vm": "Não — exclusiva do VM" }, { "feature": "Vários contentores a partilhar um GPU?", "lxc": "Sim", "vm": "Não" }, { "feature": "Requer IOMMU / VFIO no host?", "lxc": "Não", "vm": "Sim" }, { "feature": "É necessário reiniciar?", "lxc": "Normalmente não (apenas reinicie o CT)", "vm": "Se mudar o controlador ou IOMMU do anfitrião; não a cada atribuição" }, { "feature": "Sistemas operativos convidados", "lxc": "Apenas Linux (LXC é somente Linux)", "vm": "SO convidado suportado com controlador GPU compatível" } ] }, "prereqs": { "title": "Antes de começar", "gpu": "GPU no anfitrião Intel, AMD ou NVIDIA, detetada via lspci.", "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'", "vfio": "A GPU não deve estar associada a vfio-pci. Precisa do controlador nativo do anfitrião. Se atribuída a uma VM, o script propõe Alterar modo da GPU.", "nvidia": "Para NVIDIA: instale primeiro o controlador no anfitrião. As bibliotecas do contentor têm de corresponder à versão. Use Instalar controladores NVIDIA no anfitrião.", "nvidiaCheck": "nvidia-smi", "container": "Um LXC existente. O script não o cria. Suporta ambos os modos; um contentor privilegiado não é sempre necessário. Dispositivos e permissões numéricas da aplicação têm de corresponder." }, "unpriv": { "title": "Suporta contentores privilegiados e sem privilégios", "body": "O script escreve entradas dev<N> para a configuração LXC e, em recipientes não privilegiados, alinha os GIDs video e render entre o host e o recipiente para que os nós do dispositivo GPU sejam alcançáveis de dentro sem que você tenha que editar manualmente lxc.idmap." }, "running": { "heading": "Executar o instalador", "body": "Abra o ProxMenux e escolha Hardware: GPU e Coral-TPU → Adicionar GPU ao LXC.", "imageAlt": "Opção do menu para adicionar GPU ao LXC" }, "howRuns": { "heading": "Como funciona o script", "body": "Escolha contentor e famílias GPU e passe as verificações. Depois para e altera o contentor sem confirmação final adicional. A limpeza VFIO opcional tem confirmação separada e pode alterar antes o anfitrião." }, "walkthrough": { "heading": "Procedimento passo a passo", "detect": { "title": "Detectar GPUs da máquina", "body": "Procura controladores GPU com lspci. Para NVIDIA verifica o módulo nvidia e nvidia-smi; a versão detetada determina o instalador .run do contentor.", "tipTitle": "O NVIDIA não está pronto?", "tipBody": "Se faltar o módulo ou NVIDIA não funcionar no anfitrião, use primeiro Instalar controladores NVIDIA no anfitrião e verifique o controlador." }, "pickCt": { "title": "Escolha um contentor LXC", "body": "Lista os contentores LXC elegíveis por ID e nome; os contentores OCI são excluídos e utilizam OCI manager Apps para os dispositivos. O contentor é parado se estiver em execução, iniciado para a instalação dos controladores e normalmente reposto no estado original (em execução/parado).", "imageAlt": "Seleção de um contentor LXC existente" }, "selectGpu": { "title": "Selecione as famílias GPU", "body": "A lista seleciona famílias por fabricante, não um dispositivo PCI isolado. Intel/AMD adicionam os nós DRI previstos; NVIDIA os dispositivos disponíveis, eventualmente de várias placas. Uma única família é selecionada automaticamente. Verifique a lista final, sobretudo com várias GPU.", "imageAlt": "Lista de famílias GPU detetadas com nome e endereço PCI" }, "preflight": { "title": "Verificações prévias", "imageAlt": "Proposta de alteração de modo de uma GPU associada a vfio-pci", "intro": "Três verificações, qualquer uma das quais pode bloqueá-lo ou redirecioná-lo:", "items": [ "Proteção SR-IOV. O assistente bloqueia VF ou PF com VF ativas. É uma limitação da seleção ampla de dispositivos, não uma proibição geral em LXC. Configure-os separadamente.", "Associada a vfio-pci. O controlador nativo não pode criar /dev/dri/* ou /dev/nvidia*. Propõe Alterar modo da GPU; siga as indicações de reinício e volte depois.", "Já configurada. Se todos os dispositivos estiverem presentes, termina sem reinstalar bibliotecas. Continua apenas com as famílias selecionadas em falta." ] }, "applyConfig": { "title": "Aplicar as alterações de configuração do LXC", "body1": "Para o contentor, se estiver em execução, e altera /etc/pve/lxc/<ctid>.conf. As entradas numeradas dev<N> incluem o GID do anfitrião de video ou render. As linhas bind lxc.mount.entry existentes para /dev/dri são substituídas por entradas dev:; verifique a configuração e as permissões resultantes.", "body2": "Exemplo após Intel + NVIDIA no mesmo recipiente:" }, "installDrivers": { "title": "Iniciar o recipiente e instalar drivers dentro", "body": "Inicia o contentor e espera até cerca de 30 segundos pela resposta de pct exec. Deteta a distribuição por /etc/os-release e instala os pacotes adequados.", "headerDistro": "Distribuição", "headerInt": "Intel / AMD", "headerNvidia": "NVIDIA", "rows": [ { "distro": "Alpine", "intel": "apk add mesa-va-gallium intel-media-driver libva-utils", "nvidia": "apk add nvidia-utils" }, { "distro": "Arch / Manjaro", "intel": "pacman -Sy intel-media-driver mesa libva-utils", "nvidia": "pacman -Sy nvidia-utils" } ], "debianDistro": "Debian / Ubuntu / outros", "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo", "debianNvidia": "Extrai .run no anfitrião → pct push → instala com --no-kernel-modules --no-dkms.", "whyTitle": "Porque utiliza o instalador NVIDIA .run no Debian", "whyBody": "Os pacotes podem não corresponder ao anfitrião. As bibliotecas têm de corresponder ao módulo carregado para NVML e nvidia-smi. Debian/glibc usa o .run dessa versão em cache, extrai e arquiva no anfitrião, transfere com pct push e instala com --no-kernel-modules --no-dkms. Alpine e Arch usam repositórios: verifique as versões." }, "alignGids": { "title": "Alinhar GIDs e restaurar o estado", "body1": "Para Intel/AMD, lê os GID do anfitrião de video e render, usando 44/104 apenas como alternativa, e depois altera /etc/group no contentor para corresponderem; as execuções apenas com NVIDIA saltam este passo. Entradas como video:44 e render:104 são exemplos, não ID universais. Verifique a pertença da aplicação aos grupos e as permissões efetivas dos dispositivos.", "body2": "Ao concluir normalmente, volta a parar o contentor se estava parado; se estava ativo mantém-no ativo. Se falhar o arranque ou a instalação, verifique o estado final e o registo." } }, "vendors": { "heading": "Notas por fabricante", "intelHeading": "Intel iGPU", "intelBody": "A aceleração multimédia Intel, incluindo Quick Sync, depende da geração do GPU, dos codecs e da configuração da aplicação. O script partilha os que existirem de entre /dev/dri/card0, card1, renderD128 e renderD129; outros números de nó não são adicionados. O anfitrião tem de os disponibilizar já através do seu controlador nativo, por exemplo i915.", "amdHeading": "AMD", "amdBody": "AMD usa DRI para Mesa/VA-API. Se existir /dev/kfd no anfitrião, também o partilha. ROCm/OpenCL exige hardware e bibliotecas compatíveis; partilhar o dispositivo não instala toda a pilha ROCm.", "nvidiaHeading": "NVIDIA", "nvidiaBody": "Partilha os dispositivos /dev/nvidia*. As versões do controlador têm de corresponder para nvidia-smi. Debian/glibc usa o .run da versão do anfitrião; Alpine/Arch os repositórios. Abaixo de 2048 MiB de RAM configurada propõe um aumento temporário e depois restaura; exige também 1500 MiB livres em disco.", "updateTitle": "Após atualizar NVIDIA no anfitrião, verifique as bibliotecas LXC", "updateBody": "Bibliotecas antigas podem causar erros em nvidia-smi. O instalador NVIDIA do anfitrião propõe atualizar contentores. Repetir a adição pode terminar se já existirem dispositivos: não garante atualizar bibliotecas. Verifique versões e atualize os pacotes ou a instalação de utilizador adequada." }, "verification": { "heading": "Verificação", "body": "No contentor verifique se a GPU está visível e utilizável." }, "troubleshoot": { "heading": "Resolução de problemas", "mismatchTitle": "nvidia-smi: Failed to initialize NVML: Driver/library version mismatch", "mismatchBody": "As bibliotecas não correspondem ao módulo carregado. Verifique versões e atualize o espaço de utilizador LXC. O .run em cache serve para Debian/glibc, mas a adição pode terminar se todos os dispositivos já existirem.", "denyTitle": "Permissão negada em /dev/dri/renderD128 dentro do recipiente", "denyBody": "Verifique dispositivo e permissões numéricas de render, depois se o utilizador pertence a render. Se disponível, adicione-o a render com usermod -aG render <user>, substituindo o marcador pela conta real. Reinicie a sessão. Mudar privilégios não é uma solução geral.", "vainfoTitle": "vainfo indica: VA-API version 1.xx; failed to initialize", "vainfoBody": "Verifique acesso e controlador VA-API. Os nomes variam por distribuição: por exemplo intel-media-driver para Intel recentes suportadas, i965-va-driver para antigas compatíveis e mesa-va-drivers para AMD. A mensagem só por si não prova que falte um pacote.", "logTitle": "Registo de instalação", "logBody": "Cada execução escreve /tmp/add_gpu_lxc.log no anfitrião. Anexe o registo ao pedir ajuda." }, "related": { "heading": "Relacionados", "items": [ { "label": "Instalar Drivers NVIDIA (Host)", "href": "/docs/hardware/nvidia-host", "tail": " — instale o controlador do anfitrião antes de partilhar NVIDIA." }, { "label": "Adicionar GPU a VM (passthrough)", "href": "/docs/hardware/gpu-vm-passthrough", "tail": " — alternativa para dedicar uma GPU a uma VM." }, { "label": "Alterar modo da GPU (VM ↔ LXC)", "href": "/docs/hardware/switch-gpu-mode", "tail": " — alterna a GPU entre partilha LXC e atribuição VM." }, { "label": "Comandos de passagem GPU", "href": "/docs/help-info/gpu-commands", "tail": " — referência rápida para comandos de shell relacionados." } ] } }