Merge remote-tracking branch 'origin/develop' into HEAD

This commit is contained in:
MacRimi
2026-10-18 17:16:51 +02:00
53 changed files with 6781 additions and 916 deletions
@@ -0,0 +1,120 @@
{
"meta": {
"title": "Adicionar Coral TPU ao LXC | Documentação ProxMenux",
"description": "Partilhe um Google Coral TPU USB ou M.2 / PCIe com um LXC Proxmox. O ProxMenux configura dispositivos, permissões e montagens, inicia o contentor e instala o runtime Edge TPU em distribuições compatíveis."
},
"header": {
"title": "Adicionar Coral TPU ao LXC",
"description": "Partilhe um Coral USB Accelerator ou M.2 / Mini-PCIe com um LXC. O ProxMenux configura o contentor e o runtime Edge TPU. Esta opção trata apenas da TPU: para Quick Sync, VA-API ou NVENC, execute também Adicionar GPU ao LXC.",
"section": "Hardware: GPUs e Coral-TPU"
},
"intro": {
"title": "O que faz",
"body": "Escreve a configuração em <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> para <strong>USB Accelerator</strong>, <strong>Coral M.2 / PCIe</strong> ou ambos. Inicia o contentor e instala o runtime Google <code>libedgetpu</code>. O GPU configura-se separadamente em <lxcGpuLink>Adicionar GPU ao LXC</lxcGpuLink>."
},
"whenUse": {
"heading": "Quando utilizar",
"body": "Para <frigateLink>Frigate</frigateLink> ou outra aplicação Linux compatível em LXC. O Coral executa a inferência ML suportada em vez da CPU. O desempenho depende do modelo e do hardware; descodificação de vídeo e outras tarefas continuam a consumir recursos."
},
"prereqs": {
"title": "Antes de começar",
"drivers": "<strong>Prepare o dispositivo Coral no anfitrião</strong>. M.2 / PCIe exige o controlador do anfitrião carregado; USB exige acesso ao dispositivo e permissões adequadas. Consulte <hostLink>Instalar Coral TPU no anfitrião</hostLink>. O script instala o runtime da aplicação em contentores Debian/Ubuntu; as outras distribuições têm de o disponibilizar separadamente.",
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"container": "<strong>Um LXC existente</strong>, de preferência baseado em <strong>Debian / Ubuntu</strong>: a instalação utiliza <code>apt-get</code>. Os <strong>contentores de outras distribuições</strong> podem usar o <strong>modo apenas de passagem direta</strong>, que omite a instalação APT de <code>libedgetpu</code>. É útil se a aplicação já incluir o runtime, como a imagem Docker Frigate.",
"downtime": "<strong>Preveja uma breve interrupção</strong> do contentor. O script para-o para alterar a configuração e inicia-o para instalar o runtime. Estas alterações não exigem reiniciar o anfitrião."
},
"hostPrep": {
"title": "Prepare primeiro o anfitrião",
"body": "M.2 / PCIe exige <code>gasket</code>/<code>apex</code> no anfitrião e um dispositivo funcional. USB exige dispositivo ligado e permissões; a aplicação não precisa de executar no anfitrião. <code>libedgetpu</code> deve estar onde a aplicação executa. Ordem: <strong>preparar anfitrião → acesso LXC → configurar aplicação</strong>."
},
"running": {
"heading": "Executar o script",
"body": "No ProxMenux, abra <strong>Hardware: GPU e Coral-TPU → Adicionar Coral TPU ao LXC</strong>.",
"imageAlt": "Opção Adicionar Coral TPU ao LXC no menu de hardware"
},
"howRuns": {
"heading": "Como funciona o script",
"body": "Escolha o contentor. O script configura o acesso USB mesmo sem Coral USB ligado e acrescenta M.2 / PCIe quando deteta esse hardware."
},
"walkthrough": {
"heading": "Procedimento passo a passo",
"pick": {
"title": "Escolha o contentor LXC",
"body": "O seletor mostra os contentores elegíveis de <code>pct list</code>; os OCI são ocultados e geridos em Apps no gestor OCI. Escolha um, iniciado ou parado. O script para-o se necessário, configura-o e inicia-o para instalar o runtime."
},
"gpuHint": {
"title": "Sugestão opcional de acesso ao GPU",
"body": "Se for detetado um GPU não configurado para este contentor, uma caixa de diálogo recomenda <lxcGpuLink>Adicionar GPU ao LXC</lxcGpuLink> para descodificação de vídeo por hardware, como Quick Sync, VA-API ou NVENC. Pergunta se pretende continuar apenas com Coral: Sim continua a configuração do TPU; Não sai para que possa configurar primeiro o GPU."
},
"usb": {
"title": "Configurar acesso USB no LXC",
"body": "Cria uma regra udev no anfitrião para <code>/dev/coral</code> e monta a árvore <strong>completa</strong> <code>/dev/bus/usb</code> no contentor. A configuração é escrita mesmo sem Coral USB ligado e expõe outros dispositivos além do Coral.",
"whyTitle": "Porquê montar o /dev/bus/usb em vez do /dev/coral?",
"whyBody": "O caminho USB, como <code>/dev/bus/usb/001/005</code>, muda ao voltar a ligar o acelerador. As versões antigas montavam a ligação <code>/dev/coral</code> e podiam manter um caminho desatualizado. Montar toda a árvore USB permite ver o dispositivo atual. A aplicação poderá ter de voltar a abrir o dispositivo."
},
"pcie": {
"title": "Configurar acesso M.2 / PCIe no LXC",
"body1": "Se detetar Coral M.2 / PCIe e existir <code>/dev/apex_0</code>, utiliza a API Proxmox <code>dev</code> para gerir cgroup2 em LXC com e sem privilégios:",
"body2": "Se <code>/dev/apex_0</code> estiver ausente após <hostLink>Instalar Coral no anfitrião</hostLink>, o script escreve um bind mount com <code>create=file</code> e, apenas quando o número major do apex consta de <code>/proc/devices</code>, uma regra cgroup2 clássica. Nenhum dos dois cria um dispositivo funcional:",
"rebootTitle": "Reiniciar o host primeiro se você acabou de instalar os drivers Coral",
"rebootBody": "A montagem alternativa não carrega <code>apex</code> no anfitrião. Carregue o controlador ou reinicie após a instalação e verifique o dispositivo. Execute novamente o script para aplicar a entrada moderna e reinicie o contentor."
},
"drivers": {
"title": "Iniciar o LXC e instalar o runtime Coral",
"body": "Inicia o contentor e aguarda até 15 segundos pelo estado running; depois utiliza <code>pct exec</code> para executar o instalador no interior. O instalador:",
"items": [
"Corre <code>apt-get update</code>.",
"Instala os pré-requisitos do repositório Coral: <code>gnupg</code>, <code>curl</code>, <code>ca-certificates</code>.",
"Importa a chave Coral GPG do Google para <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> (caminho moderno, o mesmo que o instalador do host usa) e adiciona o repositório <code>coral-edgetpu-stable</code> APT com <code>signed-by=</code>.",
"Instala <code>libedgetpu1-std</code> por predefinição. Se detetar Coral M.2, oferece <code>libedgetpu1-std</code> ou <code>libedgetpu1-max</code>. A escolha do pacote não configura por si só a deteção na aplicação."
],
"noIgpuTitle": "Porque não são instalados controladores iGPU aqui?",
"noIgpuBody": "Antes instalava também <code>va-driver-all</code>, <code>intel-opencl-icd</code> e outros pacotes Intel para combinar Quick Sync e Coral. Isso causava falhas confusas quando se pretendia apenas Coral. Agora o iGPU configura-se em <lxcGpuLink>Adicionar GPU ao LXC</lxcGpuLink>; execute-o primeiro para descodificação de vídeo por hardware.",
"debianTitle": "Outras distribuições: apenas acesso ao dispositivo",
"debianBody": "Utiliza <code>apt-get</code> em Debian/Ubuntu. Para <strong>Alpine, Arch, RHEL ou SUSE</strong>, detetados por <code>/etc/os-release</code>, oferece <em>continuar apenas com acesso ao dispositivo</em> ou <em>cancelar</em>. A primeira opção configura <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> sem instalar <code>libedgetpu</code>. Se a aplicação já incluir o runtime, como Frigate Docker, esse modo basta. Caso contrário, instale <code>libedgetpu</code> seguindo o <coralLink>guia oficial Google</coralLink>."
},
"summary": {
"title": "Resumo",
"body": "No final apresenta Coral USB e M.2 com ✓ ou ⚠ conforme a deteção do hardware. O contentor fica iniciado para configurar Frigate, CodeProject.AI ou a sua aplicação."
}
},
"manual": {
"heading": "Procedimento manual equivalente",
"body": "Se você quiser ver exatamente o que vai para a configuração LXC, ou aplicá-lo à mão:",
"usbHeading": "USB Coral",
"pcieHeading": "M.2 / PCIe Coral",
"runtimeHeading": "No contentor: runtime Coral"
},
"verification": {
"heading": "Verificação",
"body": "Abra uma consola no contentor e confirme que o Coral está visível:"
},
"troubleshoot": {
"heading": "Resolução de problemas",
"apexTitle": "LXC iniciado, mas falta /dev/apex_0",
"apexBody": "Verifique primeiro o controlador do anfitrião: <code>lsmod | grep apex</code>. Se faltar, tente <code>modprobe apex</code> ou reinicie após a instalação do controlador. Quando existir <code>/dev/apex_0</code> no anfitrião, verifique a entrada de dispositivo LXC (volte a executar o script se só foram escritas as entradas alternativas) e reinicie o contentor com <code>pct stop &lt;ctid&gt; &amp;&amp; pct start &lt;ctid&gt;</code>.",
"replugTitle": "Coral USB desaparece ao ligar noutra porta",
"replugBody": "Confirme que o LXC monta <code>/dev/bus/usb</code> em vez da ligação <code>/dev/coral</code>. A configuração deve incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sem depender diretamente de <code>/dev/coral</code>. Execute novamente o script se a configuração for antiga.",
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime não instalado",
"alpineBody": "O <em>modo apenas de passagem direta</em> configura o dispositivo sem instalar <code>libedgetpu</code>. Use um pacote compatível ou compile o código; verifique a disponibilidade antes de comandos como <code>apk add</code> em Alpine. O Frigate pode incluir o runtime. Com Docker no LXC, encaminhe também M.2 com <code>--device /dev/apex_0:/dev/apex_0</code> ou monte USB no Docker: a montagem LXC não basta.",
"frigateTitle": "Frigate apresenta «Coral EdgeTPU detected but not available»",
"frigateBody": "Verifique runtime, visibilidade e acesso de leitura/escrita do processo real. Para USB, examine permissões e eventual grupo <code>plugdev</code>. Para M.2, inspecione <code>/dev/apex_0</code> com <code>ls -l /dev/apex_0</code>. Um nome como <code>apex</code> em <code>/etc/group</code> não basta: GID numéricos e mapeamentos LXC devem coincidir. Verifique se outro processo ocupa a TPU; não passe logo para modo privilegiado.",
"logsTitle": "Verificar os registos da máquina e do contentor",
"logsBody": "No anfitrião, veja as mensagens do kernel com <code>journalctl -k | grep -i -e apex -e gasket -e usb</code>. No LXC, consulte os registos da aplicação; com Docker aninhado use <code>docker logs &lt;container&gt;</code>. Permissões, runtime ausente, ligação USB ou outro processo a utilizar a TPU podem causar falhas."
},
"related": {
"heading": "Relacionados",
"items": [
{
"label": "Instalar Coral TPU no anfitrião",
"href": "/docs/hardware/install-coral-tpu-host",
"tail": " — requisito para utilizar placas Coral M.2 / PCIe num CT."
},
{
"label": "Adicionar GPU ao LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — acesso GPU, frequentemente combinado com Coral no Frigate."
}
]
}
}
@@ -0,0 +1,178 @@
{
"meta": {
"title": "Adicionar GPU a VM | Documentação ProxMenux",
"description": "Atribua uma GPU física a uma VM Proxmox. O ProxMenux verifica IOMMU, configura VFIO e dispositivos VM e deteta conflitos com outras VM ou LXC."
},
"header": {
"title": "Adicionar GPU a VM (passthrough)",
"description": "Deteta GPU Intel, AMD ou NVIDIA para acesso direto numa VM. Verifica IOMMU e dispositivos associados, configura VFIO e VM e aplica regras de compatibilidade. Verifique todos os dispositivos afetados.",
"section": "Hardware: GPUs e Coral-TPU"
},
"intro": {
"title": "O que faz",
"body": "Automatiza os passos do anfitrião e <code>hostpci</code> da <pveLink>documentação PCI passthrough Proxmox</pveLink>. Verifica atribuições a <em>outros</em> convidados e propõe soluções para conflitos. Não garante suporte para qualquer GPU, método de reset ou controlador convidado."
},
"who": {
"heading": "Para quem é isto?",
"body": "Para uma <strong>máquina virtual</strong> usar diretamente a GPU via VFIO. Enquanto estiver associada a VFIO, o controlador do anfitrião não a pode usar, mesmo com a VM parada. Para partilha com <em>LXC</em>, use <lxcLink>Adicionar GPU ao LXC</lxcLink>."
},
"prereqs": {
"title": "Antes de começar",
"gpu": "<strong>GPU compatível</strong> fisicamente instalada. O script deteta Intel, AMD e NVIDIA com <code>lspci</code>.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
"iommu": "<strong>Suporte IOMMU</strong> no hardware e ativação no firmware quando necessária (Intel VT-d ou AMD-Vi). Verifica o sistema e pode configurar Linux; não muda BIOS/UEFI nem prova que IOMMU inativo esteja desativado no firmware.",
"q35": "O assistente exige <strong>q35</strong> e recusa <code>i440fx</code>. O tipo de máquina é distinto do firmware BIOS/UEFI. Mudar o chipset de uma VM existente exige planeamento e não é automático.",
"q35Check": "qm config VMID | grep machine",
"moreGpus": "Prepare <strong>outra GPU ou acesso alternativo</strong> por SSH, IPMI ou série. Reservar a GPU principal pode retirar a imagem local. Em <em>NVIDIA</em>, uma placa fora do grupo IOMMU afetado pode ficar no anfitrião.",
"nvidiaInstalled": "Após <nvidiaLink>instalar NVIDIA no anfitrião</nvidiaLink>, as funções escolhidas ficam reservadas a <code>vfio-pci</code> em vez de <code>nvidia</code>. O módulo <code>nvidia</code> pode continuar disponível para <strong>outras</strong> placas fora do grupo IOMMU afetado. Verifique com <code>nvidia-smi</code>."
},
"pickOne": {
"title": "Atribuição exclusiva VM ou partilha LXC",
"body": "Um GPU ligado a <code>vfio-pci</code> para a passagem de VM não pode ser usado simultaneamente pelo hospedeiro ou por um LXC. Se você tiver duas GPUs, você pode dedicar uma a cada caminho. Se você tem apenas um, escolha:",
"vmItem": "<strong>VM:</strong> acesso direto e exclusivo para essa VM.",
"lxcItem": "<strong>LXC (<lxcLink>Adicionar GPU ao LXC</lxcLink>):</strong> partilha o dispositivo com anfitrião e outros contentores pelo controlador nativo."
},
"running": {
"heading": "Executar o instalador",
"body": "Abra o ProxMenux e escolha <strong>Hardware: GPU e Coral-TPU → Adicionar GPU a VM</strong>.",
"imageAlt": "Opção do menu para adicionar GPU a VM"
},
"howRuns": {
"heading": "Como funciona o script",
"body": "Deteção e seleção precedem as alterações principais, confirmadas num resumo final. Ativar IOMMU tem confirmação anterior e pode já alterar o arranque. A limpeza posterior de áudio pode também pedir uma escolha."
},
"walkthrough": {
"heading": "Procedimento passo a passo",
"detect": {
"title": "Detectar GPUs e verificar IOMMU",
"body": "Considera o IOMMU ativo apenas quando o kernel em execução tem <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> e existem grupos IOMMU. Se o parâmetro já estiver guardado para o próximo arranque, continua em modo de reinício pendente; caso contrário, um passo confirmado separadamente pode adicioná-lo com <code>iommu=pt</code>. A sua heurística de ficheiro de arranque utiliza <code>/etc/kernel/cmdline</code> quando aí existe uma marca de raiz ZFS como <code>root=ZFS=</code>; caso contrário, utiliza <code>/etc/default/grub</code>. Essa heurística não é prova do carregador de arranque real. O IOMMU recém-configurado entra em vigor após o reinício; verifique depois os grupos reais.",
"tipTitle": "Já configurou a pós-instalação?",
"tipBody": "Se o <postLink>suporte VFIO IOMMU</postLink> já estiver configurado e ativo no kernel, passa a verificação. Uma definição para o próximo arranque não prova que esteja ativo agora.",
"imageAlt": "Lista de GPUs detectadas com fornecedor e endereço PCI"
},
"preflight": {
"title": "Escolher GPU e executar verificações prévias",
"intro": "Uma vez que você escolher o GPU, o script executa uma série de verificações que podem cada bloco mais progresso:",
"items": [
"<strong>Proteção SR-IOV.</strong> Recusa VF e PF com VF ativas porque configura dispositivos completos, não SR-IOV. Configure SR-IOV separadamente em hardware compatível.",
"<strong>Uma só GPU.</strong> A consola local pode perder a imagem ao reservá-la para VFIO. Verifique antes o acesso SSH ou web de outro computador.",
"<strong>Política de reset AMD.</strong> Lê <code>/sys/bus/pci/devices/&lt;pci&gt;/reset_method</code>. APU ou dedicada sem FLR fica <em>bloqueada pela política do assistente</em>; subtipo desconhecido sem FLR exige confirmação. Não prova impossibilidade universal.",
"<strong>Estado D3cold.</strong> Bloqueia placas AMD que indicam <code>D3cold</code> pelo risco de falha na ativação. Verifique alimentação e firmware.",
"<strong>Análise do grupo IOMMU.</strong> Lê <code>/sys/kernel/iommu_groups/</code> e inclui no plano da VM <em>todos os membros exceto pontes</em>, possivelmente controladores de rede ou de armazenamento. Se o grupo contiver dispositivos de outro slot, o script lista-os antes do resumo; verifique se o anfitrião não precisa de nenhum. Se o IOMMU aguardar reinício, os grupos reais não estão disponíveis e o plano contém inicialmente só a função GPU selecionada; verifique o isolamento após o reinício."
],
"audioIntro": "<strong>Áudio associado.</strong> Dois casos consoante a localização do controlador:",
"audioDgpu": "<strong>GPU dedicada:</strong> o áudio HDMI ocupa frequentemente a função <code>.1</code> da mesma ranhura PCI e é incluído se detetado. Se o anfitrião o usava, perde acesso ao reservá-lo à VM.",
"audioIgpu": "<strong>Sem função áudio <code>.1</code>:</strong> pode estar noutro dispositivo como <code>00:1f.3</code>. Lista controladores e drivers como <code>snd_hda_intel</code>. Por predefinição <strong>nenhum</strong> é selecionado; escolha apenas os necessários."
},
"pickVm": {
"title": "Escolha a VM de destino",
"body": "Escolha a VM. Exige q35 e reutiliza entradas GPU existentes quando possível. BIOS/UEFI é uma definição separada, não um tipo de máquina. Não muda automaticamente o chipset nem o arranque do convidado instalado.",
"imageAlt": "Seleção de VM por nome, ID e estado"
},
"switchMode": {
"title": "Tratar atribuições existentes",
"intro": "O script verifica cada configuração do VM e cada configuração do LXC na máquina à procura do GPU que escolheu. Três resultados possíveis:",
"items": [
"<strong>GPU disponível.</strong> Continua sem remover atribuições.",
"<strong>Atribuída a outra VM.</strong> Pare primeiro a origem. Pode <em>manter as entradas e desativar o arranque automático</em> ou <em>removê-las mantendo o arranque automático</em>. Com <code>vfio-pci</code> já ativo e sem alterações necessárias no anfitrião, VM→VM pode evitar reiniciá-lo.",
"<strong>GPU usada por LXC.</strong> Nos contentores normais escolha <em>manter a configuração da GPU e desativar o arranque automático</em> ou <em>remover a configuração do dispositivo GPU, mantendo o arranque automático</em>. A remoção elimina as entradas <code>devN</code> e, em AMD/Intel, também as regras antigas <code>/dev/dri</code> <code>lxc.mount.entry</code> e <code>lxc.cgroup2.devices.allow</code>. Os contentores OCI conservam a configuração e são parados com o arranque automático desativado; remova a sua GPU através de OCI manager Apps. A deteção de conflitos é feita por família de dispositivos GPU e pode abranger outras placas dessa família."
],
"imageAlt": "Oferecendo diálogo para remover o GPU de um LXC antes de atribuí-lo ao VM",
"smartTitle": "Rever áudio associado ao remover a GPU",
"smartBody": "Depois pode propor uma lista de <strong>áudio possivelmente sem uso</strong> na VM origem. Desmarque o que ainda precisar. Por exemplo, pode manter <code>02:00.1</code> e propor remover <code>00:1f.3</code>. A lista determina as remoções adicionais, sem garantir todas as associações áudio/imagem."
},
"audioPick": {
"title": "Sem áudio .1, selecione os controladores necessários",
"body": "Apenas acontece para configurações de áudio dividido Intel iGPU e semelhantes. Uma lista de verificação mostra cada controlador de áudio PCI no host (excluindo qualquer já no grupo IOMMU do GPU), etiquetado com seu driver atual. Selecione os que você deseja — ou nenhum, se o VM não precisar de áudio do hardware do host.",
"imageAlt": "Diálogo de lista de verificação com cada controlador de áudio PCI da máquina (controlador BDF +) quando o GPU não tem áudio .1",
"warnTitle": "Não selecione áudio necessário ao anfitrião",
"warnBody": "Atribuir áudio pode retirar acesso ao anfitrião; o controlador não pode pertencer também a outra VM ativa. Não selecione áudio desnecessário e verifique as atribuições. O sinal da consola não vem necessariamente do áudio PCI."
},
"summary": {
"title": "Rever o resumo da confirmação",
"body": "Verifique o plano final do anfitrião e da VM e cancele se estiver incorreto. Mostra o grupo IOMMU e o número dos seus dispositivos; os membros de outro slot são listados no passo anterior. O cancelamento impede as alterações principais, mas não reverte uma alteração da configuração de arranque IOMMU confirmada separadamente antes.",
"imageAlt": "Resumo das alterações previstas no anfitrião e VM"
},
"hostApply": {
"title": "As alterações da máquina são aplicadas",
"intro": "A fase de aplicação altera anfitrião e VM. A limpeza áudio pode ainda pedir uma escolha. Pode modificar:",
"items": [
"<code>/etc/modules</code> — acrescenta <code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code> (mais <code>vfio_virqfd</code> em kernels &lt; 6.2).",
"<code>/etc/modprobe.d/vfio.conf</code> — AMD/Intel: <code>options vfio-pci ids=&lt;vendor:device,...&gt; disable_vga=1</code>. NVIDIA: <code>softdep nvidia pre: vfio-pci</code> (<code>_drm</code>/<code>_modeset</code>/<code>_uvm</code>); a associação efetiva é por BDF. AMD adiciona a ordem de carregamento <code>softdep</code>: <code>vfio-pci</code> → <code>radeon</code>/<code>amdgpu</code>.",
"Escreve <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> com <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. São definições do script, não requisitos universais Windows/macOS; interrupções inseguras reduzem a proteção do remapeamento.",
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas regras por fabricante podem afetar outras placas com o mesmo controlador. O módulo <code>nvidia</code> é bloqueado <strong>apenas</strong> por <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>todas</em> as NVIDIA do anfitrião estão reservadas a VFIO.",
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Apenas NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> no PCI ADD dos BDF registados, incluindo funções do grupo IOMMU afetado. Fora desses grupos pode manter-se <code>nvidia</code>. A política BDF não divide grupos IOMMU físicos.",
"<strong>Apenas AMD.</strong> Tenta extrair a ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT para <code>/usr/share/kvm/vbios_&lt;vendor&gt;_&lt;device&gt;.bin</code>. Se conseguir, a VM usa <code>romfile=</code>. Uma extração válida não garante a inicialização bem-sucedida da GPU.",
"<strong>Apenas NVIDIA.</strong> Para e desativa <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> só quando todas as NVIDIA estão reservadas a VFIO. Em uso misto conserva os serviços e <code>nvidia</code> para as placas nativas.",
"<code>update-initramfs -u -k all</code> — só é executado se alguma das acima referidas tiver realmente mudado."
]
},
"vmApply": {
"title": "A configuração do VM é aplicada através de qm set",
"body": "A configuração VM em <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> é atualizada via <code>qm set</code> (nunca por <code>sed</code>):",
"after1": "Adiciona <code>x-vga=1</code> para AMD e NVIDIA, <strong>não</strong> Intel. É a política do script, não prova de que todas as iGPU Intel não têm firmware ou que a opção causa sempre bloqueios.",
"after2": "Linhas adicionais de <code>hostpciN</code> são adicionadas se o grupo IOMMU do GPU contém outros dispositivos que você precisa passar juntos."
},
"reboot": {
"title": "Reinicie se a alteração do anfitrião exigir",
"body": "Siga o reinício pedido se mudar arranque ou controladores e verifique a associação ativa antes de iniciar a VM. Configuração guardada não prova ativação. VM→VM com VFIO correto pode evitar reiniciar o anfitrião.",
"imageAlt": "Tela de resumo mostrando o que foi alterado, seguido de um prompt de reinicialização"
}
},
"vendors": {
"heading": "Notas por fabricante",
"nvidiaHeading": "NVIDIA",
"nvidiaBody": "Mantém uma solução antiga para <em>Code 43</em>: <code>hidden=1</code>, ID <code>NV43FIX</code> em <code>args</code> e <code>kvm=off</code>. Não é requisito universal das GeForce atuais: NVIDIA ativou passthrough Windows em R465. O erro pode ter outras causas; verifique GPU e controlador.",
"nvidiaMultiHeading": "Suporte para multi-GPU NVIDIA",
"nvidiaMultiBody": "Uso misto NVIDIA <strong>por BDF</strong>. Regista funções <code>vfio-pci</code> por endereço, não só ID <code>vendor:device</code>. Fora dos grupos afetados pode conservar <code>nvidia</code>; verifique com <code>nvidia-smi</code>. Não isola duas placas do mesmo grupo.",
"amdHeading": "AMD",
"amdBody": "Algumas AMD falham ao repor após parar uma VM. O assistente verifica capacidades declaradas, não todos os ciclos reais. <vendorResetLink>vendor-reset</vendorResetLink> suporta uma lista limitada e exige kernel compatível e carregamento antecipado; não é instalado. <em>RadeonResetBugFix</em> no Windows também depende do hardware, sem garantia universal.",
"intelHeading": "Intel iGPU",
"intelBody": "Atribuição completa Intel iGPU e SR-IOV são distintos. O assistente reserva o dispositivo a uma VM sem <code>x-vga=1</code>. <sriovLink>i915-sriov-dkms</sriovLink> exige hardware/kernel suportados; «UHD 630+» não é regra de compatibilidade. Planeie acesso alternativo ao anfitrião."
},
"verification": {
"heading": "Verificação"
},
"troubleshoot": {
"heading": "Resolução de problemas",
"code43Title": "Código 43 no Windows (NVIDIA)",
"code43Body": "Code 43 não prova falha de ocultação. Consulte <code>qm config VMID | grep -E \"cpu|args\"</code> com VMID real, depois <code>hidden=1</code> e <code>hv_vendor_id=NV43FIX</code>. Verifique também controlador convidado, firmware e atribuição. Repetir pode terminar se já atribuída.",
"amdResetTitle": "O AMD GPU funciona uma vez, falha na reinicialização do VM",
"amdResetBody": "Falha de reset é uma causa possível. Reiniciar ou desligar e ligar pode ajudar temporariamente. Verifique compatibilidade e carregamento antecipado de <code>vendor-reset</code>; <code>softdep amdgpu pre: vendor-reset</code> só por si não garante carregar antes de VFIO. <em>RadeonResetBugFix</em> também exige GPU compatível.",
"stuckBootTitle": "O arranque emperrado do VM / GPU não foi detectado",
"stuckBootBody": "Consulte o endereço real com <code>lspci -nnk -s PCI_ADDRESS</code>; esperado <code>Kernel driver in use: vfio-pci</code>. Substitua PCI_ADDRESS. Se permanecer o controlador nativo, verifique a política de associação, não só <code>/etc/modprobe.d/blacklist.conf</code>; NVIDIA usa estado BDF. Leia <code>dmesg | grep vfio</code>. Após corrigir, execute <code>update-initramfs -u -k all</code> e siga o reinício previsto.",
"darkTitle": "O console da máquina fica escuro depois de reiniciar e eu não posso SSH em",
"darkBody": "Um ecrã preto não prova que o anfitrião esteja parado. Se SSH também falhar, verifique rede e controladores incluídos no grupo IOMMU. Recupere por IPMI, série ou ambiente de recuperação; reveja <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> e reverta só atribuições/regras relacionadas. Não elimine outras configurações.",
"logTitle": "Verificar o registo de instalação",
"logBody": "Cada execução escreve <code>/tmp/add_gpu_vm.log</code>. Anexe o registo ao pedir ajuda."
},
"revert": {
"heading": "Reverter alterações manualmente",
"intro": "Pare a VM e remova só as atribuições PCI relevantes em Hardware ou com o índice explícito abaixo. Isso não devolve a GPU ao controlador nativo. Use Alterar modo da GPU para essa transição e verifique os convidados afetados."
},
"related": {
"heading": "Relacionados",
"items": [
{
"label": "Instalar Drivers NVIDIA (Host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — prepara o controlador para placas mantidas no anfitrião; uma GPU em VFIO não o pode usar ao mesmo tempo."
},
{
"label": "Adicionar GPU ao LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — modelo alternativo: partilhar o GPU com vários contentores em vez de o dedicar a um VM."
},
{
"label": "Alterar modo da GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — alterna a mesma GPU entre partilha e atribuição exclusiva."
},
{
"label": "Comandos de passagem GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — lspci, verificação IOMMU, referência qm set hostpci."
}
]
}
}
@@ -0,0 +1,185 @@
{
"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 <code>dev&lt;N&gt;</code> a <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> para os nós <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> aplicáveis. Inicia o contentor, instala pacotes userspace da sua distribuição e, para Intel/AMD, alinha os grupos <code>video</code> e <code>render</code>. 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 <em>partilhar</em> a GPU entre anfitrião e contentores. Com <vmLink>atribuição completa a uma VM</vmLink>, 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": "<strong>GPU no anfitrião</strong> Intel, AMD ou NVIDIA, detetada via <code>lspci</code>.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
"vfio": "<strong>A GPU não deve estar associada a vfio-pci.</strong> Precisa do controlador nativo do anfitrião. Se atribuída a uma VM, o script propõe <switchLink>Alterar modo da GPU</switchLink>.",
"nvidia": "<strong>Para NVIDIA:</strong> instale primeiro o controlador no anfitrião. As bibliotecas do contentor têm de corresponder à versão. Use <nvidiaLink>Instalar controladores NVIDIA no anfitrião</nvidiaLink>.",
"nvidiaCheck": "nvidia-smi",
"container": "<strong>Um LXC existente.</strong> O script não o cria. Suporta ambos os modos; um contentor <strong>privilegiado</strong> 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 <code>dev&lt;N&gt;</code> para a configuração LXC e, em recipientes não privilegiados, alinha os GIDs <code>video</code> e <code>render</code> 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 <code>lxc.idmap</code>."
},
"running": {
"heading": "Executar o instalador",
"body": "Abra o ProxMenux e escolha <strong>Hardware: GPU e Coral-TPU → Adicionar GPU ao LXC</strong>.",
"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 <code>lspci</code>. Para NVIDIA verifica o módulo <code>nvidia</code> e <code>nvidia-smi</code>; a versão detetada determina o instalador <code>.run</code> 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 <nvidiaLink>Instalar controladores NVIDIA no anfitrião</nvidiaLink> 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": [
"<strong>Proteção SR-IOV.</strong> 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.",
"<strong>Associada a vfio-pci.</strong> O controlador nativo não pode criar <code>/dev/dri/*</code> ou <code>/dev/nvidia*</code>. Propõe <switchLink>Alterar modo da GPU</switchLink>; siga as indicações de reinício e volte depois.",
"<strong>Já configurada.</strong> 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 <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>. As entradas numeradas <code>dev&lt;N&gt;</code> incluem o GID do anfitrião de <code>video</code> ou <code>render</code>. As linhas bind <code>lxc.mount.entry</code> existentes para <code>/dev/dri</code> são substituídas por entradas <code>dev:</code>; 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 <code>pct exec</code>. Deteta a distribuição por <code>/etc/os-release</code> 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 <code>.run</code> no anfitrião → <code>pct push</code> → instala com <code>--no-kernel-modules --no-dkms</code>.",
"whyTitle": "Porque utiliza o instalador NVIDIA .run no Debian",
"whyBody": "Os pacotes podem não corresponder ao anfitrião. As bibliotecas <strong>têm de corresponder ao módulo carregado</strong> para NVML e <code>nvidia-smi</code>. Debian/glibc usa o <code>.run</code> dessa versão em cache, extrai e arquiva no anfitrião, transfere com <code>pct push</code> e instala com <code>--no-kernel-modules --no-dkms</code>. 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 <code>video</code> e <code>render</code>, usando 44/104 apenas como alternativa, e depois altera <code>/etc/group</code> no contentor para corresponderem; as execuções apenas com NVIDIA saltam este passo. Entradas como <code>video:44</code> e <code>render:104</code> 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 <em>Quick Sync</em>, depende da geração do GPU, dos codecs e da configuração da aplicação. O script partilha os que existirem de entre <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> e <code>renderD129</code>; 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 <code>i915</code>.",
"amdHeading": "AMD",
"amdBody": "AMD usa DRI para Mesa/VA-API. Se existir <code>/dev/kfd</code> 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 <code>/dev/nvidia*</code>. <strong>As versões do controlador têm de corresponder</strong> para <code>nvidia-smi</code>. Debian/glibc usa o <code>.run</code> 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 <code>nvidia-smi</code>. O <nvidiaLink>instalador NVIDIA do anfitrião</nvidiaLink> 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 <code>.run</code> 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 <code>render</code>, depois se o utilizador pertence a <code>render</code>. Se disponível, adicione-o a <code>render</code> com <code>usermod -aG render &lt;user&gt;</code>, 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 <code>intel-media-driver</code> para Intel recentes suportadas, <code>i965-va-driver</code> para antigas compatíveis e <code>mesa-va-drivers</code> para AMD. A mensagem só por si não prova que falte um pacote.",
"logTitle": "Registo de instalação",
"logBody": "Cada execução escreve <code>/tmp/add_gpu_lxc.log</code> 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."
}
]
}
}
@@ -0,0 +1,203 @@
{
"meta": {
"title": "Instalar Coral TPU no anfitrião | Documentação ProxMenux",
"description": "Instala componentes Coral no Proxmox VE conforme o hardware detetado: gasket/apex com DKMS para M.2 / Mini-PCIe e libedgetpu1-std para USB. Se detetar ambos, executa os dois procedimentos."
},
"header": {
"title": "Instalar Coral TPU no anfitrião",
"description": "Prepare o anfitrião Proxmox para Coral e partilha LXC. Deteta M.2 / Mini-PCIe, USB ou ambos e executa o procedimento adequado: módulos DKMS para PCIe e runtime Google Edge TPU para USB.",
"section": "Hardware: GPUs e Coral-TPU"
},
"intro": {
"title": "O que faz",
"body": "Um <strong>instalador único que deteta o hardware</strong>. PCIe utiliza <code>gasket</code> e <code>apex</code> com DKMS; compilações futuras exigem código e cabeçalhos compatíveis. USB utiliza <code>libedgetpu1-std</code>. Se detetar ambos, executa os dois processos. O runtime USB deve estar onde a aplicação executa; para uso apenas em LXC não é obrigatório no anfitrião."
},
"which": {
"heading": "Qual Coral eu tenho?",
"body": "Os modelos PCIe e USB têm formatos e requisitos diferentes. O script trata ambos; identifique o dispositivo antes de executar.",
"headerForm": "Factor de forma",
"headerDetect": "Detecção",
"headerInstall": "Tipo de instalação",
"headerReboot": "Reiniciar?",
"pcieForm": "M.2 / Mini-PCIe",
"pcieFormSub": "(placas M.2 com uma ou duas Edge TPU)",
"pcieDetect": "ID de fabricante PCI <code>1ac1</code>",
"pcieInstall": "Módulo do kernel (gasket + apex) via DKMS",
"pcieReboot": "Sim",
"usbForm": "Acelerador USB",
"usbFormSub": "(dongle de plástico pequeno)",
"usbDetect": "<code>1a6e:089a</code> USB (não programado) / <code>18d1:9302</code> (programado)",
"usbInstall": "Runtime <code>libedgetpu1-std</code> do repositório APT Google",
"usbReboot": "Não"
},
"prereqs": {
"title": "Antes de começar",
"coral": "<strong>Um Coral ligado</strong> (M.2, Mini-PCIe ou USB) para instalar. Sem hardware detetado pode limpar ou remover componentes existentes, mas não instala um novo percurso de hardware.",
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"internet": "<strong>Acesso à Internet</strong> no anfitrião para clonar o controlador PCIe do GitHub ou transferir <code>libedgetpu1-std</code> do repositório APT Google para USB.",
"headers": "<strong>Cabeçalhos do kernel disponíveis via APT</strong>: <code>proxmox-headers-$(uname -r)</code>. Necessários apenas para PCIe/M.2; o script instala-os.",
"reboot": "<strong>Planeie um reinício</strong> para PCIe. O script tenta carregar os módulos compilados; reiniciar permite verificar o carregamento automático."
},
"hostPrepTip": {
"title": "Isto só prepara a máquina",
"body": "Prepara o anfitrião para <em>aceder ao dispositivo</em>, sem configurar nem testar a aplicação. Para <em>usar</em> Coral numa aplicação compatível como Frigate, siga <lxcLink>Adicionar Coral TPU a um LXC</lxcLink>."
},
"running": {
"heading": "Executar o instalador",
"body": "Abra o ProxMenux no anfitrião e escolha <strong>Hardware: GPU e Coral-TPU → Instalar/atualizar Coral TPU no anfitrião</strong>.",
"imageAlt": "Opção do menu para instalar ou atualizar Coral TPU no anfitrião"
},
"howRuns": {
"heading": "Como funciona o script",
"body": "Deteta primeiro o hardware e prepara o plano adequado. A instalação exige confirmação."
},
"walkthrough": {
"heading": "Procedimento passo a passo",
"detect": {
"title": "Detecção de hardware",
"body": "Procura o fabricante <code>0x1ac1</code> em <code>/sys/bus/pci/devices/*/vendor</code> e usa <code>lsusb</code> para USB. Existem <strong>dois</strong> ID USB consoante o estado do firmware:",
"items": [
"<code>1a6e:089a</code> — Global Unichip, estado <em>não programado</em>, antes de o runtime carregar o firmware.",
"<code>18d1:9302</code> — Google, estado <em>programado</em>, após carregar o firmware."
],
"outro": "Sem Coral detetado nem instalação existente, apresenta um aviso e termina. Componentes existentes podem abrir o menu de limpeza ou remoção."
},
"prompt": {
"title": "Confirmação da instalação",
"body": "Antes da instalação, um diálogo apresenta dispositivos e componentes previstos. Cancelar ignora a instalação. A limpeza opcional de componentes antigos tem uma confirmação anterior independente.",
"imageAlt": "Resumo dos dispositivos Coral e passos de instalação"
},
"pcie": {
"title": "PCIe: módulos gasket e apex via DKMS",
"body": "Executado apenas se detetar um Coral PCIe/M.2. Compila os módulos para o kernel em execução no anfitrião.",
"items": [
"<strong>Limpeza.</strong> Qualquer pacote <code>gasket-dkms</code> existente é removido antes de recompilar; se estiver num estado incorreto, o script força a sua remoção e purga.",
"<strong>Dependências de compilação:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
],
"cloneIntro": "<strong>Clona o código do controlador.</strong> Prefere <feranickLink>feranick/gasket-driver</feranickLink>, recorrendo a <googleLink>google/gasket-driver</googleLink> se indisponível. A compilação depende da compatibilidade do kernel. Aplica estas correções ao código Google conforme a versão:",
"kernelPatches": [
"Para kernel 6.5 ou superior, substitui <code>no_llseek</code> por <code>noop_llseek</code> no código alternativo.",
"Kernel 6.13 ou superior: converte o argumento de <code>MODULE_IMPORT_NS(DMA_BUF)</code> numa cadeia literal."
],
"afterItems": [
"<strong>Copia o código para <code>/usr/src/gasket-1.0/</code>,</strong> gera <code>dkms.conf</code> e regista-o com <code>dkms add</code>.",
"<strong>Compila e instala:</strong> <code>dkms build</code> e depois <code>dkms install</code>. Se falhar, mostra as últimas 50 linhas de <code>make.log</code>, se disponível.",
"<strong>Cria o grupo <code>apex</code> e regras udev</strong> (<code>/etc/udev/rules.d/99-coral-apex.rules</code>) para atribuir o grupo a <code>/dev/apex_*</code>.",
"<strong>Tenta carregar os módulos:</strong> <code>modprobe gasket</code> e <code>modprobe apex</code>."
],
"imageAlt": "Compilação DKMS e carregamento dos módulos gasket/apex"
},
"usb": {
"title": "USB: runtime Edge TPU da Google",
"body": "Só é executado se um Acelerador USB foi detectado. Muito mais simples:",
"items": [
"<strong>Adiciona a chave GPG Google</strong> a <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
"<strong>Adiciona o repositório APT</strong> em <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>; <code>signed-by=</code> limita a verificação ao respetivo chaveiro. Usa sintaxe .list numa linha, não .sources deb822.",
"<strong>Instala <code>libedgetpu1-std</code></strong>, o runtime Edge TPU de desempenho padrão.",
"<strong>Recarrega o udev</strong> e aplica as regras do pacote ao dispositivo USB."
],
"stdTitle": "Porquê libedgetpu1-std em vez de libedgetpu1-max?",
"stdBody": "O pacote <code>max</code> ativa a frequência máxima suportada, aumentando desempenho, consumo e calor. Verifique a refrigeração e condições de utilização do acelerador. Os pacotes são mutuamente exclusivos; altere com <code>apt install libedgetpu1-max</code>."
},
"reboot": {
"title": "Reinício opcional após a instalação PCIe",
"body": "Após PCIe propõe reiniciar. Já tentou <code>modprobe</code>; verifique os módulos e <code>/dev/apex_0</code> com grupo <code>apex</code>. Um reinício planeado verifica o carregamento automático. Só USB não pede reinício do anfitrião.",
"imageAlt": "Resumo e proposta de reinício após instalação PCIe"
}
},
"legacyCleanup": {
"heading": "Limpar gasket-dkms antigo em anfitriões que só usam USB",
"intro": "Se <strong>não detetar Coral PCIe/M.2</strong> mas existir uma instalação antiga de <code>gasket-dkms</code>, propõe uma limpeza opcional com confirmação.",
"items": [
"Se detetar um Coral PCIe/M.2, utiliza o procedimento normal de recompilação DKMS e não propõe esta limpeza.",
"Purga <code>gasket-dkms</code>, remove registos DKMS e código antigo gasket e repara o estado pendente de <code>dpkg</code>/APT.",
"Mantém os pacotes USB <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code>, pelo que o Coral USB conserva o runtime.",
"O script verifica que o pacote legado desapareceu e que o gerenciamento de pacotes é saudável antes de relatar o sucesso."
],
"warningTitle": "Confirmar primeiro o hardware",
"warningBody": "Se esperava um Coral PCIe/M.2 e não aparece, cancele a limpeza e verifique placa, ranhura e firmware."
},
"reinstallUninstall": {
"heading": "Reinstalar ou desinstalar",
"intro": "Se detetar uma instalação PCIe com <code>gasket-dkms</code>, USB com <code>libedgetpu1-std</code>/<code>libedgetpu1-max</code> ou ambas, apresenta um menu de ações.",
"imageAlt": "Menu para reinstalar, atualizar ou desinstalar Coral",
"imageCaption": "O menu aparece se existir algum componente: registo DKMS gasket, pacote <code>libedgetpu1-*</code> ou dispositivos <code>/dev/apex_*</code>.",
"reinstallHeading": "Reinstalar / atualizar",
"reinstallBody": "Segue a instalação normal: recompila após mudar de kernel ou atualiza <code>libedgetpu1-*</code> a partir da Google. Limpa primeiro o estado DKMS anterior para evitar que uma instalação falhada bloqueie a compilação.",
"uninstallHeading": "Desinstalar — o que é removido",
"uninstallIntro": "Exige confirmação. As aplicações LXC que usam <code>/dev/apex_*</code> podem perder acesso durante a remoção ou após reiniciar. Procedimento:",
"uninstallItems": [
"Tenta descarregar <code>apex</code> e <code>gasket</code>; a utilização por processos ativos pode impedi-lo.",
"Remove a cada DKMS-registrado <code>gasket/&lt;version&gt;</code> entrada para que os módulos não voltem na próxima instalação do kernel.",
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code> e executa <code>apt-get autoremove --purge</code>.",
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e restaura o grupo predefinido de <code>60-gasket-dkms.rules</code> se ainda existir.",
"Verifica os membros suplementares de <code>apex</code>. <strong>Se a lista estiver vazia</strong>, tenta remover o grupo; caso contrário mantém <code>apex</code> e lista os membros. Não verifica completamente os utilizadores que o têm como grupo principal.",
"Remove a lista de repositórios <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, o antigo <code>coral-cloud.list</code> e chaveiros antigos chamados <code>coral-edgetpu-archive-keyring.gpg</code>. O chaveiro atual em <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> não é removido por esta sequência.",
"Propõe reiniciar <strong>apenas se PCIe estava instalado</strong> para descarregar os módulos ainda ativos. Remover apenas USB não exige reinício."
],
"lxcWarnTitle": "LXC contêineres com apex passagem",
"lxcWarnBody": "Remover os componentes do anfitrião pode interromper o acesso LXC. Planeie manutenção se aplicações compatíveis como Frigate dependem deste Coral."
},
"updates": {
"heading": "Notificações de atualização",
"intro": "O ProxMenux regista os componentes Coral e verifica PCIe/M.2 e USB separadamente. Se tiver ambos, cada variante usa a sua fonte de versões:",
"headerVariant": "Variante",
"headerTracked": "Versão registada",
"headerUpstream": "Fonte das versões",
"pcieVariant": "PCIe / M.2",
"pcieTracked": "Primeiro a etiqueta registada após instalar, depois a versão de <code>gasket-dkms</code> se o pacote estiver íntegro, ou a versão DKMS como alternativa. Esta não identifica o nível de correções do fork.",
"pcieUpstream": "Última etiqueta GitHub de <code>feranick/gasket-driver</code>; cache de sete dias e comparação do número de compilação.",
"usbVariant": "USB",
"usbTracked": "Versão apt <code>libedgetpu1-std</code> ou <code>libedgetpu1-max</code>",
"usbUpstream": "Candidato local ao <code>apt-cache policy</code> (Google Coral apt repo)",
"outro": "Se detetar uma versão nova, o Monitor envia <code>coral_driver_update_available</code> pelos canais ativados. O aviso remete para o instalador: escolha <strong>Reinstalar / atualizar</strong>.",
"antiTitle": "Sem avisos repetidos",
"antiBody": "Um aviso por variante quando muda a versão disponível. Não repete em cada verificação diária; volta a avisar quando surgir uma versão posterior.",
"rebootTitle": "Atualizações PCIe: planeie um reinício",
"rebootBody": "O módulo PCIe recompilado tem de ser carregado; um reinício planeado verifica também o carregamento automático. Atualizar a biblioteca USB não exige reiniciar o anfitrião, mas pode exigir reiniciar as aplicações que usavam a anterior."
},
"manual": {
"heading": "Procedimento manual equivalente",
"intro": "Estes comandos mostram os principais passos de cada procedimento para consulta ou execução manual.",
"pcieHeading": "PCIe / M.2 (gasket + apex via DKMS)",
"usbHeading": "USB (runtime libedgetpu)"
},
"verification": {
"heading": "Verificação",
"pcieHeading": "PCIe / M.2",
"usbHeading": "USB"
},
"troubleshoot": {
"heading": "Resolução de problemas",
"dkmsFailTitle": "Falha na compilação DKMS após atualizar o kernel",
"dkmsFailBody": "Cabeçalhos ausentes são uma causa possível. Verifique <code>proxmox-headers-$(uname -r)</code> com <code>dpkg -l proxmox-headers-$(uname -r)</code> e instale-os se necessário. Consulte o registo para incompatibilidades com o kernel. Repetir executa <code>cleanup_broken_gasket_dkms</code>, sem garantir compatibilidade com todos os kernels.",
"apexMissTitle": "Falta o /dev/apex_0 após reiniciar",
"apexMissBody": "Verifique a deteção PCIe e se o módulo corresponde ao kernel ativo. Tente <code>modprobe apex</code> e consulte <code>dmesg | grep -iE \"apex|gasket\"</code>. Falhas de compilação, carregamento ou configuração da ranhura/firmware podem impedir a criação do dispositivo.",
"lxcMissTitle": "O anfitrião vê /dev/apex_0, mas o LXC não",
"lxcMissBody": "Um nó visível não prova o funcionamento. Verifique acesso no anfitrião, montagem LXC, regras cgroup e permissões UID/GID. Consulte <lxcLink>Adicionar Coral TPU a um LXC</lxcLink>.",
"usbUnreachTitle": "Acelerador USB detectado, mas Frigate / TFLite não pode alcançá-lo",
"usbUnreachBody": "Verifique as regras de <code>libedgetpu1-std</code> e permissões com <code>ls -l /dev/bus/usb/*/*</code>. O utilizador/grupo mapeado da aplicação precisa de leitura e escrita; root como proprietário não é um erro por si só. Após alterações, execute <code>udevadm control --reload-rules &amp;&amp; udevadm trigger</code> e volte a ligar se necessário.",
"logTitle": "Registo de instalação",
"logBody": "Cada execução escreve <code>/tmp/coral_install.log</code>. Se DKMS falhar e o registo existir, acrescenta as últimas 50 linhas de <code>/var/lib/dkms/gasket/1.0/build/make.log</code>. Anexe o registo ao pedir ajuda."
},
"related": {
"heading": "Relacionados",
"items": [
{
"label": "Adicionar Coral TPU ao LXC",
"href": "/docs/hardware/coral-tpu-lxc",
"tail": " — disponibilizar o Coral do anfitrião a um contentor com uma aplicação compatível."
},
{
"label": "Instalar Drivers NVIDIA (Host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — a mesma ideia para as GPU NVIDIA."
},
{
"label": "ProxMenux Monitor — Página de hardware",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — o painel Coral mostra controlador, módulos, dispositivos e runtime, além da temperatura se um sensor compatível a disponibilizar."
}
]
}
}
@@ -0,0 +1,175 @@
{
"meta": {
"title": "Instalar NVIDIA no anfitrião | Documentação ProxMenux",
"description": "Instale controladores proprietários NVIDIA no Proxmox VE com ProxMenux: filtragem GPU, verificações de compilação e DKMS, persistência, patch NVENC opcional e atualização de bibliotecas LXC."
},
"header": {
"title": "Instalar controladores NVIDIA no anfitrião",
"description": "Instale NVIDIA no anfitrião Proxmox VE. Filtra ramos mantidos pelo ID PCI do GPU, verifica a compilação, utiliza DKMS, gere nouveau e instala persistência. Pode também atualizar bibliotecas dos LXC com acesso NVIDIA.",
"section": "Hardware: GPUs e Coral-TPU"
},
"intro": {
"title": "O que faz",
"body": "O ProxMenux deteta o GPU e oferece ramos NVIDIA mantidos que incluem o seu ID PCI. Bloqueia <code>nouveau</code>, descarrega o instalador oficial <code>.run</code>, utiliza DKMS, instala <code>nvidia-persistenced</code>, regras udev e o NVIDIA Container Toolkit, e oferece um patch NVENC opcional. As verificações de compilação avaliam o kernel em execução; uma compilação bem-sucedida não garante que todas as aplicações funcionem. Aos LXC NVIDIA existentes é oferecida uma atualização das bibliotecas userspace, com versão correspondente exceto em Arch."
},
"who": {
"heading": "Para quem é isto?",
"body": "Para vídeo ou cálculo acelerado com Plex, Jellyfin, Frigate, Immich ou Stable Diffusion <strong>em LXC</strong>, instale primeiro NVIDIA no <em>anfitrião</em> Proxmox. A atribuição direta a uma <strong>VM</strong> utiliza o procedimento VFIO separado."
},
"prereqs": {
"title": "Antes de começar",
"gpu": "<strong>Um GPU NVIDIA</strong> instalado no anfitrião. É detetado automaticamente; esta opção não gere AMD nem Intel.",
"gpuCheck": "lspci | grep -i nvidia",
"notVm": "O GPU <strong>não deve estar reservado para VM através de VFIO</strong>. O instalador recusa esse caso para não interferir na atribuição.",
"internet": "Acesso à Internet no host. O instalador baixa o driver de <code>download.nvidia.com</code> e, opcionalmente, clona <code>nvidia-persistenced</code> e <code>nvidia-patch</code> de GitHub.",
"space": "Reserve espaço em <code>/opt/nvidia</code> para <code>.run</code> e RAM para compilar. O percurso LXC não-Arch verifica 1500 MiB livres e pode pedir aumento temporário para 2048 MiB de RAM se inferior, restaurando depois o limite anterior. Preveja o reinício do anfitrião."
},
"vmWarn": {
"title": "GPU reservado para VM? Pare aqui",
"body": "Se algum dispositivo NVIDIA estiver associado a <code>vfio-pci</code>, o instalador sai mesmo com a VM parada. Estar reservado não implica utilização ativa. Planeie o regresso ao controlador do anfitrião e remova atribuições VM/VFIO antigas antes de reiniciar e instalar."
},
"running": {
"heading": "Executar o instalador",
"body": "Abra <strong>Hardware Graphics → NVIDIA GPU Driver Installer</strong> no ProxMenux. O menu depende de existir um controlador ativo.",
"imageAlt": "Menu de hardware com o instalador NVIDIA destacado"
},
"howRuns": {
"heading": "Como funciona o script",
"body": "Deteta dispositivos, escolhe uma versão e instala. Uma limpeza VFIO com confirmação separada pode ocorrer antes do resumo. Preparação de repositórios/cabeçalhos e descarga precedem a substituição do controlador; nem todas as alterações começam após uma única confirmação final."
},
"walkthrough": {
"detect": {
"title": "Detecção e visão geral do GPU",
"body1": "Apresenta controladores de vídeo NVIDIA, estado do controlador ou <em>«Nenhum controlador NVIDIA instalado»</em> e os LXC configurados para NVIDIA com a versão interna.",
"body2": "Reveja GPU e versões do anfitrião/contentores. Cancele no resumo se a seleção for inesperada; uma limpeza VFIO confirmada anteriormente já terá sido aplicada.",
"imageAlt": "Resumo pré-instalação: GPU, controlador e LXC NVIDIA"
},
"version": {
"title": "Escolha a versão do controlador",
"body1": "Filtra versões de <code>nvidia.com</code> que <strong>incluem o ID PCI do GPU na tabela de chips suportados</strong> e exclui versões beta/desenvolvimento por heurísticas. <em>&lt;versão&gt; — Recomendada</em> prioriza a última do ramo instalado, depois Production Branch e, por fim, o número de versão compatível mais elevado.",
"body2": "Se o controlador estiver registado com patch keylase, o seletor limita as versões à tabela NVENC. <em>Reinstalar / atualizar</em> mantém confirmações e opção de patch; verifique o resultado final.",
"whyTitle": "Como a compatibilidade do kernel é validada",
"whyBody": "Filtra por ramos mantidos e ID PCI, sem matriz fixa de kernel/controlador. Uma compilação prévia verifica o kernel atual. Uma falha confirmada volta ao seletor; se a verificação não estiver disponível, pode avisar e continuar. Instalação final e testes de funcionamento continuam necessários.",
"imageAlt": "Seletor de ramos compatíveis com GPU e recomendação no topo"
},
"uninstall": {
"title": "Remover o controlador anterior ao reinstalar",
"body": "Após descarregar e verificar o instalador escolhido, remove o controlador anterior. Para serviços NVIDIA, descarrega módulos, remove entradas DKMS e purga <code>nvidia-*</code> / <code>libnvidia-*</code> / <code>cuda-*</code>. Aplica-se também à reinstalação confirmada da mesma versão."
},
"prepare": {
"title": "Preparar o sistema",
"body": "Durante a preparação, o script:",
"items": [
"Verifica repositórios antes de remover ou instalar componentes. Sem subscrição e apenas com Enterprise, pede autorização para mudar para no-subscription; a recusa para a instalação.",
"Instala <code>pve-headers-$(uname -r)</code> (ou <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> e <code>dkms</code>.",
"Cria o ficheiro gerido pelo ProxMenux <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> com <code>blacklist nouveau</code> e <code>options nouveau modeset=0</code>. Regista a eventual linha adicionada a <code>blacklist.conf</code> e tenta descarregar nouveau.",
"Escreve <code>/etc/modules-load.d/nvidia-vfio.conf</code> com <code>nvidia</code> e <code>nvidia_uvm</code> para que os módulos carreguem precocemente no arranque."
]
},
"download": {
"title": "Baixe e execute o instalador NVIDIA",
"body": "Descarrega <code>NVIDIA-Linux-x86_64-&lt;version&gt;.run</code> para <code>/opt/nvidia</code> e verifica tamanho e tipo executável. São verificações de formato, não de assinatura criptográfica. Regista DKMS para recompilar com alterações do kernel; código e kernel devem continuar compatíveis.",
"imageAlt": "Progresso de descarga e compilação DKMS do instalador NVIDIA"
},
"persist": {
"title": "Serviço de persistência e regras de udev",
"body": "Instala <persistLink>nvidia-persistenced</persistLink> e escreve <code>/etc/udev/rules.d/70-nvidia.rules</code> para criar <code>/dev/nvidia*</code> no arranque. Evita que um LXC procure o GPU antes de os dispositivos estarem disponíveis."
},
"nvenc": {
"title": "Opcional: aplicar patch NVENC",
"body": "Os limites de sessões NVENC dependem do GPU e controlador. <patchLink>keylase/nvidia-patch</patchLink> pode remover o limite do controlador nas versões suportadas. Escolha <strong>Sim</strong> se precisar desta alteração de codificação e a versão for compatível. Não acelera descodificação nem elimina limites físicos.",
"supportTitle": "Verificar compatibilidade do patch",
"supportBody": "Procure a versão exata na <patchTableLink>tabela de patches</patchTableLink>. Se faltar, use o controlador sem patch ou outra versão mantida compatível com GPU, kernel e patch; a proximidade na lista não basta."
},
"propagate": {
"title": "Opcional: atualizar bibliotecas NVIDIA em LXC",
"body1": "Propõe atualizar bibliotecas do controlador nos LXC detetados. Estas e o módulo do anfitrião <strong>devem ter versões correspondentes</strong>; caso contrário <code>nvidia-smi</code> pode indicar «version mismatch».",
"body2": "Debian / Ubuntu e outros contentores glibc recebem o instalador <code>.run</code> extraído com <code>--no-kernel-modules --no-dkms --no-install-compat32-libs</code>; a RAM pode subir temporariamente para 2 GiB e ser depois restaurada. <strong>Arch, Manjaro e EndeavourOS</strong> utilizam <code>pacman -Syu nvidia-utils</code> dos repositórios, sem fixar a versão do anfitrião: verifique o resultado. <strong>Alpine</strong> recebe o conteúdo <code>.run</code> extraído por <code>pct push</code>, instala <code>gcompat</code> e <code>binutils</code> com <code>apk</code> e cria ligações SONAME com <code>readelf</code>. Verifique o funcionamento; a compatibilidade não garante todas as bibliotecas sobre musl.",
"imageAlt": "Diálogo com LXC NVIDIA e versões para confirmar a atualização"
},
"reboot": {
"title": "Reiniciar",
"body": "Após a instalação do controlador, o script regenera <code>initramfs</code> para todos os kernels; o seu último passo oferece reiniciar. <strong>Preveja esse reinício</strong> para verificar a configuração persistente dos módulos e do nouveau num novo arranque, mesmo que o novo controlador já responda antes do reinício."
}
},
"reinstallUninstall": {
"heading": "Reinstalar ou desinstalar",
"intro": "Se <code>nvidia</code> estiver carregado e <code>nvidia-smi</code> devolver uma versão, apresenta um menu de ações. O critério deteta um controlador ativo; pode haver ficheiros instalados sem o módulo carregado.",
"imageAlt": "NVIDIA menu de ação oferecido quando um driver já está instalado — duas opções: Reinstalar / atualizar driver, ou desinstalar o driver NVIDIA completamente",
"imageCaption": "O menu de ação só aparece quando um driver NVIDIA está atualmente ativo na máquina.",
"reinstallHeading": "Reinstalar / atualizar",
"reinstallBody": "Escolhe versão, prepara repositórios/cabeçalhos, descarrega e verifica a compilação antes de substituir o controlador. Permite atualizar no ramo mantido ou escolher outro suportado. Depois reapresenta as opções de bibliotecas LXC e patch NVENC.",
"uninstallHeading": "Desinstalar — o que é removido",
"uninstallIntro": "Após confirmação Sim/Não, remove os seguintes componentes:",
"uninstallItems": [
"Para e desativa <code>nvidia-persistenced</code> e <code>nvidia-powerd</code>, tenta descarregar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code> e depois executa <code>nvidia-uninstall --silent</code> para a instalação <code>.run</code>. Afeta as cargas de trabalho LXC dependentes de NVIDIA; clientes ativos podem impedir a descarga.",
"Executa <code>apt purge</code> em <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, remove a árvore fonte DKMS e as pastas <code>nvidia-persistenced</code> e <code>nvidia-patch</code> em <code>/opt/nvidia</code>.",
"Remove a configuração de carregamento <code>/etc/modules-load.d/nvidia-vfio.conf</code> e regras nouveau geridas pelo ProxMenux. Migra e remove também os antigos ficheiros ProxMenux com as duas linhas conhecidas; preserva ficheiros modificados ou não relacionados do administrador.",
"Remove <code>/etc/udev/rules.d/70-nvidia.rules</code> e marca NVENC como <em>removed</em> no registo de instalações geridas; não existe ficheiro de estado separado.",
"Regenera <code>initramfs</code> para todos os kernels, executa <code>proxmox-boot-tool refresh</code> conforme o arranque e pede reinício."
],
"lxcWarnTitle": "LXC com acesso NVIDIA",
"lxcWarnBody": "Remover o controlador do anfitrião interrompe aplicações LXC NVIDIA mesmo mantendo as bibliotecas instaladas. Agende manutenção para Frigate, Plex, Jellyfin, Ollama e outras aplicações GPU."
},
"updates": {
"heading": "Notificações de atualizações",
"body": "O controlador NVIDIA é acompanhado no registo de instalações geridas. No arranque e a cada 24 horas, o Monitor compara as versões em <code>download.nvidia.com/XFree86/Linux-x86_64/</code> com a indicada por <code>nvidia-smi</code>. Notifica apenas novas versões de manutenção do ramo instalado.",
"kindsHeading": "Mensagem de atualização",
"kindsItems": [
"<strong>Manutenção no mesmo ramo.</strong> Exemplo: 580.65.06 instalada → 580.105.08 disponível. O Monitor não deduz compatibilidade do kernel entre ramos."
],
"antiTitle": "Evitar notificações repetidas",
"antiBody": "Uma notificação por nova versão, não em cada verificação diária. Sem versão mais recente no ramo instalado, não notifica.",
"applyTitle": "Aplicando a atualização",
"applyBody": "O Monitor avisa sem instalar automaticamente. Abra o instalador, escolha <strong>Reinstalar / atualizar</strong> e uma versão suportada, e conclua compilação e instalação. Preveja o reinício proposto e verifique depois anfitrião e bibliotecas LXC."
},
"verify": {
"heading": "Verificando a instalação",
"intro": "Após reiniciar o anfitrião, entre por SSH ou pela consola Proxmox e execute:",
"after": "Confirme GPU e versão esperada. Podem existir processos se serviços do anfitrião ou contentores iniciados automaticamente utilizarem o GPU. Depois verifique a persistência:",
"imageAlt": "Saída de nvidia-smi no anfitrião com GPU detetado e versão do controlador instalada"
},
"troubleshoot": {
"heading": "Resolução de problemas",
"smiFailTitle": "nvidia-smi apresenta «NVIDIA-SMI has failed»",
"smiFailBody": "Causas possíveis: <strong>nouveau</strong>, <strong>cabeçalhos ausentes ou incompatíveis</strong>, código do controlador incompatível ou outros erros de carregamento. Veja <code>lsmod | grep nouveau</code>, <code>dmesg | grep -i nvidia</code> e registos do instalador/DKMS. Se precisar de corrigir nouveau, verifique <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> antes de <code>update-initramfs -u -k all</code> e reinicie. Nem toda a falha de compilação é de cabeçalhos.",
"lxcMissTitle": "O LXC não vê o GPU após a atualização do anfitrião",
"lxcMissBody": "Antes de reinstalar, verifique dispositivos do anfitrião, permissões LXC e versão das bibliotecas. Um conflito pode exigir o controlador de utilizador correspondente pelo método suportado da distribuição; em glibc usa <code>--no-kernel-modules</code>. Reinstalar bibliotecas não corrige montagens ou permissões ausentes.",
"logTitle": "Verificar o registo de instalação",
"logBody": "A instalação escreve em <code>/tmp/nvidia_install.log</code>. Em caso de falha, reveja descarga, compilação DKMS e serviços. Anexe o registo ao comunicar o problema no GitHub."
},
"manualSteps": {
"heading": "Procurando os passos manuais?",
"body": "Consulte <guideLink>Guias → NVIDIA</guideLink> para os passos manuais, incluindo <code>wget</code> e <code>./NVIDIA-Linux-...run</code>. Explica componentes sem reproduzir exatamente o instalador. O processo mantido do ProxMenux oferece filtragem GPU, verificação de compilação, atualizações LXC e controlos VFIO."
},
"related": {
"heading": "Relacionados",
"items": [
{
"label": "Adicionar GPU a VM (passagem direta)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — atribuir NVIDIA diretamente a uma VM através de VFIO."
},
{
"label": "Adicionar GPU ao LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — partilhar NVIDIA com um ou vários contentores."
},
{
"label": "Mudar modo GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
"tail": " — alternar entre passagem direta para VM e partilha LXC."
},
{
"label": "ProxMenux Monitor — Página de hardware",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — janela GPU que abre este instalador e mostra monitorização em tempo real."
},
{
"label": "Comandos de passagem direta GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — referência lspci / dmesg / IOMMU / nvidia-smi."
}
]
}
}
@@ -0,0 +1,172 @@
{
"meta": {
"title": "Mudar modo GPU (VM ↔ LXC) | Documentação ProxMenux",
"description": "Mude um GPU entre VFIO para VM e controlador nativo para LXC. O ProxMenux deteta o controlador, pergunta como gerir os convidados afetados, remove áudio associado e regenera initramfs se a configuração do anfitrião mudar."
},
"header": {
"title": "Mudar modo GPU (VM ↔ LXC)",
"description": "Mude um GPU atribuído entre passagem direta para VM e partilha LXC. O ProxMenux gere controlador, VFIO, módulos e initramfs e pergunta como tratar os convidados afetados. Reveja as opções e verifique o resultado após reiniciar.",
"section": "Hardware: GPUs e Coral-TPU"
},
"intro": {
"title": "O que faz",
"body": "Com <code>vfio-pci</code>, o GPU fica reservado para uma VM. Com o controlador nativo <em>(i915 / amdgpu / nvidia)</em>, anfitrião e LXC podem partilhá-lo. <strong>Mudar modo GPU</strong> gere <code>vfio.conf</code>, módulos bloqueados e referências dos convidados, avisando de atribuições pendentes."
},
"graphics": {
"lxcTitle": "Pronto para contêineres LXC",
"lxcDesc": "Controlador nativo ativo",
"vmTitle": "Pronto para passagem de VM",
"vmDesc": "Controlador VFIO-PCI ativo"
},
"when": {
"heading": "Quando devo usar isto?",
"intro": "Utilize se o GPU <strong>já está atribuído</strong> e pretende mudar a utilização:",
"headerSituation": "Situação",
"headerUse": "Usar esta página?",
"rows": [
{
"situation": "GPU livre, nunca atribuído: utilizá-lo numa VM.",
"useRich": "Não — utilize <vmLink>Adicionar GPU a VM</vmLink>"
},
{
"situation": "GPU livre, nunca atribuído: utilizá-lo num LXC.",
"useRich": "Não — utilize <lxcLink>Adicionar GPU a LXC</lxcLink>"
},
{
"situationRich": "O GPU está atribuído a uma VM por <code>vfio-pci</code>; quero utilizá-lo num LXC.",
"useRich": "<strong>Sim — esta página.</strong>"
},
{
"situation": "O GPU é partilhado com um LXC; quero dedicá-lo a uma VM.",
"useRich": "<strong>Sim — esta página.</strong>"
},
{
"situation": "Quero remover todas as atribuições deste GPU.",
"use": "O modo LXC devolve o GPU ao controlador do anfitrião; a política de conflitos da VM pode remover as entradas hostpci, mas as entradas de dispositivo LXC têm de ser removidas separadamente. O GPU continua associado a um controlador."
}
]
},
"prereqs": {
"title": "Antes de começar",
"assigned": "<strong>Um GPU já atribuído</strong> a uma VM por VFIO ou a um LXC. Para a primeira atribuição utilize Adicionar GPU a VM / LXC.",
"iommu": "<strong>IOMMU deve estar ativo no anfitrião</strong> ao passar <em>para</em> modo VM. Tanto as definições do firmware como o suporte do kernel são importantes. Se faltar <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> no kernel em execução, o script adiciona-o com <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marca de raiz ZFS) ou a <code>/etc/default/grub</code> e depois executa <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Reveja eventuais avisos e reinicie quando solicitado.",
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
"reboot": "<strong>Preveja um reinício.</strong> Alterações persistentes ao controlador e ao arranque podem exigir regenerar initramfs e reiniciar. O script apresenta a opção no final.",
"knowList": "<strong>Identifique as VM e LXC que utilizam o GPU.</strong> O script deteta referências e pergunta como tratar cada convidado; conhecer a lista facilita a revisão."
},
"blocklist": {
"title": "Nem todas as GPUs são seguras para passar para um VM",
"body": "O script bloqueia o modo VM para os ID de dispositivo <code>8086:5a84</code> e <code>8086:5a85</code>, segundo a sua política de compatibilidade. Se um GPU selecionado corresponder, interrompe a mudança para modo VM e volta à seleção do GPU, ou sai quando é o único GPU. Esta lista de bloqueio não impede passar <em>para</em> modo LXC; outras verificações podem continuar a aplicar-se."
},
"running": {
"heading": "Executar o script",
"body": "Abra <strong>Hardware: GPU e Coral-TPU → Mudar modo GPU (VM ↔ LXC)</strong> no ProxMenux.",
"imageAlt": "Opção Mudar modo GPU (VM ↔ LXC) no menu de hardware"
},
"howRuns": {
"heading": "Como funciona o script",
"body": "A escolha do GPU e da direção precede a mudança principal. Uma limpeza VFIO separada pode pedir confirmação antes; os convidados afetados têm os seus próprios diálogos. Leia cada confirmação: não existe uma única validação final para todas as alterações."
},
"walkthrough": {
"heading": "Procedimento passo a passo",
"detect": {
"title": "Detetar GPU e controlador atual",
"body": "Examina os controladores VGA, 3D e Display do anfitrião e consulta <code>/sys/bus/pci/devices/*/driver</code>. Apresenta nome, endereço PCI e controlador atual de cada GPU para identificar o modo.",
"imageAlt": "Lista de verificação GPU que mostra cada GPU detectado com seu driver atual (vfio-pci / nvidia / amdgpu / i915) e slot PCI"
},
"pickGpu": {
"title": "Escolher os GPU a mudar",
"body": "Um único GPU é selecionado automaticamente. Com vários, pode marcar mais de um, desde que estejam no <em>mesmo</em> modo. Se misturar modos, terá de reduzir a seleção.",
"tipTitle": "Mudar vários GPU de uma vez",
"tipBody": "Exemplo: passar três NVIDIA para modo VM e depois devolver o iGPU ao LXC. Duas execuções, cada uma com destino comum, em vez de mudar cada placa separadamente."
},
"direction": {
"title": "Rever a direcção proposta",
"intro": "Com base no modo atual, o script propõe o oposto como alvo:",
"items": [
"<strong>VM → LXC:</strong> remove a associação a <code>vfio-pci</code> para que o controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa utilizar o GPU. Para NVIDIA remove as entradas BDF correspondentes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para o próximo arranque.",
"<strong>LXC → VM:</strong> prepara a associação a <code>vfio-pci</code>. AMD / Intel bloqueiam o controlador nativo e utilizam <code>options vfio-pci ids=…</code>. Em NVIDIA, <code>nvidia</code> só é bloqueado globalmente quando todas as GPU NVIDIA do anfitrião estão em VFIO; caso contrário, regras por BDF aplicam <code>driver_override=vfio-pci</code> aos dispositivos dos grupos IOMMU afetados, e as GPU NVIDIA fora desses grupos mantêm <code>nvidia</code>. Reveja todos os membros do grupo antes de mudar."
],
"outro": "Confirme a direção ou cancele."
},
"conflict": {
"title": "Opções para cada VM ou LXC afetado",
"body": "Verifica <code>/etc/pve/lxc/*.conf</code> por família do controlador GPU e <code>/etc/pve/qemu-server/*.conf</code> por atribuições PCI. A deteção LXC não identifica cada placa por BDF exato. Reveja os convidados detetados e escolha como tratar cada um:",
"headerPolicy": "Política",
"headerEffect": "Efeito",
"headerWhen": "Quando escolher",
"keepPolicy": "Manter configuração e desativar arranque automático",
"keepEffect": "<code>pct set CTID -onboot 0</code> ou <code>qm set VMID -onboot 0</code>. Mantém as entradas GPU.",
"keepWhen": "Se pretende reutilizar o convidado quando o GPU voltar ao modo anterior. Escolha predefinida conservadora.",
"removePolicy": "Remover o GPU da configuração",
"removeEffect": "Remove as entradas <code>hostpci</code> / <code>dev</code> identificadas e referências antigas suportadas.",
"removeWhen": "Se o convidado deve funcionar sem GPU. Verifique primeiro a aplicação: a alternativa por CPU depende dela e remover o dispositivo não a reconfigura automaticamente.",
"imageAlt": "Diálogo para escolher como tratar cada VM ou LXC afetado"
},
"audio": {
"title": "Remover áudio associado ao sair do modo VM",
"body1": "Muitos GPU NVIDIA / AMD expõem áudio HDMI na função <code>.1</code> do mesmo slot; pode haver outros dispositivos áudio atribuídos. Remover o GPU pode deixar entradas áudio <code>hostpci</code> obsoletas. Reveja as atribuições a manter.",
"body2": "Identifica os endereços BDF áudio e apresenta uma lista para escolher o que remover. Elimina também os ID vendor:device de <code>/etc/modprobe.d/vfio.conf</code>, apenas se nenhuma outra VM os utilizar."
},
"apply": {
"title": "Aplicar alterações ao anfitrião e convidados",
"body": "Uma vez que você confirma, o script escreve as mudanças no lado do host — <code>vfio.conf</code>, lista negra, módulos e (para NVIDIA) a regra udev per-BDF em <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> mais o estado BDF em <code>/etc/proxmenux/vfio-bind.bdfs</code>. Aplica igualmente a política de conflitos escolhida a cada VM/LXC afectado. Se a configuração do host realmente mudou, ele executa <code>update-initramfs -u -k all</code> seguido por <code>proxmox-boot-tool refresh</code>; caso contrário ambos são ignorados."
},
"reboot": {
"title": "Reiniciar",
"body": "Reinicie o anfitrião para aplicar a nova associação persistente. Pode adiar, mas verifique o controlador ativo antes de iniciar o convidado de destino: até reiniciar pode manter-se o anterior.",
"imageAlt": "Diálogo de resumo que lista o que mudou, seguido pelo prompt de reinicialização"
}
},
"manual": {
"heading": "Inspeção manual",
"intro": "Antes de <strong>VM → LXC</strong>, verifique o controlador e a política BDF. Este exemplo NVIDIA utiliza <code>10de:2204</code>; adapte-o à sua placa. Os comandos consultam o estado; o script também gere convidados e membros do grupo IOMMU.",
"lxcToVm": "Antes de <strong>LXC → VM</strong>, consulte o endereço PCI e o grupo IOMMU. Substitua o endereço de exemplo e reveja todos os membros antes de atribuir dispositivos.",
"oneVmTitle": "Um GPU físico atribuído por VFIO só pode ser utilizado por uma VM de cada vez",
"oneVmBody": "Colocar várias entradas <code>hostpci</code> com o mesmo slot PCI em duas VMs é uma configuração válida, mas apenas uma das VMs pode começar com o GPU — a segunda falha. O passo da política de conflitos ProxMenux é exatamente evitar esta armadilha."
},
"verification": {
"heading": "Verificação após reiniciar"
},
"troubleshoot": {
"heading": "Resolução de problemas",
"stillVfioTitle": "A GPU continua a mostrar vfio-pci após a mudança para o modo LXC",
"stillVfioBody": "Um módulo VFIO carregado não prova qual controlador utiliza este GPU. Verifique a associação, a conclusão de <code>update-initramfs</code> e o reinício. <code>lsmod | grep vfio</code> só lista módulos. Para AMD / Intel veja <code>vfio.conf</code>; para NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> e <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Corrija regras antigas antes de <code>update-initramfs -u -k all</code> e reinicie.",
"vmFailTitle": "Uma VM não inicia após passar o GPU para LXC",
"vmFailBody": "Verifique referências <code>hostpci</code> obsoletas. A opção <em>Remover GPU da configuração</em> pode eliminá-las durante a mudança pretendida. Antes de repetir o script, reveja a direção para não inverter o modo por engano. Em alternativa remova a atribuição no Proxmox com a VM parada.",
"smiFailTitle": "nvidia-smi apresenta «Driver/library version mismatch» ao voltar a LXC",
"smiFailBody": "Compare o módulo NVIDIA carregado com as bibliotecas instaladas, também nos LXC. Alinhe as versões: reiniciar carrega o módulo instalado, mas não corrige pacotes incompatíveis. Recarregar com <code>modprobe -r nvidia</code> e <code>modprobe nvidia</code> exige parar os clientes GPU e pode falhar com módulos dependentes em utilização.",
"logTitle": "Registo de execução",
"logBody": "Cada execução escreve em <code>/tmp/proxmenux_gpu_switch_mode.log</code> no anfitrião. Anexe o registo ao pedir ajuda no GitHub."
},
"related": {
"heading": "Relacionados",
"items": [
{
"label": "Adicionar GPU a VM (passagem direta)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — configuração inicial do modo VM."
},
{
"label": "Adicionar GPU ao LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
"tail": " — configuração inicial do modo LXC."
},
{
"label": "Instalar Drivers NVIDIA (Host)",
"href": "/docs/hardware/nvidia-host",
"tail": " — exigido para o modo LXC em GPUs NVIDIA."
},
{
"label": "ProxMenux Monitor — Página de hardware",
"href": "/docs/monitor/dashboard/hardware",
"tail": " — secção Placas gráficas, com o modo atual e o comando para o mudar."
},
{
"label": "Comandos de passagem direta GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — referência rápida de comandos."
}
]
}
}