{ "meta": { "title": "Aggiungi GPU a LXC | Documentazione ProxMenux", "description": "Condividi GPU Intel, AMD o NVIDIA con LXC. ProxMenux configura dispositivi, gruppi e librerie secondo la distribuzione; l’app deve supportare e configurare l’accelerazione." }, "header": { "title": "Aggiungi GPU a LXC", "description": "Condivide l’accesso GPU con LXC tramite i dispositivi dell’host. Il driver resta sull’host; le app richiedono librerie compatibili e una configurazione propria.", "section": "Hardware: GPU e Coral-TPU" }, "intro": { "title": "Cosa fa", "body": "Aggiunge voci dev<N> a /etc/pve/lxc/<ctid>.conf per i nodi /dev/dri/*, /dev/kfd o /dev/nvidia* pertinenti. Avvia il container, installa i pacchetti userspace della sua distribuzione e, per Intel/AMD, allinea i gruppi video e render. L’accelerazione delle applicazioni richiede comunque hardware e librerie compatibili e configurazione dell’app." }, "compare": { "heading": "Condivisione LXC e passthrough VM a confronto", "intro": "LXC condivide il kernel e può condividere la GPU fra host e container. Con il passthrough completo a una VM, il dispositivo è riservato alla VM e non è disponibile al driver dell’host.", "headerFeature": "Caratteristica", "headerLxc": "LXC (questa pagina)", "headerVm": "VM", "rows": [ { "feature": "L’host può continuare a usare la GPU?", "lxc": "Sì", "vm": "No — esclusiva della VM" }, { "feature": "Più container possono condividere una GPU?", "lxc": "Sì", "vm": "No" }, { "feature": "Richiede IOMMU / VFIO sull'host?", "lxc": "No", "vm": "Sì" }, { "feature": "Riavvio richiesto?", "lxc": "Di solito no (solo riavviare il CT)", "vm": "Se cambia la configurazione di driver o IOMMU sull’host; non a ogni assegnazione" }, { "feature": "Sistemi operativi guest", "lxc": "Solo Linux (LXC è Linux-solo)", "vm": "Sistema guest supportato con driver GPU compatibile" } ] }, "prereqs": { "title": "Prima di iniziare", "gpu": "GPU sull’host Intel, AMD o NVIDIA, rilevata tramite lspci.", "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'", "vfio": "La GPU non deve essere associata a vfio-pci. Serve il driver nativo dell’host. Se assegnata a una VM, lo script propone Cambia modalità GPU.", "nvidia": "Per NVIDIA: installa prima il driver sull’host. Le librerie del container devono corrispondere alla sua versione. Usa Installa driver NVIDIA sull’host.", "nvidiaCheck": "nvidia-smi", "container": "Un LXC esistente. Lo script non lo crea. Supporta entrambi i modi; un container privilegiato non è sempre necessario. Dispositivi e permessi numerici dell’app devono corrispondere." }, "unpriv": { "title": "Supporta container privilegiati e non privilegiati", "body": "Lo script usa le voci dev<N> e allinea i GID video e render fra host e container. Questo evita di modificare manualmente lxc.idmap per il normale accesso ai dispositivi; verifica comunque i permessi dell’utente dell’app." }, "running": { "heading": "Eseguire l’installer", "body": "Apri ProxMenux e scegli Hardware: GPU e Coral-TPU → Aggiungi GPU a LXC.", "imageAlt": "Voce del menu per aggiungere GPU a LXC" }, "howRuns": { "heading": "Come funziona lo script", "body": "Scegli container e famiglie GPU e supera i controlli. Poi il processo arresta e modifica il container senza un’ulteriore conferma finale. La pulizia VFIO facoltativa ha conferma separata e può modificare prima l’host." }, "walkthrough": { "heading": "Procedura passo per passo", "detect": { "title": "Rilevamento GPU host", "body": "Cerca controller GPU con lspci. Per NVIDIA verifica il modulo nvidia e nvidia-smi; la versione rilevata determina l’installer .run del container.", "tipTitle": "NVIDIA non pronto?", "tipBody": "Se manca il modulo o NVIDIA non funziona sull’host, usa prima Installa driver NVIDIA sull’host e verifica il driver." }, "pickCt": { "title": "Scegli un container LXC", "body": "Elenca i container LXC idonei per ID e nome; i container OCI sono esclusi e usano OCI manager Apps per i dispositivi. Il container viene arrestato se è in esecuzione, avviato per l’installazione dei driver e normalmente riportato allo stato iniziale (in esecuzione/arrestato).", "imageAlt": "Selezione di un container LXC esistente" }, "selectGpu": { "title": "Scegli le famiglie GPU", "body": "L’elenco seleziona famiglie di produttori, non un dispositivo PCI isolato. Intel/AMD aggiungono i nodi DRI previsti; NVIDIA i dispositivi disponibili, anche di più schede. Una sola famiglia viene selezionata automaticamente. Verifica l’elenco finale, soprattutto con più GPU.", "imageAlt": "Elenco delle famiglie GPU rilevate con nome e indirizzo PCI" }, "preflight": { "title": "Controlli preliminari", "imageAlt": "Proposta di cambio modalità per una GPU associata a vfio-pci", "intro": "Tre controlli, uno dei quali può bloccare o reindirizzare:", "items": [ "Controllo SR-IOV. L’assistente blocca VF o PF con VF attive. È un limite della selezione ampia dei dispositivi, non un divieto generale per LXC. Configurali separatamente.", "Associata a vfio-pci. Il driver nativo non può creare /dev/dri/* o /dev/nvidia*. Propone Cambia modalità GPU; segui le indicazioni sul riavvio e poi torna.", "Già configurata. Se tutti i dispositivi sono presenti, esce senza reinstallare le librerie. Prosegue solo con le famiglie selezionate mancanti." ] }, "applyConfig": { "title": "Applicare le modifiche di configurazione LXC", "body1": "Arresta il container se è in esecuzione e modifica /etc/pve/lxc/<ctid>.conf. Le voci numerate dev<N> includono il GID host di video o render. Le righe bind lxc.mount.entry esistenti per /dev/dri vengono sostituite da voci dev:; verifica la configurazione e i permessi risultanti.", "body2": "Esempio dopo Intel + NVIDIA sullo stesso contenitore:" }, "installDrivers": { "title": "Avviare il contenitore e installare i driver all'interno", "body": "Avvia il container e attende fino a circa 30 secondi la risposta di pct exec. Rileva la distribuzione da /etc/os-release e installa i pacchetti adatti.", "headerDistro": "Distribuzione", "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 / altri", "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo", "debianNvidia": "Estrae .run sull’host → pct push → installa con --no-kernel-modules --no-dkms.", "whyTitle": "Perché usa l’installer NVIDIA .run su Debian", "whyBody": "I pacchetti possono non corrispondere all’host. Le librerie devono corrispondere al modulo host caricato per NVML e nvidia-smi. Debian/glibc usa il .run della versione host in cache, lo estrae e archivia sull’host, trasferisce con pct push e installa con --no-kernel-modules --no-dkms. Alpine e Arch usano i repository: verifica le versioni." }, "alignGids": { "title": "Allineare GID e ripristinare lo stato", "body1": "Per Intel/AMD legge i GID host di video e render, usando 44/104 solo come ripiego, poi modifica /etc/group nel container perché corrispondano; le esecuzioni solo NVIDIA saltano questo passaggio. Voci come video:44 e render:104 sono esempi, non ID universali. Verifica l’appartenenza dell’app ai gruppi e i permessi effettivi sui dispositivi.", "body2": "Al termine normale, arresta di nuovo il container se inizialmente era fermo; se era attivo lo lascia attivo. In caso di errore di avvio o installazione, verifica stato finale e log." } }, "vendors": { "heading": "Note per produttore", "intelHeading": "Intel iGPU", "intelBody": "L’accelerazione multimediale Intel, incluso Quick Sync, dipende da generazione del GPU, codec e configurazione dell’app. Lo script condivide quelli tra /dev/dri/card0, card1, renderD128 e renderD129 che esistono; altri numeri di nodo non vengono aggiunti. L’host deve già fornirli tramite il proprio driver nativo, per esempio i915.", "amdHeading": "AMD", "amdBody": "AMD usa DRI per Mesa/VA-API. Se l’host espone /dev/kfd, lo condivide. ROCm/OpenCL richiede hardware e librerie compatibili; condividere il dispositivo non installa l’intero stack ROCm.", "nvidiaHeading": "NVIDIA", "nvidiaBody": "Condivide i dispositivi /dev/nvidia*. Le versioni del driver devono corrispondere per nvidia-smi. Debian/glibc usa il .run della versione host; Alpine/Arch i repository. Sotto 2048 MiB di RAM configurata propone un aumento temporaneo poi ripristinato; richiede anche 1500 MiB liberi su disco.", "updateTitle": "Dopo un aggiornamento NVIDIA host, controlla le librerie LXC", "updateBody": "Vecchie librerie possono causare errori in nvidia-smi. L’installer NVIDIA dell’host propone aggiornamenti dei container. Ripetere l’aggiunta può terminare se i dispositivi esistono già: non garantisce l’aggiornamento delle librerie. Verifica versioni e aggiorna i pacchetti o l’installazione utente adatta." }, "verification": { "heading": "Verifica", "body": "Nel container verifica che la GPU sia visibile e utilizzabile." }, "troubleshoot": { "heading": "Risoluzione dei problemi", "mismatchTitle": "nvidia-smi: Failed to initialize NVML: Driver/library version mismatch", "mismatchBody": "Le librerie non corrispondono al modulo caricato. Verifica le versioni e aggiorna lo spazio utente LXC. Il .run in cache serve per Debian/glibc, ma l’aggiunta può terminare se tutti i dispositivi esistono già.", "denyTitle": "Permesso negato su /dev/dri/renderD128 all'interno del contenitore", "denyBody": "Verifica dispositivo e permessi numerici di render, poi che l’utente appartenga a render. Se disponibile, aggiungilo a render con usermod -aG render <user>, sostituendo il segnaposto con l’account reale. Riavvia la sessione. Cambiare privilegi non è una soluzione generale.", "vainfoTitle": "vainfo dice: VA-API versione 1.xx; non inizializzare", "vainfoBody": "Verifica accesso e driver VA-API. I nomi variano per distribuzione: per esempio intel-media-driver per Intel recenti supportate, i965-va-driver per quelle vecchie compatibili e mesa-va-drivers per AMD. Il messaggio da solo non prova che manchi un pacchetto.", "logTitle": "Registro d’installazione", "logBody": "Ogni esecuzione scrive /tmp/add_gpu_lxc.log sull’host. Allegalo alle richieste di assistenza." }, "related": { "heading": "Vedi anche", "items": [ { "label": "Installare driver NVIDIA (Host)", "href": "/docs/hardware/nvidia-host", "tail": " — installa il driver host prima di condividere NVIDIA." }, { "label": "Aggiungi GPU a VM (Passthrough)", "href": "/docs/hardware/gpu-vm-passthrough", "tail": " — alternativa per dedicare una GPU a una VM." }, { "label": "Cambia modalità GPU (VM ↔ LXC)", "href": "/docs/hardware/switch-gpu-mode", "tail": " — passa la GPU fra condivisione LXC e assegnazione VM." }, { "label": "Comandi di passaggio GPU", "href": "/docs/help-info/gpu-commands", "tail": "— rapido riferimento per i relativi comandi shell." } ] } }