Ollama su Proxmox: LXC, VM e GPU passthrough
Proxmox VE è il coltellino svizzero dell'homelab: un hypervisor libero, parsimonioso nell'uso delle risorse, capace di far coesistere container leggeri e macchine virtuali isolate su un unico server. Eseguire Ollama su Proxmox significa condividere una GPU costosa tra più servizi mantenendo l'inferenza al 100% a casa propria. Questa guida illustra le due opzioni — LXC con GPU condivisa (semplice) e VM con passthrough completo (una soluzione pulita) — con la configurazione NVIDIA dettagliata e le insidie dell'IOMMU che fanno perdere intere serate.
#Perché ospitare Ollama su Proxmox
In un homelab, raramente si vuole un server dedicato esclusivamente all'IA. Proxmox permette di affiancare Ollama agli altri tuoi servizi (NAS, domotica, reverse proxy) sulla stessa macchina, mantenendo isolato ogni carico. Il demone Ollama gira quindi in un container o in una VM, ascolta sulla sua porta abituale e diventa accessibile da tutta la tua infrastruttura locale — da Open WebUI in un altro container, da una pipeline n8n o dalla tua postazione di lavoro.
Il punto centrale è la GPU. L'inferenza degli LLM senza accelerazione hardware è utilizzabile ma lenta; non appena si vuole eseguire un modello da 14B o 32B a una velocità accettabile, bisogna dare a Ollama accesso a una scheda NVIDIA. Virtualizzare una GPU, però, non è banale: Proxmox propone due approcci radicalmente diversi, con compromessi opposti in termini di semplicità e pulizia della configurazione.
#LXC vs VM: quale scelta per Ollama
Agenti che agiscono sulla tua macchina: Cline agentico, MCP, n8n + Ollama, automazioni locali.
- Spazio online a vita
- PDF + file
- Aggiornamenti a vita
È la prima decisione e condiziona tutto il resto. Un container LXC condivide il kernel dell'host: è leggero, si avvia istantaneamente e, soprattutto, può accedere alla GPU dell'host senza sottrargliela. Una VM, invece, è una macchina completa e isolata; per assegnarle una GPU bisogna dedicarle interamente quella scheda tramite passthrough VFIO — l'host perde allora completamente l'accesso a quella scheda.
- LXC + GPU condiviso
- La soluzione semplice. Il driver NVIDIA è installato sull'host e nel container (stesse versioni), i dispositivi /dev/nvidia* sono montati all'interno del container. La GPU rimane utilizzabile dall'host e da altri container contemporaneamente. Ideale se vuoi condividere una sola scheda.
- VM + pass-through completo
- La soluzione pulita. La GPU viene scollegata dall'host e assegnata alla VM tramite VFIO/IOMMU. Isolamento totale, driver gestiti nella VM come su bare metal, nessuna interferenza. Ma la GPU è riservata esclusivamente a questa VM finché la VM è in esecuzione.
- Il criterio decisivo
- Una sola scheda da condividere tra diversi servizi → LXC. Una scheda dedicata all'IA (o più GPU) e necessità di isolamento rigoroso → VM. Il passthrough è obbligatorio anche se vuoi eseguire un sistema operativo diverso (Windows, un sistema operativo con driver specifici).
#Requisiti hardware e VRAM
Dimensiona la GPU in base ai modelli che intendi utilizzare. Con la quantizzazione Q4_K_M (il miglior compromesso tra qualità e memoria), ecco la VRAM necessaria per ciascuna dimensione del modello. Prevedi sempre un margine per il contesto.
- 3B (≈2 GB)
- Una RTX 3060 12GB è più che sufficiente. Per i test, il modello funziona bene anche con la sola CPU.
- 7B (≈5 GB)
- RTX 3060 12GB o RTX 4070 12GB. Il punto di ingresso ideale per un homelab.
- 14B (≈9 GB)
- RTX 4070 12GB: memoria al limite; RTX 4080 16GB: memoria con un buon margine.
- 32B (≈19 GB)
- È necessaria una RTX 4090 da 24 GB, oppure due schede in tensor-split.
- 70B (≈40 GB)
- Multi-GPU (2× RTX 4090) o Mac M4 Pro/Max con memoria unificata 48 GB+
Per quanto riguarda la virtualizzazione, il passthrough a una VM richiede prerequisiti rigorosi che non servono per LXC: una CPU e una scheda madre che supportino VT-d (Intel) o AMD-Vi (AMD), l'IOMMU attivato nel BIOS e, idealmente, un gruppo IOMMU riservato alla GPU. LXC non ha bisogno di nulla di tutto questo: basta che il driver NVIDIA sia installato sull'host.
#LXC con GPU condivisa, la via semplice
Il principio: installare il driver NVIDIA sull'host Proxmox, creare un contenitore LXC non privilegiato, montarvi i dispositivi della GPU, poi installare lo stesso driver (senza il modulo kernel) e Ollama nel contenitore. La versione del driver deve essere identica tra host e contenitore, altrimenti il userspace del contenitore rifiuta di comunicare con il modulo kernel dell'host.
- 01Installare il driver NVIDIA sull'hostAggiungi gli header del kernel, poi installa il driver dal repository NVIDIA (o dal file .run ufficiale). Verifica con nvidia-smi che la scheda sia effettivamente rilevata sull'host prima di procedere.
- 02Creare un container LXC non privilegiatoBasta un template Debian 12 o Ubuntu 24.04. Abilita l'annidamento (nesting=1) per consentire l'esecuzione dei runtime GPU. Annota l'ID del container (es. 200).
- 03Individuare i dispositivi GPUSull'host, elenca i nodi /dev/nvidia* e annota i rispettivi numeri major/minor. Sono questi nodi di dispositivo che esporremo al container.
- 04Montare i dispositivi nella configurazione LXCModifica /etc/pve/lxc/200.conf per consentire i cgroup dei dispositivi NVIDIA e montarli tramite bind mount. Riavvia il container.
- 05Installare lo stesso driver nel containerNel container, installa il driver NVIDIA con l'opzione --no-kernel-module (il modulo proviene dall'host). nvidia-smi deve ora funzionare all'interno.
- 06Installare OllamaLo script ufficiale rileva automaticamente la GPU. Ollama avvia il suo daemon e carica i modelli sulla scheda condivisa.
#VM con passthrough completo: una soluzione ben strutturata
Qui la GPU viene sottratta all'host e assegnata a una VM tramite VFIO. La VM vede una vera scheda NVIDIA e si comporta come un sistema bare-metal: al suo interno si installa il driver normalmente, senza espedienti legati alla versione. In compenso, occorre preparare l'host affinché rilasci la scheda all'avvio (binding VFIO) e il kernel non carichi il driver nvidia sull'host.
- 01Attivare IOMMU all'avvioAggiungi intel_iommu=on (o amd_iommu=on) e iommu=pt ai parametri del kernel, in GRUB o systemd-boot a seconda della tua installazione Proxmox.
- 02Isolare la GPU per VFIOIdentifica gli ID PCI della scheda (GPU + il relativo audio HDMI), dichiarali in vfio-pci e aggiungi alla blacklist i driver nouveau/nvidia sull'host, per impedire che l'host prenda il controllo della scheda.
- 03Rigenerare l'initramfs e riavviareAggiorna l'initramfs per includere i moduli VFIO, poi riavvia l'host. Verifica che la GPU sia effettivamente gestita da vfio-pci.
- 04Creare la VM e assegnarle la GPUCrea una VM (tipo di macchina q35, BIOS OVMF/UEFI), aggiungi il dispositivo PCI della GPU in passthrough e spunta PCI-Express. Installa il sistema operativo guest (Ubuntu Server consigliato).
- 05Installare il driver + Ollama nella VMNella VM, installa il driver NVIDIA classico (il modulo kernel è autorizzato qui, si tratta di una vera macchina), verifica con nvidia-smi, poi installa Ollama.
#IOMMU, driver e insidie comuni
Il passthrough fallisce raramente per caso: quasi sempre il problema è dovuto all'IOMMU o a un gruppo PCI non correttamente isolato. Ecco gli ostacoli più ricorrenti e come diagnosticarli.
- Gruppi IOMMU non isolati
- Se la GPU condivide il proprio gruppo IOMMU con altri dispositivi (controller USB, un'altra scheda), Proxmox rifiuta il passthrough. Verifica i gruppi; come ultima risorsa, la patch ACS override separa i gruppi, a scapito di un isolamento meno rigoroso.
- L’host monopolizza la GPU
- Se dopo il riavvio lspci mostra la GPU con « nvidia » o « nouveau » e non « vfio-pci », la blacklist non è stata applicata. Controlla /etc/modprobe.d e rigenera l'initramfs.
- IOMMU non attivato nel BIOS
- dmesg non mostra nessuna riga DMAR/IOMMU: VT-d o AMD-Vi è disattivato nel firmware. Attivalo nel BIOS prima di tutto.
- Versione del driver LXC non allineata
- Solo in LXC: incompatibilità delle versioni NVML dopo un aggiornamento dell'host. Riallinea le versioni dell'host e del container.
- GPU utilizzato dalla console dell'host
- Quando l'unica GPU serve anche come uscita video per Proxmox, è difficile configurarne correttamente il passthrough. Idealmente, tieni una iGPU o una seconda scheda per l'uscita video dell'host.
#Esporre Ollama sulla rete locale
Per impostazione predefinita, Ollama ascolta solo su http://localhost:11434 — quindi è accessibile esclusivamente dall'interno del container o della VM. Per chiamarlo da Open WebUI ospitato altrove o dal tuo computer, bisogna indicargli di ascoltare su tutte le interfacce tramite la variabile OLLAMA_HOST.
#Risoluzione dei problemi
- nvidia-smi assente nel contenitore
- Dispositivi non montati o autorizzazioni dei cgroup configurate male. Verifica le righe lxc.mount.entry e lxc.cgroup2.devices.allow, poi i numeri major effettivi con ls -l /dev/nvidia*.
- Ollama gira sulla CPU nonostante la presenza della GPU
- Verifica ollama ps: se il modello è « 100% CPU », il runtime CUDA non vede la scheda. Controlla nvidia-smi e riavvia il daemon Ollama.
- La VM non si avvia dopo l'aggiunta del PCI
- Spesso un problema OVMF/q35 o un gruppo IOMMU condiviso. Controlla i log della VM e verifica che la scheda sia effettivamente su vfio-pci dal lato host.
- Performance ridotte dopo aggiornamento Proxmox
- Un aggiornamento del kernel host può compromettere il modulo NVIDIA (LXC) o il binding VFIO. Reinstalla gli header e il driver, rigenera l'initramfs.
#Per approfondire
Una volta installato Ollama su Proxmox, queste guide del sito aiutano a completare lo stack e a scegliere l'hardware giusto:
- Installare Ollama su Linux
- Descrive in dettaglio l'installazione corretta del daemon, systemd e la configurazione della GPU NVIDIA/AMD: utile all'interno del contenitore o della VM.
- Mettere un LLM in produzione con Docker Compose
- Per integrare Open WebUI, Qdrant e un reverse proxy con il tuo Ollama su Proxmox in uno stack completo.
- Scegliere la GPU per l'IA locale
- La guida all'acquisto 2026 per scegliere una scheda adeguata ai modelli previsti, da rendere disponibile in LXC o tramite passthrough.
Un feedback, un errore, una precisazione? Facci sapere, così la guida migliora per tutti.