mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
Merge remote-tracking branch 'origin/develop' into HEAD
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Aggiungi Coral TPU a LXC | Documentazione ProxMenux",
|
||||
"description": "Condividi un Google Coral TPU USB o M.2 / PCIe con un LXC Proxmox. ProxMenux configura dispositivi, permessi e montaggi, avvia il container e installa il runtime Edge TPU nelle distribuzioni compatibili."
|
||||
},
|
||||
"header": {
|
||||
"title": "Aggiungi Coral TPU a LXC",
|
||||
"description": "Condividi un Coral USB Accelerator o M.2 / Mini-PCIe con un LXC. ProxMenux configura il container e il runtime Edge TPU. Questa opzione gestisce solo la TPU: per Quick Sync, VA-API o NVENC, esegui anche Aggiungi GPU a LXC.",
|
||||
"section": "Hardware: GPU e Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cosa fa",
|
||||
"body": "Scrive la configurazione in <code>/etc/pve/lxc/<ctid>.conf</code> per <strong>USB Accelerator</strong>, <strong>Coral M.2 / PCIe</strong> o entrambi. Avvia il container e installa il runtime Google <code>libedgetpu</code>. Il GPU si configura separatamente con <lxcGpuLink>Aggiungi GPU a LXC</lxcGpuLink>."
|
||||
},
|
||||
"whenUse": {
|
||||
"heading": "Quando usarlo",
|
||||
"body": "Per <frigateLink>Frigate</frigateLink> o altre applicazioni Linux compatibili in LXC. Coral esegue l’inferenza ML supportata al posto della CPU. Le prestazioni dipendono da modello e hardware; decodifica video e altre attività consumano comunque risorse."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Prima di iniziare",
|
||||
"drivers": "<strong>Prepara il dispositivo Coral sull’host</strong>. M.2 / PCIe richiede il driver host caricato; USB richiede accesso al dispositivo e permessi adeguati. Vedi <hostLink>Installa Coral TPU sull’host</hostLink>. Lo script installa il runtime dell’applicazione nei container Debian/Ubuntu; le altre distribuzioni devono fornirlo separatamente.",
|
||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||
"container": "<strong>Un LXC esistente</strong>, preferibilmente basato su <strong>Debian / Ubuntu</strong>: l’installazione usa <code>apt-get</code>. I <strong>container di altre distribuzioni</strong> possono usare la <strong>modalità solo passthrough</strong>, che salta l’installazione APT di <code>libedgetpu</code>. Utile se l’applicazione include già il runtime, come l’immagine Docker Frigate.",
|
||||
"downtime": "<strong>Prevedi una breve interruzione</strong> del container. Lo script lo ferma per configurarlo e lo avvia per installare il runtime. Queste modifiche non richiedono il riavvio dell’host."
|
||||
},
|
||||
"hostPrep": {
|
||||
"title": "Prepara prima l’host",
|
||||
"body": "M.2 / PCIe richiede <code>gasket</code>/<code>apex</code> sull’host e un dispositivo funzionante. USB richiede dispositivo collegato e permessi; l’app non deve essere eseguita sull’host. <code>libedgetpu</code> deve essere disponibile dove gira l’app. Ordine: <strong>preparare l’host → accesso LXC → configurare l’app</strong>."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire lo script",
|
||||
"body": "In ProxMenux, apri <strong>Hardware: GPU e Coral-TPU → Aggiungi Coral TPU a LXC</strong>.",
|
||||
"imageAlt": "Voce Aggiungi Coral TPU a LXC nel menu hardware"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Come funziona lo script",
|
||||
"body": "Scegli il container. Lo script configura l’accesso USB anche senza Coral USB collegato e aggiunge M.2 / PCIe se rileva quel dispositivo."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Procedura passo per passo",
|
||||
"pick": {
|
||||
"title": "Scegli il container LXC",
|
||||
"body": "La selezione mostra i container idonei di <code>pct list</code>; quelli OCI sono nascosti e gestiti da Apps nel gestore OCI. Scegli il container, avviato o fermo. Lo script lo arresta se necessario, lo configura e lo avvia per installare il runtime."
|
||||
},
|
||||
"gpuHint": {
|
||||
"title": "Suggerimento facoltativo per l’accesso GPU",
|
||||
"body": "Se viene rilevato un GPU non configurato per questo container, un dialogo consiglia <lxcGpuLink>Aggiungi GPU a LXC</lxcGpuLink> per la decodifica video hardware, come Quick Sync, VA-API o NVENC. Chiede se proseguire solo con Coral: Sì continua la configurazione del TPU; No esce per permetterti di configurare prima il GPU."
|
||||
},
|
||||
"usb": {
|
||||
"title": "Configurare l’accesso USB del LXC",
|
||||
"body": "Crea una regola udev sull’host per <code>/dev/coral</code> e monta l’albero <strong>completo</strong> <code>/dev/bus/usb</code> nel container. La configurazione viene scritta anche senza Coral USB collegato ed espone più di quel solo dispositivo.",
|
||||
"whyTitle": "Perché montare /dev/bus/usb invece di /dev/coral?",
|
||||
"whyBody": "Il percorso USB, ad esempio <code>/dev/bus/usb/001/005</code>, cambia alla riconnessione. Le versioni precedenti montavano il link <code>/dev/coral</code> e potevano conservare un percorso obsoleto. Montare tutto l’albero USB rende visibile il nodo attuale. L’app potrebbe comunque dover riaprire il dispositivo."
|
||||
},
|
||||
"pcie": {
|
||||
"title": "Configurare l’accesso M.2 / PCIe del LXC",
|
||||
"body1": "Se rileva Coral M.2 / PCIe ed esiste <code>/dev/apex_0</code>, usa l’API Proxmox <code>dev</code> per gestire cgroup2 nei LXC privilegiati e non privilegiati:",
|
||||
"body2": "Se <code>/dev/apex_0</code> è assente dopo <hostLink>Installa Coral sull’host</hostLink>, lo script scrive un bind mount con <code>create=file</code> e, solo quando il numero major di apex è elencato in <code>/proc/devices</code>, una regola cgroup2 classica. Nessuno dei due crea un dispositivo funzionante:",
|
||||
"rebootTitle": "Riavviare l'host prima se hai appena installato i driver Coral",
|
||||
"rebootBody": "Il montaggio alternativo non carica <code>apex</code> sull’host. Carica il driver o riavvia dopo l’installazione e verifica il dispositivo. Poi riesegui lo script per applicare la voce moderna e riavvia il container."
|
||||
},
|
||||
"drivers": {
|
||||
"title": "Avviare il LXC e installare il runtime Coral",
|
||||
"body": "Avvia il container e attende fino a 15 secondi lo stato running, poi usa <code>pct exec</code> per eseguire l’installazione al suo interno. L’installer:",
|
||||
"items": [
|
||||
"Esegue <code>apt-get update</code>.",
|
||||
"Installa i prerequisiti del repository Coral: <code>gnupg</code>, <code>curl</code>, <code>ca-certificates</code>.",
|
||||
"Importa la chiave GPG Coral di Google per <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> (percorso moderno, come l'installatore host) e aggiunge il repository APT <code>coral-edgetpu-stable</code> con <code>signed-by=</code>.",
|
||||
"Installa <code>libedgetpu1-std</code> come predefinito. Se rileva Coral M.2, propone <code>libedgetpu1-std</code> o <code>libedgetpu1-max</code>. La scelta del pacchetto non configura da sola il rilevamento nell’applicazione."
|
||||
],
|
||||
"noIgpuTitle": "Perché nessun driver iGPU qui?",
|
||||
"noIgpuBody": "Prima installava anche <code>va-driver-all</code>, <code>intel-opencl-icd</code> e altri pacchetti Intel per combinare Quick Sync e Coral. Ciò causava errori poco chiari quando serviva solo Coral. Ora l’iGPU si configura con <lxcGpuLink>Aggiungi GPU a LXC</lxcGpuLink>; eseguilo prima se serve decodifica video hardware.",
|
||||
"debianTitle": "Altre distribuzioni: solo accesso al dispositivo",
|
||||
"debianBody": "Usa <code>apt-get</code> in Debian/Ubuntu. Per <strong>Alpine, Arch, RHEL o SUSE</strong>, rilevati tramite <code>/etc/os-release</code>, propone <em>continuare solo con l’accesso al dispositivo</em> oppure <em>annullare</em>. Il primo configura <code>/etc/pve/lxc/<ctid>.conf</code> senza installare <code>libedgetpu</code>. Se l’app include già il runtime, come Frigate Docker, basta questa modalità. Altrimenti installa <code>libedgetpu</code> seguendo la <coralLink>guida ufficiale Google</coralLink>."
|
||||
},
|
||||
"summary": {
|
||||
"title": "Riepilogo",
|
||||
"body": "Al termine mostra Coral USB e M.2 con ✓ o ⚠ in base al rilevamento hardware. Il container resta avviato per configurare Frigate, CodeProject.AI o l’applicazione."
|
||||
}
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Procedura manuale equivalente",
|
||||
"body": "Se si desidera vedere esattamente cosa va nella configurazione LXC, o applicarla a mano:",
|
||||
"usbHeading": "USB Coral",
|
||||
"pcieHeading": "M.2 / PCIe Coral",
|
||||
"runtimeHeading": "Nel container: runtime Coral"
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Verifica",
|
||||
"body": "Apri una shell nel container e verifica che Coral sia visibile:"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Risoluzione dei problemi",
|
||||
"apexTitle": "LXC avviato, ma manca /dev/apex_0",
|
||||
"apexBody": "Verifica prima il driver host: <code>lsmod | grep apex</code>. Se manca, prova <code>modprobe apex</code> o riavvia dopo l’installazione del driver. Quando <code>/dev/apex_0</code> esiste sull’host, verifica la voce del dispositivo LXC (riesegui lo script se sono state scritte solo le voci di ripiego) e riavvia il container con <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||
"replugTitle": "Coral USB scompare dopo la riconnessione a un’altra porta",
|
||||
"replugBody": "Verifica che il LXC monti <code>/dev/bus/usb</code> anziché il link <code>/dev/coral</code>. La configurazione deve contenere <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> senza dipendere direttamente da <code>/dev/coral</code>. Riesegui lo script se la configurazione è vecchia.",
|
||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime non installato",
|
||||
"alpineBody": "La <em>modalità solo passthrough</em> configura il dispositivo senza installare <code>libedgetpu</code>. Usa un pacchetto compatibile o compila i sorgenti; verifica la disponibilità prima di comandi come <code>apk add</code> in Alpine. Frigate può includere il runtime. Con Docker nel LXC, inoltra anche M.2 con <code>--device /dev/apex_0:/dev/apex_0</code> oppure monta USB in Docker: il solo montaggio LXC non basta.",
|
||||
"frigateTitle": "Frigate mostra «Coral EdgeTPU detected but not available»",
|
||||
"frigateBody": "Verifica runtime, visibilità e accesso in lettura/scrittura del processo reale. Per USB, controlla permessi ed eventuale gruppo <code>plugdev</code>. Per M.2, ispeziona <code>/dev/apex_0</code> con <code>ls -l /dev/apex_0</code>. Un nome come <code>apex</code> in <code>/etc/group</code> non basta: GID numerici e mappature LXC devono coincidere. Controlla se altri processi occupano la TPU; non passare subito alla modalità privilegiata.",
|
||||
"logsTitle": "Controllare entrambi i registri host e container",
|
||||
"logsBody": "Sull’host controlla i messaggi del kernel con <code>journalctl -k | grep -i -e apex -e gasket -e usb</code>. Nel LXC leggi i registri dell’app; con Docker annidato usa <code>docker logs <container></code>. Permessi, runtime assente, connessione USB o un altro processo sulla TPU possono causare errori."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Vedi anche",
|
||||
"items": [
|
||||
{
|
||||
"label": "Installa Coral TPU sull’host",
|
||||
"href": "/docs/hardware/install-coral-tpu-host",
|
||||
"tail": " — requisito per usare schede Coral M.2 / PCIe in un CT."
|
||||
},
|
||||
{
|
||||
"label": "Aggiungi GPU a LXC",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — accesso GPU, spesso abbinato a Coral in Frigate."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Aggiungi GPU a VM | Documentazione ProxMenux",
|
||||
"description": "Assegna una GPU fisica a una VM Proxmox. ProxMenux verifica IOMMU, configura VFIO e dispositivi VM e rileva conflitti con altre VM o LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Aggiungi GPU a VM (Passthrough)",
|
||||
"description": "Rileva GPU Intel, AMD o NVIDIA per l’accesso diretto da una VM. Verifica IOMMU e dispositivi associati, configura VFIO e VM e applica le regole di compatibilità. Controlla tutti i dispositivi interessati.",
|
||||
"section": "Hardware: GPU e Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cosa fa",
|
||||
"body": "Automatizza i passaggi host e <code>hostpci</code> della <pveLink>documentazione PCI passthrough Proxmox</pveLink>. Controlla assegnazioni ad <em>altri</em> guest e propone soluzioni ai conflitti. Non garantisce supporto per ogni GPU, metodo di reset o driver guest."
|
||||
},
|
||||
"who": {
|
||||
"heading": "Per chi è questo?",
|
||||
"body": "Per l’accesso diretto di una <strong>macchina virtuale</strong> alla GPU tramite VFIO. Finché è associata a VFIO, il driver host non può usarla, anche con VM ferma. Per condividerla con <em>LXC</em>, usa <lxcLink>Aggiungi GPU a LXC</lxcLink>."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Prima di iniziare",
|
||||
"gpu": "<strong>GPU compatibile</strong> installata fisicamente. Lo script rileva Intel, AMD e NVIDIA con <code>lspci</code>.",
|
||||
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
|
||||
"iommu": "<strong>Supporto IOMMU</strong> hardware e attivazione firmware se richiesta (Intel VT-d o AMD-Vi). Verifica il sistema e può configurare Linux; non cambia BIOS/UEFI né prova che IOMMU inattivo sia disabilitato nel firmware.",
|
||||
"q35": "L’assistente richiede <strong>q35</strong> e rifiuta <code>i440fx</code>. Il tipo di macchina è distinto dal firmware BIOS/UEFI. Cambiare chipset a una VM esistente richiede pianificazione e non è automatico.",
|
||||
"q35Check": "qm config VMID | grep machine",
|
||||
"moreGpus": "Prepara <strong>un’altra GPU o accesso alternativo</strong> via SSH, IPMI o seriale. Riservare la GPU principale può togliere l’immagine locale. Per <em>NVIDIA</em>, una scheda fuori dal gruppo IOMMU interessato può restare sull’host.",
|
||||
"nvidiaInstalled": "Dopo l’<nvidiaLink>installazione NVIDIA sull’host</nvidiaLink>, le funzioni scelte sono riservate a <code>vfio-pci</code> anziché <code>nvidia</code>. Il modulo <code>nvidia</code> può restare disponibile per <strong>altre</strong> schede fuori dal gruppo IOMMU interessato. Verifica con <code>nvidia-smi</code>."
|
||||
},
|
||||
"pickOne": {
|
||||
"title": "Assegnazione esclusiva VM o condivisione LXC",
|
||||
"body": "Un GPU legato a <code>vfio-pci</code> per il passaggio VM non può essere utilizzato simultaneamente dall'host o da un LXC. Se hai due GPU, puoi dedicarne uno ad ogni percorso. Se ne hai uno solo, scegli:",
|
||||
"vmItem": "<strong>VM:</strong> accesso diretto ed esclusivo per quella VM.",
|
||||
"lxcItem": "<strong>LXC (<lxcLink>Aggiungi GPU a LXC</lxcLink>):</strong> condivide il dispositivo con host e altri container tramite il driver nativo."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire l’installer",
|
||||
"body": "Apri ProxMenux e scegli <strong>Hardware: GPU e Coral-TPU → Aggiungi GPU a VM</strong>.",
|
||||
"imageAlt": "Voce del menu per aggiungere GPU a VM"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Come funziona lo script",
|
||||
"body": "Rilevamento e selezione precedono le modifiche principali, confermate da un riepilogo finale. Attivare IOMMU ha una conferma precedente e può già modificare l’avvio. La successiva pulizia audio può chiedere un’altra scelta."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Procedura passo per passo",
|
||||
"detect": {
|
||||
"title": "Rileva GPU e controlla IOMMU",
|
||||
"body": "Considera IOMMU attivo solo quando il kernel in esecuzione ha <code>intel_iommu=on</code> o <code>amd_iommu=on</code> ed esistono gruppi IOMMU. Se il parametro è già salvato per il prossimo avvio, prosegue in modalità riavvio in sospeso; altrimenti un passaggio confermato separatamente può aggiungerlo con <code>iommu=pt</code>. La sua euristica per il file di avvio usa <code>/etc/kernel/cmdline</code> quando vi si trova un marcatore di root ZFS come <code>root=ZFS=</code>; altrimenti usa <code>/etc/default/grub</code>. Questa euristica non prova quale sia il bootloader effettivo. L’IOMMU appena configurato ha effetto dopo il riavvio; verifica poi i gruppi reali.",
|
||||
"tipTitle": "Hai già configurato la post-installazione?",
|
||||
"tipBody": "Se il <postLink>supporto VFIO IOMMU</postLink> è già configurato e attivo nel kernel, il controllo passa. Un’impostazione per il prossimo avvio non prova che sia attivo ora.",
|
||||
"imageAlt": "Elenco delle GPU rilevate con indirizzo fornitore e PCI"
|
||||
},
|
||||
"preflight": {
|
||||
"title": "Scegli GPU ed esegui i controlli preliminari",
|
||||
"intro": "Una volta scelto il GPU, lo script esegue una serie di controlli che possono ogni blocco ulteriori progressi:",
|
||||
"items": [
|
||||
"<strong>Controllo SR-IOV.</strong> Rifiuta VF e PF con VF attive perché configura dispositivi interi, non SR-IOV. Configura SR-IOV separatamente su hardware supportato.",
|
||||
"<strong>Una sola GPU.</strong> La console locale può perdere l’uscita quando VFIO la riserva. Verifica prima l’accesso SSH o web da un altro computer.",
|
||||
"<strong>Politica di reset AMD.</strong> Legge <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU o scheda dedicata senza FLR viene <em>bloccata dalla politica dell’assistente</em>; un sottotipo sconosciuto senza FLR richiede conferma. Non prova un’impossibilità universale.",
|
||||
"<strong>Stato D3cold.</strong> Blocca schede AMD che indicano <code>D3cold</code> per il rischio di mancata attivazione. Verifica alimentazione e firmware.",
|
||||
"<strong>Analisi del gruppo IOMMU.</strong> Legge <code>/sys/kernel/iommu_groups/</code> e include nel piano della VM <em>tutti i membri non bridge</em>, eventualmente controller di rete o di archiviazione. Se il gruppo contiene dispositivi di un altro slot, lo script li elenca prima del riepilogo; verifica che l’host non ne abbia bisogno. Se IOMMU attende un riavvio, i gruppi reali non sono disponibili e il piano contiene inizialmente solo la funzione GPU selezionata; verifica l’isolamento dopo il riavvio."
|
||||
],
|
||||
"audioIntro": "<strong>Audio associato.</strong> Due casi secondo la posizione del controller:",
|
||||
"audioDgpu": "<strong>GPU dedicata:</strong> l’audio HDMI occupa spesso la funzione <code>.1</code> dello stesso slot PCI ed è incluso se rilevato. Se l’host lo usava, perde l’accesso riservandolo alla VM.",
|
||||
"audioIgpu": "<strong>Senza funzione audio <code>.1</code>:</strong> può trovarsi altrove, per esempio <code>00:1f.3</code>. Elenca controller e driver come <code>snd_hda_intel</code>. Per impostazione predefinita <strong>nessuno</strong> è selezionato; scegli solo quelli necessari."
|
||||
},
|
||||
"pickVm": {
|
||||
"title": "Scegli la VM di destinazione",
|
||||
"body": "Scegli la VM. Richiede q35 e riutilizza le voci GPU esistenti dove possibile. BIOS/UEFI è un’impostazione separata, non un tipo di macchina. Non cambia automaticamente chipset o avvio del guest installato.",
|
||||
"imageAlt": "Selezione VM per nome, ID e stato"
|
||||
},
|
||||
"switchMode": {
|
||||
"title": "Gestire assegnazioni esistenti",
|
||||
"intro": "Lo script scansiona ogni configurazione VM e ogni configurazione LXC sull'host alla ricerca del GPU selezionato. Tre possibili risultati:",
|
||||
"items": [
|
||||
"<strong>GPU disponibile.</strong> Prosegue senza rimuovere assegnazioni.",
|
||||
"<strong>Assegnata a un’altra VM.</strong> Arresta prima la sorgente. Puoi <em>mantenere le voci disattivando l’avvio automatico</em> oppure <em>rimuoverle mantenendo l’avvio automatico</em>. Con <code>vfio-pci</code> già attivo e nessuna modifica host necessaria, il trasferimento VM→VM può evitare il riavvio host.",
|
||||
"<strong>GPU usata da LXC.</strong> Nei container normali scegli <em>mantenere la configurazione GPU e disattivare l’avvio automatico</em> o <em>rimuovere la configurazione del dispositivo GPU mantenendo l’avvio automatico</em>. La rimozione elimina le voci <code>devN</code> e, per AMD/Intel, anche le vecchie regole <code>/dev/dri</code> <code>lxc.mount.entry</code> e <code>lxc.cgroup2.devices.allow</code>. I container OCI conservano la configurazione e vengono fermati con l’avvio automatico disattivato; rimuovi la loro GPU tramite OCI manager Apps. Il rilevamento dei conflitti avviene per famiglia di dispositivi GPU e può includere altre schede della stessa famiglia."
|
||||
],
|
||||
"imageAlt": "Offerta di dialogo per rimuovere il GPU da un LXC prima di assegnarlo al VM",
|
||||
"smartTitle": "Verificare l’audio associato rimuovendo la GPU",
|
||||
"smartBody": "Poi può proporre un elenco di <strong>dispositivi audio forse inutilizzati</strong> nella VM sorgente. Deseleziona quelli ancora necessari. Per esempio può mantenere <code>02:00.1</code> e proporre di rimuovere <code>00:1f.3</code>. La scelta determina la rimozione; non garantisce ogni associazione audio/video."
|
||||
},
|
||||
"audioPick": {
|
||||
"title": "Senza audio .1, scegli i controller necessari",
|
||||
"body": "Succede solo per Intel iGPU e simili configurazioni split-audio. Una lista di controllo mostra ogni controller audio PCI sull'host (escluso qualsiasi già nel gruppo IOMMU di GPU), etichettato con il suo driver corrente. Selezionare quelli che si desidera - o nessuno, se il VM non ha bisogno di audio dall'hardware host.",
|
||||
"imageAlt": "finestra di dialogo con ogni controller audio PCI host (BDF + driver) quando il GPU non ha un audio di sibling .1",
|
||||
"warnTitle": "Non selezionare audio necessario all’host",
|
||||
"warnBody": "Assegnare l’audio può togliere accesso all’host; il controller non può appartenere anche a un’altra VM attiva. Non selezionare audio superfluo e verifica le assegnazioni. Il segnale acustico della console non proviene necessariamente dall’audio PCI."
|
||||
},
|
||||
"summary": {
|
||||
"title": "Riepilogo della conferma",
|
||||
"body": "Verifica il piano finale dell’host e della VM e annulla se è errato. Mostra il gruppo IOMMU e il numero dei suoi dispositivi; i membri di un altro slot sono elencati nel passaggio precedente. L’annullamento ferma le modifiche principali, ma non annulla una modifica della configurazione di avvio IOMMU confermata separatamente in precedenza.",
|
||||
"imageAlt": "Riepilogo delle modifiche previste a host e VM"
|
||||
},
|
||||
"hostApply": {
|
||||
"title": "Le modifiche degli host sono applicate",
|
||||
"intro": "La fase applicativa modifica host e VM. La pulizia audio può ancora richiedere una scelta. Possibili modifiche:",
|
||||
"items": [
|
||||
"<code>/etc/modules</code> — aggiunge <code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code> (più <code>vfio_virqfd</code> sui kernel < 6.2).",
|
||||
"<code>/etc/modprobe.d/vfio.conf</code> — AMD/Intel: <code>options vfio-pci ids=<vendor:device,...> disable_vga=1</code>. NVIDIA: <code>softdep nvidia pre: vfio-pci</code> (<code>_drm</code>/<code>_modeset</code>/<code>_uvm</code>); l’associazione effettiva è per BDF. AMD aggiunge l’ordine di caricamento <code>softdep</code>: <code>vfio-pci</code> → <code>radeon</code>/<code>amdgpu</code>.",
|
||||
"Scrive <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Sono impostazioni dello script, non requisiti universali Windows/macOS; gli interrupt non sicuri riducono la protezione del remapping.",
|
||||
"<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>. Queste regole per produttore possono influire su altre schede con lo stesso driver. Il modulo <code>nvidia</code> è bloccato <strong>solo</strong> tramite <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>tutte</em> le NVIDIA host sono riservate a VFIO.",
|
||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Applica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al PCI ADD dei BDF registrati, incluse le funzioni del gruppo IOMMU interessato. Fuori da quei gruppi può restare <code>nvidia</code>. La politica BDF non divide gruppi IOMMU hardware.",
|
||||
"<strong>Solo AMD.</strong> Tenta un dump della ROM da <code>/sys/bus/pci/.../rom</code> o ACPI VFCT in <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Se riesce, la VM usa <code>romfile=</code>. Un dump valido non garantisce la corretta inizializzazione della GPU.",
|
||||
"<strong>Solo NVIDIA.</strong> Ferma e disattiva <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo se tutte le NVIDIA sono riservate a VFIO. In uso misto mantiene servizi e <code>nvidia</code> per le schede native.",
|
||||
"<code>update-initramfs -u -k all</code> — funziona solo se uno dei suddetti effettivamente cambiato."
|
||||
]
|
||||
},
|
||||
"vmApply": {
|
||||
"title": "La configurazione della VM viene applicata tramite qm set",
|
||||
"body": "La configurazione in <code>/etc/pve/qemu-server/<vmid>.conf</code> viene aggiornata tramite <code>qm set</code>, non modificata direttamente con <code>sed</code>.",
|
||||
"after1": "Aggiunge <code>x-vga=1</code> per AMD e NVIDIA, <strong>non</strong> Intel. È la politica dello script, non prova che ogni iGPU Intel sia priva di firmware o che il flag causi sempre blocchi.",
|
||||
"after2": "Ulteriori linee <code>hostpciN</code> sono allegate se il gruppo IOMMU di GPU contiene altri dispositivi che è necessario passare insieme."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Riavvia se richiesto dalle modifiche host",
|
||||
"body": "Segui il riavvio richiesto se cambiano avvio o driver e verifica l’associazione attiva prima di avviare la VM. La configurazione salvata non prova che sia attiva. VM→VM con VFIO corretto può evitare il riavvio host.",
|
||||
"imageAlt": "Riepilogo schermo che mostra ciò che è stato cambiato, seguito da un prompt di riavvio"
|
||||
}
|
||||
},
|
||||
"vendors": {
|
||||
"heading": "Note per produttore",
|
||||
"nvidiaHeading": "NVIDIA",
|
||||
"nvidiaBody": "Mantiene un vecchio accorgimento per <em>Code 43</em>: <code>hidden=1</code>, ID <code>NV43FIX</code> in <code>args</code> e <code>kvm=off</code>. Non è un requisito universale delle GeForce attuali: NVIDIA ha abilitato il passthrough Windows da R465. L’errore può avere altre cause; verifica GPU e driver.",
|
||||
"nvidiaMultiHeading": "Supporto Multi-GPU NVIDIA",
|
||||
"nvidiaMultiBody": "Uso misto NVIDIA <strong>per BDF</strong>. Registra funzioni <code>vfio-pci</code> per indirizzo, non solo ID <code>vendor:device</code>. Fuori dai gruppi interessati può mantenere <code>nvidia</code>; verifica con <code>nvidia-smi</code>. Non isola due schede dello stesso gruppo.",
|
||||
"amdHeading": "AMD",
|
||||
"amdBody": "Alcune GPU AMD non si resettano dopo l’arresto VM. L’assistente verifica capacità dichiarate, non tutti i cicli reali. <vendorResetLink>vendor-reset</vendorResetLink> supporta dispositivi limitati e richiede kernel compatibile e caricamento anticipato; non viene installato. Anche <em>RadeonResetBugFix</em> su Windows dipende dall’hardware, senza garanzia universale.",
|
||||
"intelHeading": "Intel iGPU",
|
||||
"intelBody": "Passthrough completo Intel iGPU e SR-IOV sono distinti. L’assistente riserva il dispositivo a una VM senza <code>x-vga=1</code>. <sriovLink>i915-sriov-dkms</sriovLink> richiede hardware/kernel supportati; «UHD 630+» non è una regola di compatibilità. Prevedi accesso alternativo all’host."
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Verifica"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Risoluzione dei problemi",
|
||||
"code43Title": "Codice 43 in Windows (NVIDIA)",
|
||||
"code43Body": "Code 43 non prova un errore di mascheramento. Controlla <code>qm config VMID | grep -E \"cpu|args\"</code> con VMID reale, poi <code>hidden=1</code> e <code>hv_vendor_id=NV43FIX</code>. Verifica anche driver guest, firmware e assegnazione. Ripetere può terminare se già assegnata.",
|
||||
"amdResetTitle": "AMD GPU funziona una volta, fallisce sul riavvio di VM",
|
||||
"amdResetBody": "Un reset fallito è una possibile causa. Riavvio o spegnimento completo possono aiutare temporaneamente. Verifica compatibilità e caricamento anticipato di <code>vendor-reset</code>; <code>softdep amdgpu pre: vendor-reset</code> da solo non garantisce caricamento prima di VFIO. Anche <em>RadeonResetBugFix</em> richiede una GPU compatibile.",
|
||||
"stuckBootTitle": "Avvio bloccato VM / GPU non rilevato",
|
||||
"stuckBootBody": "Controlla l’indirizzo reale con <code>lspci -nnk -s PCI_ADDRESS</code>; atteso <code>Kernel driver in use: vfio-pci</code>. Sostituisci PCI_ADDRESS. Se resta il driver nativo, verifica la politica di associazione, non solo <code>/etc/modprobe.d/blacklist.conf</code>; NVIDIA usa stato BDF. Leggi <code>dmesg | grep vfio</code>. Dopo correzioni, <code>update-initramfs -u -k all</code> e riavvio pianificato.",
|
||||
"darkTitle": "Consolle Host va scuro dopo il riavvio e non posso SSH in",
|
||||
"darkBody": "Lo schermo nero non prova che l’host sia spento. Se fallisce anche SSH, controlla rete e controller inclusi nel gruppo IOMMU. Recupera accesso via IPMI, seriale o ambiente di ripristino; verifica <code>/etc/pve/qemu-server/<vmid>.conf</code> e annulla solo assegnazioni/regole pertinenti. Non eliminare altra configurazione.",
|
||||
"logTitle": "Controlla il registro di installazione",
|
||||
"logBody": "Ogni esecuzione scrive <code>/tmp/add_gpu_vm.log</code>. Allegalo alle richieste di assistenza."
|
||||
},
|
||||
"revert": {
|
||||
"heading": "Annullare le modifiche manualmente",
|
||||
"intro": "Arresta la VM e rimuovi solo le assegnazioni PCI pertinenti da Hardware o con l’indice esplicito sotto. Non restituisce ancora la GPU al driver host. Usa Cambia modalità GPU per questa transizione e verifica i guest interessati."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Vedi anche",
|
||||
"items": [
|
||||
{
|
||||
"label": "Installare driver NVIDIA (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": " — prepara il driver per schede rimaste sull’host; una GPU in VFIO non può usarlo contemporaneamente."
|
||||
},
|
||||
{
|
||||
"label": "Aggiungi GPU a LXC",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": "— modello alternativo: condividere il GPU con più contenitori invece di dedicarlo a un VM."
|
||||
},
|
||||
{
|
||||
"label": "Cambia modalità GPU (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — passa la stessa GPU fra condivisione e assegnazione esclusiva."
|
||||
},
|
||||
{
|
||||
"label": "Comandi di passaggio GPU",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": "— lspci, IOMMU verifica, qm set hostpci riferimento."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"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 <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> per i nodi <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> pertinenti. Avvia il container, installa i pacchetti userspace della sua distribuzione e, per Intel/AMD, allinea i gruppi <code>video</code> e <code>render</code>. 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ò <em>condividere</em> la GPU fra host e container. Con il <vmLink>passthrough completo a una VM</vmLink>, 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": "<strong>GPU sull’host</strong> Intel, AMD o NVIDIA, rilevata tramite <code>lspci</code>.",
|
||||
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
|
||||
"vfio": "<strong>La GPU non deve essere associata a vfio-pci.</strong> Serve il driver nativo dell’host. Se assegnata a una VM, lo script propone <switchLink>Cambia modalità GPU</switchLink>.",
|
||||
"nvidia": "<strong>Per NVIDIA:</strong> installa prima il driver sull’host. Le librerie del container devono corrispondere alla sua versione. Usa <nvidiaLink>Installa driver NVIDIA sull’host</nvidiaLink>.",
|
||||
"nvidiaCheck": "nvidia-smi",
|
||||
"container": "<strong>Un LXC esistente.</strong> Lo script non lo crea. Supporta entrambi i modi; un container <strong>privilegiato</strong> 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 <code>dev<N></code> e allinea i GID <code>video</code> e <code>render</code> fra host e container. Questo evita di modificare manualmente <code>lxc.idmap</code> per il normale accesso ai dispositivi; verifica comunque i permessi dell’utente dell’app."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire l’installer",
|
||||
"body": "Apri ProxMenux e scegli <strong>Hardware: GPU e Coral-TPU → Aggiungi GPU a LXC</strong>.",
|
||||
"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 <code>lspci</code>. Per NVIDIA verifica il modulo <code>nvidia</code> e <code>nvidia-smi</code>; la versione rilevata determina l’installer <code>.run</code> del container.",
|
||||
"tipTitle": "NVIDIA non pronto?",
|
||||
"tipBody": "Se manca il modulo o NVIDIA non funziona sull’host, usa prima <nvidiaLink>Installa driver NVIDIA sull’host</nvidiaLink> 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": [
|
||||
"<strong>Controllo SR-IOV.</strong> L’assistente blocca VF o PF con VF attive. È un limite della selezione ampia dei dispositivi, non un divieto generale per LXC. Configurali separatamente.",
|
||||
"<strong>Associata a vfio-pci.</strong> Il driver nativo non può creare <code>/dev/dri/*</code> o <code>/dev/nvidia*</code>. Propone <switchLink>Cambia modalità GPU</switchLink>; segui le indicazioni sul riavvio e poi torna.",
|
||||
"<strong>Già configurata.</strong> 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 <code>/etc/pve/lxc/<ctid>.conf</code>. Le voci numerate <code>dev<N></code> includono il GID host di <code>video</code> o <code>render</code>. Le righe bind <code>lxc.mount.entry</code> esistenti per <code>/dev/dri</code> vengono sostituite da voci <code>dev:</code>; 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 <code>pct exec</code>. Rileva la distribuzione da <code>/etc/os-release</code> 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 <code>.run</code> sull’host → <code>pct push</code> → installa con <code>--no-kernel-modules --no-dkms</code>.",
|
||||
"whyTitle": "Perché usa l’installer NVIDIA .run su Debian",
|
||||
"whyBody": "I pacchetti possono non corrispondere all’host. Le librerie <strong>devono corrispondere al modulo host caricato</strong> per NVML e <code>nvidia-smi</code>. Debian/glibc usa il <code>.run</code> della versione host in cache, lo estrae e archivia sull’host, trasferisce con <code>pct push</code> e installa con <code>--no-kernel-modules --no-dkms</code>. 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 <code>video</code> e <code>render</code>, usando 44/104 solo come ripiego, poi modifica <code>/etc/group</code> nel container perché corrispondano; le esecuzioni solo NVIDIA saltano questo passaggio. Voci come <code>video:44</code> e <code>render:104</code> 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 <em>Quick Sync</em>, dipende da generazione del GPU, codec e configurazione dell’app. Lo script condivide quelli tra <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> e <code>renderD129</code> che esistono; altri numeri di nodo non vengono aggiunti. L’host deve già fornirli tramite il proprio driver nativo, per esempio <code>i915</code>.",
|
||||
"amdHeading": "AMD",
|
||||
"amdBody": "AMD usa DRI per Mesa/VA-API. Se l’host espone <code>/dev/kfd</code>, lo condivide. ROCm/OpenCL richiede hardware e librerie compatibili; condividere il dispositivo non installa l’intero stack ROCm.",
|
||||
"nvidiaHeading": "NVIDIA",
|
||||
"nvidiaBody": "Condivide i dispositivi <code>/dev/nvidia*</code>. <strong>Le versioni del driver devono corrispondere</strong> per <code>nvidia-smi</code>. Debian/glibc usa il <code>.run</code> 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 <code>nvidia-smi</code>. L’<nvidiaLink>installer NVIDIA dell’host</nvidiaLink> 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 <code>.run</code> 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 <code>render</code>, poi che l’utente appartenga a <code>render</code>. Se disponibile, aggiungilo a <code>render</code> con <code>usermod -aG render <user></code>, 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 <code>intel-media-driver</code> per Intel recenti supportate, <code>i965-va-driver</code> per quelle vecchie compatibili e <code>mesa-va-drivers</code> per AMD. Il messaggio da solo non prova che manchi un pacchetto.",
|
||||
"logTitle": "Registro d’installazione",
|
||||
"logBody": "Ogni esecuzione scrive <code>/tmp/add_gpu_lxc.log</code> 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."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Installa Coral TPU sull’host | Documentazione ProxMenux",
|
||||
"description": "Installa componenti Coral su Proxmox VE secondo l’hardware rilevato: gasket/apex con DKMS per M.2 / Mini-PCIe e libedgetpu1-std per USB. Se rileva entrambi esegue entrambe le procedure."
|
||||
},
|
||||
"header": {
|
||||
"title": "Installa Coral TPU sull’host",
|
||||
"description": "Prepara l’host Proxmox per Coral e condivisione LXC. Rileva M.2 / Mini-PCIe, USB o entrambi ed esegue la procedura appropriata: moduli DKMS per PCIe e runtime Google Edge TPU per USB.",
|
||||
"section": "Hardware: GPU e Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cosa fa",
|
||||
"body": "Un <strong>installer unico che rileva l’hardware</strong>. PCIe usa <code>gasket</code> e <code>apex</code> con DKMS; le compilazioni future richiedono sorgenti e header compatibili. USB usa <code>libedgetpu1-std</code>. Se rileva entrambi esegue entrambi i percorsi. Il runtime USB deve essere dove gira l’app; per l’uso solo in LXC non è necessariamente richiesto sull’host."
|
||||
},
|
||||
"which": {
|
||||
"heading": "Quale Coral ho?",
|
||||
"body": "I modelli PCIe e USB hanno formato e requisiti diversi. Lo script gestisce entrambi; identifica il dispositivo prima di eseguirlo.",
|
||||
"headerForm": "Fattore di forma",
|
||||
"headerDetect": "Rilevazione",
|
||||
"headerInstall": "Tipo di installazione",
|
||||
"headerReboot": "Riavvio?",
|
||||
"pcieForm": "M.2 / Mini-PCIe",
|
||||
"pcieFormSub": "(schede M.2 con una o due Edge TPU)",
|
||||
"pcieDetect": "ID produttore PCI <code>1ac1</code>",
|
||||
"pcieInstall": "Modulo Kernel (gasket + apex) tramite DKMS",
|
||||
"pcieReboot": "Sì",
|
||||
"usbForm": "Acceleratore USB",
|
||||
"usbFormSub": "(piccolo dongle di plastica)",
|
||||
"usbDetect": "USB <code>1a6e:089a</code> (non programmato) / <code>18d1:9302</code> (programmato)",
|
||||
"usbInstall": "Runtime utente <code>libedgetpu1-std</code> dal repository APT Google",
|
||||
"usbReboot": "No"
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Prima di iniziare",
|
||||
"coral": "<strong>Un Coral collegato</strong> (M.2, Mini-PCIe o USB) per installare. Senza hardware rilevato può pulire o rimuovere componenti esistenti, ma non installa un nuovo percorso hardware.",
|
||||
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||
"internet": "<strong>Accesso a Internet</strong> sull’host per clonare il driver PCIe da GitHub o scaricare <code>libedgetpu1-std</code> dal repository APT Google per USB.",
|
||||
"headers": "<strong>Header del kernel disponibili tramite APT</strong>: <code>proxmox-headers-$(uname -r)</code>. Servono solo per PCIe/M.2; lo script li installa.",
|
||||
"reboot": "<strong>Pianifica un riavvio</strong> per PCIe. Lo script tenta di caricare i moduli compilati; il riavvio verifica anche il caricamento automatico."
|
||||
},
|
||||
"hostPrepTip": {
|
||||
"title": "Questo prepara soltanto l’host",
|
||||
"body": "Prepara l’host per <em>accedere al dispositivo</em>, senza configurare o verificare l’applicazione. Per <em>usare</em> Coral con un’app compatibile come Frigate, prosegui con <lxcLink>Aggiungere Coral TPU a un LXC</lxcLink>."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire l’installer",
|
||||
"body": "Apri ProxMenux sull’host e scegli <strong>Hardware: GPU e Coral-TPU → Installa/aggiorna Coral TPU sull’host</strong>.",
|
||||
"imageAlt": "Voce del menu per installare o aggiornare Coral TPU sull’host"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Come funziona lo script",
|
||||
"body": "Rileva prima l’hardware e prepara il piano adatto. L’installazione richiede conferma."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Procedura passo per passo",
|
||||
"detect": {
|
||||
"title": "Rilevamento hardware",
|
||||
"body": "Cerca il produttore <code>0x1ac1</code> in <code>/sys/bus/pci/devices/*/vendor</code> e usa <code>lsusb</code> per USB. Esistono <strong>due</strong> ID USB secondo lo stato del firmware:",
|
||||
"items": [
|
||||
"<code>1a6e:089a</code> — Global Unichip, stato <em>non programmato</em>, prima che il runtime carichi il firmware.",
|
||||
"<code>18d1:9302</code> — Google, stato <em>programmato</em>, dopo il caricamento del firmware."
|
||||
],
|
||||
"outro": "Senza Coral rilevato né installazione esistente, mostra un avviso ed esce. I componenti già presenti possono aprire il menu di pulizia o rimozione."
|
||||
},
|
||||
"prompt": {
|
||||
"title": "Conferma dell’installazione",
|
||||
"body": "Prima dell’installazione, una finestra elenca dispositivi e componenti previsti. Annullando si salta l’installazione. La pulizia facoltativa dei vecchi componenti ha una conferma precedente separata.",
|
||||
"imageAlt": "Riepilogo dei dispositivi Coral e dei passaggi d’installazione"
|
||||
},
|
||||
"pcie": {
|
||||
"title": "PCIe: moduli gasket e apex tramite DKMS",
|
||||
"body": "Eseguito solo se rileva un Coral PCIe/M.2. Compila i moduli per il kernel attualmente in esecuzione sull’host.",
|
||||
"items": [
|
||||
"<strong>Pulizia.</strong> Qualsiasi pacchetto <code>gasket-dkms</code> esistente viene rimosso prima della ricompilazione; se è in uno stato incoerente, lo script ne forza la rimozione e la purga.",
|
||||
"<strong>Dipendenze di compilazione:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||
],
|
||||
"cloneIntro": "<strong>Clona i sorgenti del driver.</strong> Preferisce <feranickLink>feranick/gasket-driver</feranickLink>, altrimenti usa <googleLink>google/gasket-driver</googleLink>. La compilazione dipende dalla compatibilità del kernel. Applica queste patch ai sorgenti Google secondo la versione:",
|
||||
"kernelPatches": [
|
||||
"Da kernel 6.5, la patch sostituisce <code>no_llseek</code> con <code>noop_llseek</code> nei sorgenti alternativi.",
|
||||
"Kernel 6.13 o superiore: converte l’argomento di <code>MODULE_IMPORT_NS(DMA_BUF)</code> in una stringa letterale."
|
||||
],
|
||||
"afterItems": [
|
||||
"<strong>Copia i sorgenti in <code>/usr/src/gasket-1.0/</code>,</strong> genera <code>dkms.conf</code> e li registra con <code>dkms add</code>.",
|
||||
"<strong>Compila e installa:</strong> <code>dkms build</code>, poi <code>dkms install</code>. In caso di errore mostra le ultime 50 righe di <code>make.log</code>, se disponibile.",
|
||||
"<strong>Crea il gruppo <code>apex</code> e le regole udev</strong> (<code>/etc/udev/rules.d/99-coral-apex.rules</code>) per assegnare il gruppo a <code>/dev/apex_*</code>.",
|
||||
"<strong>Tenta di caricare i moduli:</strong> <code>modprobe gasket</code> e <code>modprobe apex</code>."
|
||||
],
|
||||
"imageAlt": "Compilazione DKMS e caricamento dei moduli gasket/apex"
|
||||
},
|
||||
"usb": {
|
||||
"title": "USB: runtime Edge TPU di Google",
|
||||
"body": "Funziona solo se è stato rilevato un acceleratore USB. Molto più semplice:",
|
||||
"items": [
|
||||
"<strong>Aggiunge la chiave GPG Google</strong> in <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
|
||||
"<strong>Aggiunge il repository APT</strong> in <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>; <code>signed-by=</code> limita la verifica al suo portachiavi. Usa sintassi .list su una riga, non .sources deb822.",
|
||||
"<strong>Installa <code>libedgetpu1-std</code></strong>, il runtime Edge TPU con prestazioni standard.",
|
||||
"<strong>Ricarica udev</strong> e applica le regole del pacchetto al dispositivo USB."
|
||||
],
|
||||
"stdTitle": "Perché libedgetpu1-std e non libedgetpu1-max?",
|
||||
"stdBody": "Il pacchetto <code>max</code> attiva la frequenza massima supportata, aumentando prestazioni, consumo e calore. Verifica raffreddamento e condizioni operative dell’acceleratore. I pacchetti si escludono a vicenda; passa all’altro con <code>apt install libedgetpu1-max</code>."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Riavvio facoltativo dopo l’installazione PCIe",
|
||||
"body": "Dopo PCIe propone un riavvio. Ha tentato <code>modprobe</code>; verifica i moduli e <code>/dev/apex_0</code> con gruppo <code>apex</code>. Un riavvio pianificato controlla il caricamento automatico. Con solo USB non propone il riavvio dell’host.",
|
||||
"imageAlt": "Riepilogo e proposta di riavvio dopo l’installazione PCIe"
|
||||
}
|
||||
},
|
||||
"legacyCleanup": {
|
||||
"heading": "Rimuovere il vecchio gasket-dkms dagli host che usano solo USB",
|
||||
"intro": "Se <strong>non rileva Coral PCIe/M.2</strong> ma esiste una precedente installazione di <code>gasket-dkms</code>, propone una pulizia facoltativa con conferma.",
|
||||
"items": [
|
||||
"Se rileva un Coral PCIe/M.2, usa il normale percorso di ricompilazione DKMS e non propone questa pulizia.",
|
||||
"Elimina <code>gasket-dkms</code>, registrazioni DKMS e vecchi sorgenti gasket, poi ripara lo stato in sospeso di <code>dpkg</code>/APT.",
|
||||
"Mantiene i pacchetti USB <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code>, quindi il Coral USB conserva il runtime.",
|
||||
"Lo script verifica che il pacchetto legacy è andato e che la gestione dei pacchetti è sana prima di segnalare il successo."
|
||||
],
|
||||
"warningTitle": "Confermare l'hardware prima",
|
||||
"warningBody": "Se un Coral PCIe/M.2 previsto non appare, annulla la pulizia e controlla scheda, slot e firmware."
|
||||
},
|
||||
"reinstallUninstall": {
|
||||
"heading": "Reinstallare o disinstallare",
|
||||
"intro": "Se rileva un’installazione PCIe con <code>gasket-dkms</code>, USB con <code>libedgetpu1-std</code>/<code>libedgetpu1-max</code> o entrambe, mostra un menu di azioni.",
|
||||
"imageAlt": "Menu per reinstallare, aggiornare o disinstallare Coral",
|
||||
"imageCaption": "Il menu appare se esiste un componente: registrazione DKMS gasket, pacchetto <code>libedgetpu1-*</code> o dispositivi <code>/dev/apex_*</code>.",
|
||||
"reinstallHeading": "Reinstallare / aggiornare",
|
||||
"reinstallBody": "Segue l’installazione normale: ricompila dopo un cambio di kernel o aggiorna <code>libedgetpu1-*</code> da Google. Prima pulisce lo stato DKMS precedente per evitare che un tentativo fallito blocchi la compilazione.",
|
||||
"uninstallHeading": "Disinstallare — ciò che viene rimosso",
|
||||
"uninstallIntro": "Richiede conferma. Le app LXC che usano <code>/dev/apex_*</code> possono perdere l’accesso durante la rimozione o dopo il riavvio. Procedura:",
|
||||
"uninstallItems": [
|
||||
"Tenta di scaricare <code>apex</code> e <code>gasket</code>; l’uso da parte di processi attivi può impedirlo.",
|
||||
"Rimuove ogni voce DKMS-registrato <code>gasket/<version></code> in modo che i moduli non ritornino sul prossimo kernel install.",
|
||||
"Elimina completamente <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code>, poi esegue <code>apt-get autoremove --purge</code>.",
|
||||
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e ripristina il gruppo predefinito in <code>60-gasket-dkms.rules</code>, se esiste ancora.",
|
||||
"Controlla i membri supplementari di <code>apex</code>. <strong>Se l’elenco è vuoto</strong>, tenta di rimuovere il gruppo; altrimenti mantiene <code>apex</code> ed elenca i membri. Non verifica completamente gli utenti che lo hanno come gruppo principale.",
|
||||
"Rimuove l’elenco dei repository <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, il vecchio <code>coral-cloud.list</code> e i vecchi portachiavi chiamati <code>coral-edgetpu-archive-keyring.gpg</code>. Il portachiavi attuale in <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> non viene rimosso da questa sequenza.",
|
||||
"Propone un riavvio <strong>solo se PCIe era installato</strong> per scaricare i moduli ancora attivi. Rimuovere solo USB non richiede riavvio."
|
||||
],
|
||||
"lxcWarnTitle": "LXC contenitori con apex passthrough",
|
||||
"lxcWarnBody": "Rimuovere i componenti dell’host può interrompere l’accesso LXC. Pianifica una manutenzione se app compatibili come Frigate dipendono da questo Coral."
|
||||
},
|
||||
"updates": {
|
||||
"heading": "Notifiche di aggiornamento",
|
||||
"intro": "ProxMenux registra i componenti Coral e verifica PCIe/M.2 e USB separatamente. Se sono presenti entrambi, ogni variante usa la propria fonte delle versioni:",
|
||||
"headerVariant": "Variante",
|
||||
"headerTracked": "Versione registrata",
|
||||
"headerUpstream": "Fonte delle versioni",
|
||||
"pcieVariant": "PCIe / M.2",
|
||||
"pcieTracked": "Prima il tag registrato dopo l’installazione riuscita, poi la versione del pacchetto <code>gasket-dkms</code> integro, altrimenti quella DKMS. Quest’ultima non identifica il livello di patch del fork.",
|
||||
"pcieUpstream": "Ultimo tag GitHub di <code>feranick/gasket-driver</code>; cache di sette giorni e confronto del numero di build.",
|
||||
"usbVariant": "USB",
|
||||
"usbTracked": "<code>libedgetpu1-std</code> o <code>libedgetpu1-max</code> versione apt",
|
||||
"usbUpstream": "Candidato locale <code>apt-cache policy</code> (Google Coral apt repo)",
|
||||
"outro": "Se rileva una nuova versione, Monitor invia <code>coral_driver_update_available</code> sui canali abilitati. La notifica rimanda all’installer: scegli <strong>Reinstalla / aggiorna</strong>.",
|
||||
"antiTitle": "Niente notifiche ripetute",
|
||||
"antiBody": "Una notifica per variante quando cambia la versione disponibile. Non la ripete a ogni controllo giornaliero; avvisa di nuovo con una versione successiva.",
|
||||
"rebootTitle": "Aggiornamenti PCIe: pianifica un riavvio",
|
||||
"rebootBody": "Il modulo PCIe ricompilato deve essere caricato; un riavvio pianificato verifica anche il caricamento automatico. Aggiornare la libreria USB non richiede il riavvio dell’host, ma può richiedere quello delle app che usavano la precedente."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Procedura manuale equivalente",
|
||||
"intro": "Questi comandi mostrano i passaggi principali di ogni percorso per consultarli o eseguirli manualmente.",
|
||||
"pcieHeading": "PCIe / M.2 (gasket + apex tramite DKMS)",
|
||||
"usbHeading": "USB (runtime libedgetpu)"
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Verifica",
|
||||
"pcieHeading": "PCIe / M.2",
|
||||
"usbHeading": "USB"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Risoluzione dei problemi",
|
||||
"dkmsFailTitle": "Compilazione DKMS fallita dopo un aggiornamento del kernel",
|
||||
"dkmsFailBody": "Gli header mancanti sono una possibile causa. Verifica <code>proxmox-headers-$(uname -r)</code> con <code>dpkg -l proxmox-headers-$(uname -r)</code> e installali se assenti. Controlla le incompatibilità nel log. Ripetere esegue <code>cleanup_broken_gasket_dkms</code>, senza garantire compatibilità con ogni kernel.",
|
||||
"apexMissTitle": "/dev/apex_0 mancante dopo il riavvio",
|
||||
"apexMissBody": "Verifica rilevamento PCIe e compatibilità del modulo con il kernel attivo. Prova <code>modprobe apex</code> e controlla <code>dmesg | grep -iE \"apex|gasket\"</code>. Errori di compilazione, caricamento o configurazione slot/firmware possono impedire la creazione del dispositivo.",
|
||||
"lxcMissTitle": "L’host vede /dev/apex_0, ma il LXC no",
|
||||
"lxcMissBody": "Un nodo visibile non prova il funzionamento. Verifica accesso sull’host, montaggio LXC, regole cgroup e permessi UID/GID. Vedi <lxcLink>Aggiungere Coral TPU a un LXC</lxcLink>.",
|
||||
"usbUnreachTitle": "Acceleratore USB rilevato ma Frigate / TFLite non può raggiungerlo",
|
||||
"usbUnreachBody": "Verifica le regole di <code>libedgetpu1-std</code> e i permessi con <code>ls -l /dev/bus/usb/*/*</code>. L’utente/gruppo mappato dell’app deve poter leggere e scrivere; root come proprietario non è di per sé un errore. Dopo modifiche esegui <code>udevadm control --reload-rules && udevadm trigger</code> e ricollega se necessario.",
|
||||
"logTitle": "Registro d’installazione",
|
||||
"logBody": "Ogni esecuzione scrive <code>/tmp/coral_install.log</code>. Se DKMS fallisce e il log esiste, aggiunge le ultime 50 righe di <code>/var/lib/dkms/gasket/1.0/build/make.log</code>. Allegalo alle richieste di assistenza."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Vedi anche",
|
||||
"items": [
|
||||
{
|
||||
"label": "Aggiungi Coral TPU a LXC",
|
||||
"href": "/docs/hardware/coral-tpu-lxc",
|
||||
"tail": " — rendere disponibile il Coral dell’host a un container con un’app compatibile."
|
||||
},
|
||||
{
|
||||
"label": "Installare driver NVIDIA (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": "— stessa idea per le GPU NVIDIA."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Scheda hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — il pannello Coral mostra driver, moduli, dispositivi e runtime, oltre alla temperatura se disponibile tramite un sensore supportato."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Installa NVIDIA sull’host | Documentazione ProxMenux",
|
||||
"description": "Installa i driver proprietari NVIDIA su Proxmox VE con ProxMenux: filtro GPU, verifiche di compilazione e DKMS, persistenza, patch NVENC facoltativa e aggiornamento delle librerie LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Installare driver NVIDIA sull'host",
|
||||
"description": "Installa NVIDIA sull’host Proxmox VE. Filtra i rami mantenuti per ID PCI del GPU, verifica la compilazione, usa DKMS, gestisce nouveau e installa la persistenza. Può anche aggiornare le librerie dei LXC con accesso NVIDIA.",
|
||||
"section": "Hardware: GPU e Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cosa fa",
|
||||
"body": "ProxMenux rileva il GPU e propone rami NVIDIA mantenuti che includono il suo ID PCI. Blocca <code>nouveau</code>, scarica l’installer ufficiale <code>.run</code>, usa DKMS, installa <code>nvidia-persistenced</code>, le regole udev e NVIDIA Container Toolkit e propone una patch NVENC facoltativa. I controlli di compilazione riguardano il kernel in esecuzione; una compilazione riuscita non garantisce che ogni app funzioni. Ai LXC NVIDIA esistenti viene proposto un aggiornamento delle librerie userspace, con versione corrispondente tranne su Arch."
|
||||
},
|
||||
"who": {
|
||||
"heading": "Per chi è questo?",
|
||||
"body": "Per video o calcolo accelerato con Plex, Jellyfin, Frigate, Immich o Stable Diffusion <strong>in LXC</strong>, installa prima NVIDIA sull’<em>host</em> Proxmox. L’assegnazione diretta a una <strong>VM</strong> usa la procedura VFIO separata."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Prima di iniziare",
|
||||
"gpu": "<strong>Un GPU NVIDIA</strong> installato nell’host. Il rilevamento è automatico; questa opzione non gestisce AMD o Intel.",
|
||||
"gpuCheck": "lspci | grep -i nvidia",
|
||||
"notVm": "Il GPU <strong>non deve essere riservato a una VM tramite VFIO</strong>. L’installer rifiuta questo caso per non interferire con l’assegnazione.",
|
||||
"internet": "Accesso Internet sull’host. Scarica il driver da <code>download.nvidia.com</code> e può clonare <code>nvidia-persistenced</code> e <code>nvidia-patch</code> da GitHub.",
|
||||
"space": "Prevedi spazio in <code>/opt/nvidia</code> per <code>.run</code> e RAM per compilare. Il percorso LXC non-Arch verifica 1500 MiB liberi e può richiedere temporaneamente 2048 MiB di RAM se inferiore, ripristinando poi il limite precedente. Prevedi il riavvio dell’host."
|
||||
},
|
||||
"vmWarn": {
|
||||
"title": "GPU riservato a una VM? Fermati qui",
|
||||
"body": "Se un dispositivo NVIDIA è associato a <code>vfio-pci</code>, l’installer esce anche con VM ferma. Una riserva non implica utilizzo attivo. Pianifica il ritorno al driver host e rimuovi assegnazioni VM/VFIO obsolete prima di riavviare e installare."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire l'installatore",
|
||||
"body": "Apri <strong>Hardware Graphics → NVIDIA GPU Driver Installer</strong> in ProxMenux. Il menu dipende dalla presenza di un driver attivo.",
|
||||
"imageAlt": "Menu hardware con installer NVIDIA evidenziato"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Come funziona lo script",
|
||||
"body": "Rileva dispositivi, seleziona una versione e installa. Una pulizia VFIO con conferma separata può precedere la panoramica. Preparazione di repository/header e download precedono la sostituzione del driver; non tutte le modifiche iniziano dopo un’unica conferma finale."
|
||||
},
|
||||
"walkthrough": {
|
||||
"detect": {
|
||||
"title": "GPU rilevamento e panoramica",
|
||||
"body1": "Mostra controller video NVIDIA, stato del driver o <em>«Nessun driver NVIDIA installato»</em> e i LXC configurati per NVIDIA con la loro versione interna.",
|
||||
"body2": "Verifica GPU e versioni di host/container. Annulla nella panoramica se la scelta non è quella prevista; una pulizia VFIO confermata prima è già stata applicata.",
|
||||
"imageAlt": "Panoramica prima dell’installazione: GPU, driver e LXC NVIDIA"
|
||||
},
|
||||
"version": {
|
||||
"title": "Scegli la versione del driver",
|
||||
"body1": "Filtra le versioni di <code>nvidia.com</code> che <strong>includono l’ID PCI del GPU nella tabella dei chip supportati</strong> ed esclude versioni beta/sviluppo tramite euristiche. <em><versione> — Consigliata</em> privilegia l’ultima della branca installata, poi Production Branch e infine il numero di versione supportato più alto.",
|
||||
"body2": "Se il driver risulta modificato con keylase, la selezione si limita alla tabella NVENC. <em>Reinstalla / aggiorna</em> mantiene conferme e scelta della patch; verifica il risultato finale.",
|
||||
"whyTitle": "Come viene validata la compatibilità del kernel",
|
||||
"whyBody": "Filtra per rami mantenuti e ID PCI, senza matrice fissa kernel/driver. Una compilazione preliminare verifica il kernel attuale. Un errore confermato riporta alla selezione; se il test non è disponibile può avvisare e continuare. Restano necessarie installazione e verifica del funzionamento.",
|
||||
"imageAlt": "Selettore dei rami compatibili GPU con versione consigliata in cima"
|
||||
},
|
||||
"uninstall": {
|
||||
"title": "Rimuovere il driver precedente prima di reinstallare",
|
||||
"body": "Dopo download e verifica dell’installer scelto, rimuove il driver precedente. Ferma servizi NVIDIA, scarica moduli, rimuove voci DKMS e disinstalla <code>nvidia-*</code> / <code>libnvidia-*</code> / <code>cuda-*</code>. Vale anche per la reinstallazione confermata della stessa versione."
|
||||
},
|
||||
"prepare": {
|
||||
"title": "Preparare il sistema",
|
||||
"body": "Durante la preparazione, lo script:",
|
||||
"items": [
|
||||
"Controlla i repository prima di rimuovere o installare componenti. Senza abbonamento e con solo Enterprise, chiede di passare a no-subscription; se rifiuti, ferma l’installazione.",
|
||||
"Installa <code>pve-headers-$(uname -r)</code> (o <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> e <code>dkms</code>.",
|
||||
"Crea il file gestito da ProxMenux <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> con <code>blacklist nouveau</code> e <code>options nouveau modeset=0</code>. Registra l’eventuale riga aggiunta a <code>blacklist.conf</code> e tenta di scaricare nouveau.",
|
||||
"Scrive <code>/etc/modules-load.d/nvidia-vfio.conf</code> con <code>nvidia</code> e <code>nvidia_uvm</code> così i moduli caricano presto al boot."
|
||||
]
|
||||
},
|
||||
"download": {
|
||||
"title": "Scaricare ed eseguire l'installatore NVIDIA",
|
||||
"body": "Scarica <code>NVIDIA-Linux-x86_64-<version>.run</code> in <code>/opt/nvidia</code> e verifica dimensione e tipo eseguibile. Sono controlli di formato, non della firma crittografica. Registra DKMS per ricompilare ai cambi di kernel; sorgenti e kernel devono restare compatibili.",
|
||||
"imageAlt": "Avanzamento del download e compilazione DKMS dell’installer NVIDIA"
|
||||
},
|
||||
"persist": {
|
||||
"title": "Servizio di persistenza e regole udev",
|
||||
"body": "Installa <persistLink>nvidia-persistenced</persistLink> e scrive <code>/etc/udev/rules.d/70-nvidia.rules</code> per creare <code>/dev/nvidia*</code> all’avvio. Aiuta a evitare accessi LXC prima che i dispositivi siano disponibili."
|
||||
},
|
||||
"nvenc": {
|
||||
"title": "Opzionale: applicare la patch NVENC",
|
||||
"body": "I limiti di sessioni NVENC dipendono da GPU e driver. <patchLink>keylase/nvidia-patch</patchLink> può rimuovere il limite del driver per versioni supportate. Scegli <strong>Sì</strong> se serve questa modifica alla codifica e la versione è compatibile. Non accelera la decodifica né elimina i limiti hardware.",
|
||||
"supportTitle": "Verifica il supporto della patch",
|
||||
"supportBody": "Cerca la versione esatta nella <patchTableLink>tabella delle patch</patchTableLink>. Se manca, usa il driver senza patch o scegli un’altra versione mantenuta compatibile con GPU, kernel e patch; non basta che sia vicina nell’elenco."
|
||||
},
|
||||
"propagate": {
|
||||
"title": "Facoltativo: aggiorna librerie NVIDIA nei LXC",
|
||||
"body1": "Propone di aggiornare le librerie del driver nei LXC rilevati. Queste e il modulo host <strong>devono avere versioni corrispondenti</strong>; altrimenti <code>nvidia-smi</code> può mostrare «version mismatch».",
|
||||
"body2": "Debian / Ubuntu e altri container glibc ricevono l’installer <code>.run</code> estratto con <code>--no-kernel-modules --no-dkms --no-install-compat32-libs</code>; la RAM può salire temporaneamente a 2 GiB e poi essere ripristinata. <strong>Arch, Manjaro ed EndeavourOS</strong> usano <code>pacman -Syu nvidia-utils</code> dai repository, senza fissare la versione host: verifica il risultato. <strong>Alpine</strong> riceve il contenuto <code>.run</code> estratto tramite <code>pct push</code>, installa <code>gcompat</code> e <code>binutils</code> con <code>apk</code> e crea link SONAME con <code>readelf</code>. Verifica il funzionamento: la compatibilità non garantisce ogni libreria su musl.",
|
||||
"imageAlt": "Dialogo con LXC NVIDIA e versioni per confermare l’aggiornamento"
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Riavvia",
|
||||
"body": "Dopo l’installazione del driver, lo script rigenera <code>initramfs</code> per tutti i kernel; il suo ultimo passaggio propone il riavvio. <strong>Prevedi questo riavvio</strong> per verificare la configurazione persistente dei moduli e di nouveau a un nuovo avvio, anche se il nuovo driver risponde già prima del riavvio."
|
||||
}
|
||||
},
|
||||
"reinstallUninstall": {
|
||||
"heading": "Reinstallare o disinstallare",
|
||||
"intro": "Se <code>nvidia</code> è caricato e <code>nvidia-smi</code> restituisce una versione, mostra un menu di azioni. Rileva così un driver attivo; possono esserci file installati anche senza modulo caricato.",
|
||||
"imageAlt": "Menu di azione NVIDIA offerto quando un driver è già installato — due scelte: Reinstallare / aggiornare il driver, o disinstallare completamente il driver NVIDIA",
|
||||
"imageCaption": "Il menu di azione appare solo quando un driver NVIDIA è attualmente attivo sull'host.",
|
||||
"reinstallHeading": "Reinstallare / aggiornare",
|
||||
"reinstallBody": "Seleziona la versione, prepara repository/header, scarica e verifica la compilazione prima di sostituire il driver. Permette aggiornamenti nel ramo mantenuto o un altro ramo supportato. Dopo ripropone le opzioni per librerie LXC e patch NVENC.",
|
||||
"uninstallHeading": "Disinstallare — ciò che viene rimosso",
|
||||
"uninstallIntro": "Dopo conferma Sì/No, rimuove i seguenti componenti:",
|
||||
"uninstallItems": [
|
||||
"Ferma e disabilita <code>nvidia-persistenced</code> e <code>nvidia-powerd</code>, tenta di scaricare <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code>, poi esegue <code>nvidia-uninstall --silent</code> per l’installazione <code>.run</code>. I carichi di lavoro LXC che dipendono da NVIDIA sono coinvolti; client attivi possono impedire lo scaricamento.",
|
||||
"Esegue <code>apt purge</code> su <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, rimuove l'albero sorgente DKMS e le cartelle <code>nvidia-persistenced</code> e <code>nvidia-patch</code> in <code>/opt/nvidia</code>.",
|
||||
"Rimuove la configurazione di caricamento moduli <code>/etc/modules-load.d/nvidia-vfio.conf</code> e le regole nouveau gestite da ProxMenux. Migra e rimuove anche i vecchi file ProxMenux con le due righe note; conserva i file modificati o estranei dell’amministratore.",
|
||||
"Rimuove <code>/etc/udev/rules.d/70-nvidia.rules</code> e imposta NVENC su <em>removed</em> nel registro delle installazioni gestite; non esiste un file di stato separato.",
|
||||
"Rigenera <code>initramfs</code> per tutti i kernel, esegue <code>proxmox-boot-tool refresh</code> secondo la configurazione di avvio e chiede di riavviare."
|
||||
],
|
||||
"lxcWarnTitle": "LXC con accesso NVIDIA",
|
||||
"lxcWarnBody": "Rimuovere il driver host interrompe le app LXC NVIDIA anche se restano installate le librerie. Pianifica manutenzione per Frigate, Plex, Jellyfin, Ollama e altre app GPU."
|
||||
},
|
||||
"updates": {
|
||||
"heading": "Notifiche sugli aggiornamenti",
|
||||
"body": "Il driver NVIDIA installato viene registrato nell’elenco delle installazioni gestite da ProxMenux. All’avvio e ogni 24 ore, il Monitor confronta le versioni disponibili su <code>download.nvidia.com/XFree86/Linux-x86_64/</code> con la versione indicata da <code>nvidia-smi</code>. La notifica viene inviata solo quando è disponibile una versione di manutenzione più recente nello stesso ramo del driver installato.",
|
||||
"kindsHeading": "Messaggio di aggiornamento",
|
||||
"kindsItems": [
|
||||
"<strong>Manutenzione nello stesso ramo.</strong> Esempio: 580.65.06 installata → 580.105.08 disponibile. Monitor non deduce compatibilità del kernel tra rami."
|
||||
],
|
||||
"antiTitle": "Evitare notifiche ripetute",
|
||||
"antiBody": "Una notifica per nuova versione, non a ogni controllo giornaliero. Nessuna notifica se non esistono versioni più recenti nel ramo installato.",
|
||||
"applyTitle": "Applicare l'aggiornamento",
|
||||
"applyBody": "Monitor segnala gli aggiornamenti senza installarli automaticamente. Apri l’installer, scegli <strong>Reinstalla / aggiorna</strong> e una versione supportata, poi completa compilazione e installazione. Prevedi il riavvio proposto e verifica poi host e librerie LXC."
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Verifica dell'installazione",
|
||||
"intro": "Dopo il riavvio dell’host, accedi tramite SSH o shell Proxmox ed esegui:",
|
||||
"after": "Verifica GPU e versione prevista. Possono già comparire processi se servizi host o container avviati automaticamente usano il GPU. Poi controlla la persistenza:",
|
||||
"imageAlt": "Output di nvidia-smi sull’host con GPU rilevato e versione del driver installata"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Risoluzione dei problemi",
|
||||
"smiFailTitle": "nvidia-smi mostra «NVIDIA-SMI has failed»",
|
||||
"smiFailBody": "Possibili cause: <strong>nouveau</strong>, <strong>header assenti o incompatibili</strong>, sorgenti del driver incompatibili o altri errori di caricamento. Controlla <code>lsmod | grep nouveau</code>, <code>dmesg | grep -i nvidia</code> e registri installer/DKMS. Se serve correggere nouveau, verifica <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> prima di <code>update-initramfs -u -k all</code> e del riavvio. Non ogni errore di compilazione riguarda gli header.",
|
||||
"lxcMissTitle": "Il contenitore LXC non può vedere il GPU dopo l'aggiornamento dell'host",
|
||||
"lxcMissBody": "Prima di reinstallare controlla dispositivi host, permessi LXC e versione delle librerie. Un conflitto richiede eventualmente il driver utente corrispondente tramite il percorso supportato della distribuzione; su glibc usa <code>--no-kernel-modules</code>. Le librerie non correggono montaggi o permessi mancanti.",
|
||||
"logTitle": "Controlla il registro di installazione",
|
||||
"logBody": "L’installazione scrive in <code>/tmp/nvidia_install.log</code>. In caso di errore controlla download, compilazione DKMS e servizi. Allega il registro alla segnalazione GitHub."
|
||||
},
|
||||
"manualSteps": {
|
||||
"heading": "Cerchi i passaggi manuali?",
|
||||
"body": "Vedi <guideLink>Guide → NVIDIA</guideLink> per le basi manuali, inclusi <code>wget</code> e <code>./NVIDIA-Linux-...run</code>. Spiega i componenti senza riprodurre esattamente l’installer. La procedura mantenuta ProxMenux offre filtro GPU, verifica di compilazione, aggiornamenti LXC e controlli VFIO."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Vedi anche",
|
||||
"items": [
|
||||
{
|
||||
"label": "Aggiungi GPU a VM (Passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — assegnare NVIDIA direttamente a una VM tramite VFIO."
|
||||
},
|
||||
{
|
||||
"label": "Aggiungi GPU a LXC",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — condividere NVIDIA con uno o più container."
|
||||
},
|
||||
{
|
||||
"label": "Cambia modalità GPU (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — passare da passthrough VM a condivisione LXC e viceversa."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Scheda hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — finestra GPU che apre questo installer e mostra il monitoraggio in tempo reale."
|
||||
},
|
||||
{
|
||||
"label": "Comandi per passthrough GPU",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": "— lspci / dmesg / IOMMU / nvidia-smi riferimento."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Cambia modalità GPU (VM ↔ LXC) | Documentazione ProxMenux",
|
||||
"description": "Passa un GPU da VFIO per VM al driver nativo per LXC o viceversa. ProxMenux rileva il driver, propone come gestire gli ospiti coinvolti, rimuove l’audio associato e rigenera initramfs se cambia la configurazione dell’host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Cambia modalità GPU (VM ↔ LXC)",
|
||||
"description": "Passa un GPU assegnato tra passthrough VM e condivisione LXC. ProxMenux gestisce driver, VFIO, moduli e initramfs e chiede come trattare gli ospiti coinvolti. Controlla le scelte e verifica il risultato dopo il riavvio.",
|
||||
"section": "Hardware: GPU e Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cosa fa",
|
||||
"body": "Con <code>vfio-pci</code> il GPU è riservato a una VM. Con il driver nativo <em>(i915 / amdgpu / nvidia)</em>, host e LXC possono condividerlo. <strong>Cambia modalità GPU</strong> gestisce <code>vfio.conf</code>, blocchi dei moduli e riferimenti negli ospiti, segnalando le assegnazioni residue."
|
||||
},
|
||||
"graphics": {
|
||||
"lxcTitle": "Pronto per container LXC",
|
||||
"lxcDesc": "Driver nativo attivo",
|
||||
"vmTitle": "Pronto per passthrough VM",
|
||||
"vmDesc": "Driver VFIO-PCI attivo"
|
||||
},
|
||||
"when": {
|
||||
"heading": "Quando dovrei usarlo?",
|
||||
"intro": "Usalo se il GPU è <strong>già assegnato</strong> e vuoi cambiarne l’utilizzo:",
|
||||
"headerSituation": "Situazione",
|
||||
"headerUse": "Usa questa pagina?",
|
||||
"rows": [
|
||||
{
|
||||
"situation": "GPU libero, mai assegnato: usarlo in una VM.",
|
||||
"useRich": "No — usa <vmLink>Aggiungi GPU a VM</vmLink>"
|
||||
},
|
||||
{
|
||||
"situation": "GPU libero, mai assegnato: usarlo in un LXC.",
|
||||
"useRich": "No — usa <lxcLink>Aggiungi GPU a LXC</lxcLink>"
|
||||
},
|
||||
{
|
||||
"situationRich": "Il GPU è assegnato a una VM tramite <code>vfio-pci</code>, ma voglio usarlo in un LXC.",
|
||||
"useRich": "<strong>Sì — questa pagina.</strong>"
|
||||
},
|
||||
{
|
||||
"situation": "Il GPU è condiviso con un LXC; voglio dedicarlo a una VM.",
|
||||
"useRich": "<strong>Sì — questa pagina.</strong>"
|
||||
},
|
||||
{
|
||||
"situation": "Voglio rimuovere tutte le assegnazioni di questo GPU.",
|
||||
"use": "La modalità LXC restituisce il GPU al driver host; la politica di conflitto VM può rimuovere le voci hostpci, ma le voci dei dispositivi LXC vanno rimosse separatamente. Il GPU resta associato a un driver."
|
||||
}
|
||||
]
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Prima di iniziare",
|
||||
"assigned": "<strong>Un GPU già assegnato</strong> a una VM tramite VFIO o a un LXC. Per la prima assegnazione usa Aggiungi GPU a VM / LXC.",
|
||||
"iommu": "<strong>IOMMU deve essere attivo sull’host</strong> passando <em>alla</em> modalità VM. Contano sia le impostazioni del firmware sia il supporto del kernel. Se <code>intel_iommu=on</code> o <code>amd_iommu=on</code> manca nel kernel in esecuzione, lo script lo aggiunge con <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marcatore di root ZFS) o a <code>/etc/default/grub</code>, poi esegue <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Controlla eventuali avvisi e riavvia quando richiesto.",
|
||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||
"reboot": "<strong>Prevedi un riavvio.</strong> Le modifiche persistenti a driver e avvio possono richiedere la rigenerazione di initramfs e un riavvio. Lo script lo propone al termine.",
|
||||
"knowList": "<strong>Identifica VM e LXC che usano il GPU.</strong> Lo script rileva i riferimenti e chiede come trattare ogni ospite; conoscere l’elenco facilita la verifica."
|
||||
},
|
||||
"blocklist": {
|
||||
"title": "Non tutte le GPU sono sicure per passare a un VM",
|
||||
"body": "Lo script blocca la modalità VM per gli ID dispositivo <code>8086:5a84</code> e <code>8086:5a85</code> secondo la propria politica di compatibilità. Se un GPU selezionato corrisponde, interrompe il passaggio alla modalità VM e torna alla selezione del GPU, oppure esce se è l’unico GPU. Questa blocklist non impedisce il passaggio <em>alla</em> modalità LXC; altri controlli possono comunque applicarsi."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Eseguire lo script",
|
||||
"body": "Apri <strong>Hardware: GPU e Coral-TPU → Cambia modalità GPU (VM ↔ LXC)</strong> in ProxMenux.",
|
||||
"imageAlt": "Voce Cambia modalità GPU (VM ↔ LXC) nel menu hardware"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Come funziona lo script",
|
||||
"body": "La scelta del GPU e della direzione precede il cambio principale. Una pulizia VFIO separata può chiedere conferma prima; gli ospiti coinvolti hanno dialoghi propri. Leggi ogni conferma: non esiste un’unica conferma finale per tutte le modifiche."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Procedura passo per passo",
|
||||
"detect": {
|
||||
"title": "Rilevare GPU e driver attuale",
|
||||
"body": "Esamina i controller VGA, 3D e Display dell’host e consulta <code>/sys/bus/pci/devices/*/driver</code>. Mostra nome, indirizzo PCI e driver attuale di ogni GPU per identificarne la modalità.",
|
||||
"imageAlt": "Elenco di controllo GPU che mostra ogni GPU rilevato con il suo driver corrente (vfio-pci / nvidia / amdgpu / i915) e slot PCI"
|
||||
},
|
||||
"pickGpu": {
|
||||
"title": "Scegli i GPU da cambiare",
|
||||
"body": "Un solo GPU viene selezionato automaticamente. Con più GPU puoi selezionarne diversi, purché siano nella <em>stessa</em> modalità. Se le modalità sono miste, devi restringere la selezione.",
|
||||
"tipTitle": "Cambiare più GPU insieme",
|
||||
"tipBody": "Esempio: passare tre NVIDIA alla modalità VM, poi riportare l’iGPU a LXC. Due esecuzioni, ciascuna con destinazione comune, anziché cambiare ogni scheda separatamente."
|
||||
},
|
||||
"direction": {
|
||||
"title": "Rivedere la direzione proposta",
|
||||
"intro": "Sulla base della modalità corrente, lo script propone il contrario come obiettivo:",
|
||||
"items": [
|
||||
"<strong>VM → LXC:</strong> rimuove l’associazione a <code>vfio-pci</code> affinché il driver nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa usare il GPU. Per NVIDIA elimina le voci BDF corrispondenti da <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> per il prossimo avvio.",
|
||||
"<strong>LXC → VM:</strong> prepara l’associazione a <code>vfio-pci</code>. AMD / Intel bloccano il driver nativo e usano <code>options vfio-pci ids=…</code>. Per NVIDIA, <code>nvidia</code> viene bloccato globalmente solo quando ogni GPU NVIDIA dell’host è in VFIO; altrimenti regole per BDF applicano <code>driver_override=vfio-pci</code> ai dispositivi dei gruppi IOMMU coinvolti, e i GPU NVIDIA esterni a questi gruppi conservano <code>nvidia</code>. Controlla ogni membro del gruppo prima del passaggio."
|
||||
],
|
||||
"outro": "Confermare la direzione o annullare."
|
||||
},
|
||||
"conflict": {
|
||||
"title": "Scelte per ogni VM o LXC coinvolto",
|
||||
"body": "Controlla <code>/etc/pve/lxc/*.conf</code> per riferimenti alla famiglia del driver GPU e <code>/etc/pve/qemu-server/*.conf</code> per assegnazioni PCI. Il rilevamento LXC non identifica ogni scheda tramite BDF esatto. Verifica gli ospiti rilevati e scegli come trattarli:",
|
||||
"headerPolicy": "Politica",
|
||||
"headerEffect": "Effetto",
|
||||
"headerWhen": "Quando scegliere",
|
||||
"keepPolicy": "Mantieni la configurazione, disattiva l’avvio automatico",
|
||||
"keepEffect": "<code>pct set CTID -onboot 0</code> o <code>qm set VMID -onboot 0</code>. Conserva le voci GPU.",
|
||||
"keepWhen": "Se vuoi riutilizzare l’ospite quando il GPU tornerà alla modalità iniziale. Scelta predefinita prudente.",
|
||||
"removePolicy": "Rimuovere GPU da config",
|
||||
"removeEffect": "Rimuove le voci <code>hostpci</code> / <code>dev</code> identificate e i riferimenti precedenti supportati.",
|
||||
"removeWhen": "Se l’ospite deve funzionare senza GPU. Controlla prima l’app: il ripiego sulla CPU dipende dall’applicazione e rimuovere il dispositivo non la riconfigura automaticamente.",
|
||||
"imageAlt": "Dialogo per scegliere come gestire ogni VM o LXC coinvolto"
|
||||
},
|
||||
"audio": {
|
||||
"title": "Rimuovere l’audio associato uscendo dalla modalità VM",
|
||||
"body1": "Molti GPU NVIDIA / AMD espongono audio HDMI nella funzione <code>.1</code> dello stesso slot; possono esserci altri dispositivi audio assegnati. Rimuovendo il GPU possono restare voci audio <code>hostpci</code> obsolete. Verifica le assegnazioni da mantenere.",
|
||||
"body2": "Identifica gli indirizzi BDF audio e mostra un elenco delle assegnazioni da rimuovere. Elimina anche gli ID vendor:device da <code>/etc/modprobe.d/vfio.conf</code>, solo se nessun’altra VM li usa."
|
||||
},
|
||||
"apply": {
|
||||
"title": "Applicare modifiche a host e ospiti",
|
||||
"body": "Una volta confermato, lo script scrive i cambiamenti di lato host — <code>vfio.conf</code>, blacklist, moduli e (per NVIDIA) la regola per-BDF udev a <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> più lo stato BDF a <code>/etc/proxmenux/vfio-bind.bdfs</code>. Esso applica anche la politica di conflitto scelta per ogni VM/LXC interessato. Se l'host config è effettivamente cambiato, viene eseguito <code>update-initramfs -u -k all</code> seguito da <code>proxmox-boot-tool refresh</code>; altrimenti entrambi sono saltati."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Riavvia",
|
||||
"body": "Riavvia l’host per applicare la nuova associazione persistente. Puoi rimandare, ma verifica il driver attivo prima di avviare l’ospite di destinazione: fino al riavvio può restare quello precedente.",
|
||||
"imageAlt": "Riepilogo finestra di dialogo che cosa è cambiato, seguito dal prompt di riavvio"
|
||||
}
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Verifica manuale",
|
||||
"intro": "Prima di <strong>VM → LXC</strong>, controlla driver e regole BDF. L’esempio NVIDIA usa <code>10de:2204</code>: adattalo alla tua scheda. I comandi leggono lo stato; lo script gestisce anche ospiti e membri del gruppo IOMMU.",
|
||||
"lxcToVm": "Prima di <strong>LXC → VM</strong>, controlla indirizzo PCI e gruppo IOMMU. Sostituisci l’indirizzo di esempio e verifica tutti i membri prima dell’assegnazione.",
|
||||
"oneVmTitle": "Un GPU fisico assegnato con VFIO può essere usato da una sola VM alla volta",
|
||||
"oneVmBody": "Mettere più voci <code>hostpci</code> con lo stesso slot PCI in due VM è valida configurazione ma solo una delle VM può iniziare con la GPU — la seconda fallirà. Il passo della politica di conflitto ProxMenux è esattamente quello di evitare questa trappola."
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Verifica dopo il riavvio"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Risoluzione dei problemi",
|
||||
"stillVfioTitle": "GPU mostra ancora vfio-pci dopo il passaggio alla modalità LXC",
|
||||
"stillVfioBody": "Un modulo VFIO caricato non dimostra quale driver usi il GPU. Verifica associazione, completamento di <code>update-initramfs</code> e riavvio. <code>lsmod | grep vfio</code> elenca solo moduli. Per AMD / Intel controlla <code>vfio.conf</code>; per NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> e <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Correggi le regole obsolete prima di <code>update-initramfs -u -k all</code> e del riavvio.",
|
||||
"vmFailTitle": "Una VM non si avvia dopo il passaggio del GPU a LXC",
|
||||
"vmFailBody": "Verifica i riferimenti <code>hostpci</code> obsoleti. L’opzione <em>Rimuovi GPU dalla configurazione</em> può eliminarli durante il cambio previsto. Prima di rieseguire lo script controlla la direzione per non invertire la modalità per errore. In alternativa rimuovi l’assegnazione in Proxmox con la VM ferma.",
|
||||
"smiFailTitle": "nvidia-smi mostra «Driver/library version mismatch» tornando a LXC",
|
||||
"smiFailBody": "Confronta il modulo NVIDIA caricato con le librerie installate, anche nei LXC. Allinea le versioni: riavviare carica il modulo installato ma non corregge pacchetti incompatibili. Ricaricare con <code>modprobe -r nvidia</code> e <code>modprobe nvidia</code> richiede di fermare i client GPU e può fallire se sono usati moduli dipendenti.",
|
||||
"logTitle": "Registro di esecuzione",
|
||||
"logBody": "Ogni esecuzione scrive in <code>/tmp/proxmenux_gpu_switch_mode.log</code> sull’host. Allega il registro quando chiedi aiuto su GitHub."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Vedi anche",
|
||||
"items": [
|
||||
{
|
||||
"label": "Aggiungi GPU a VM (Passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — configurazione iniziale della modalità VM."
|
||||
},
|
||||
{
|
||||
"label": "Aggiungi GPU a LXC",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — configurazione iniziale della modalità LXC."
|
||||
},
|
||||
{
|
||||
"label": "Installare driver NVIDIA (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": "— necessario per la modalità LXC su GPU NVIDIA."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Scheda hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — sezione Schede grafiche, con modalità attuale e comando per cambiarla."
|
||||
},
|
||||
{
|
||||
"label": "Comandi per passthrough GPU",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": " — riferimento rapido ai comandi."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user