Se hai una GPU NVIDIA installata sul tuo server Proxmox VE, puoi passarla a un contenitore Proxmox VE LXC e utilizzarla nel contenitore per l'accelerazione CUDA/AI (ad esempio TensorFlow, PyTorch). Puoi anche utilizzare la GPU NVIDIA per la transcodifica multimediale, lo streaming video, ecc. in un contenitore Proxmox VE LXC con Plex Media Server o NextCloud installato (ad esempio).
In questo articolo ti mostreremo come passare una GPU NVIDIA a un contenitore Proxmox VE 8 LXC in modo da poterlo utilizzare per l'accelerazione CUDA/AI, la transcodifica multimediale o altre attività che richiedono una GPU NVIDIA.
Argomento dei contenuti:
Installazione dei driver GPU NVIDIA su Proxmox VE 8
Per passare attraverso una GPU NVIDIA a un contenitore Proxmox VE LXC, è necessario che i driver GPU NVIDIA siano installati sul server Proxmox VE 8. Se hai bisogno di assistenza per installare l'ultima versione dei driver GPU NVIDIA ufficiali sul tuo server Proxmox VE 8, leggi questo articolo .
Assicurarsi che i moduli kernel della GPU NVIDIA vengano caricati automaticamente in Proxmox VE 8
Una volta installati i driver della GPU NVIDIA sul tuo server Proxmox VE 8, devi assicurarti che i moduli del kernel della GPU NVIDIA vengano caricati automaticamente all'avvio.
Innanzitutto, crea un nuovo file come 'nvidia.conf' nella directory '/etc/modules-load.d/' e aprilo con l'editor di testo nano.
$ nano / eccetera / moduli-carico.d / nvidia.conf
Aggiungi le seguenti righe e premi
nvidia
nvidia_uvm
Affinché le modifiche abbiano effetto, aggiornare il file “initramfs” con il seguente comando:
$ aggiornamento-initramfs -In
Per qualche motivo, Proxmox VE 8 non crea i file del dispositivo GPU NVIDIA richiesti nella directory '/dev/'. Senza questi file del dispositivo, i contenitori Promox VE 8 LXC non saranno in grado di utilizzare la GPU NVIDIA.
Per assicurarti che Proxmox VE 8 crei i file del dispositivo GPU NVIDIA nella directory '/dev/' al momento dell'avvio, crea un file di regole udev '70-nvidia.rules' in '/etc/udev/rules.d/' directory e aprirla con l'editor di testo nano come segue:
$ nano / eccetera / udev / regole.d / 70 -nvidia.rules
Digitare le seguenti righe nel file “70-nvidia.rules” e premere
NOCCIOLO == 'nvidia' , CORRI+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''
NOCCIOLO == 'nvidia_uvm' , CORRI+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''
Affinché le modifiche abbiano effetto, riavviare il server Proxmox VE 8 come segue:
$ riavviare
Una volta avviato il server Proxmox VE 8, i moduli del kernel NVIDIA dovrebbero essere caricati automaticamente, come puoi vedere nello screenshot seguente:
$ lsmod | presa nvidia
I file del dispositivo NVIDIA richiesti devono essere inseriti anche nella directory '/dev' del tuo server Proxmox VE 8. Prendere nota degli ID CGroup dei file del dispositivo NVIDIA. Devi consentire gli ID CGroup sul contenitore LXC in cui desideri far passare le GPU NVIDIA dal tuo server Proxmox VE 8. Nel nostro caso, gli ID CGroup sono 195, 237 e 226.
$ l -sx / dev / nvidia *$ l -sx / dev / dri
Creazione di un contenitore Proxmox VE 8 LXC per il passthrough GPU NVIDIA
In questo articolo abbiamo utilizzato un contenitore Ubuntu 22.04 LTS Proxmox VE 8 LXC per la dimostrazione poiché le librerie NVIDIA CUDA e NVIDIA cuDNN sono facili da installare su Ubuntu 22.04 LTS dai repository dei pacchetti Ubuntu ed è più semplice verificare se l'accelerazione NVIDIA CUDA funziona . Se lo desideri, puoi utilizzare anche altre distribuzioni Linux. In tal caso, i comandi di installazione NVIDIA CUDA e NVIDIA cuDNN varieranno. Assicurati di seguire le istruzioni di installazione di NVIDIA CUDA e NVIDIA cuDNN per la distribuzione Linux desiderata.
Se hai bisogno di assistenza nella creazione di un contenitore Proxmox VE 8 LXC, leggi questo articolo .
Configurazione di un contenitore LXC per il passthrough GPU NVIDIA su Promox VE 8
Per configurare un contenitore LXC (contenitore 102, diciamo) per il passthrough GPU NVIDIA, aprire il file di configurazione del contenitore LXC dalla shell Proxmox VE con l'editor di testo nano come segue:
$ nano / eccetera / pve / lxc / 102 .conf
Digita le seguenti righe alla fine del file di configurazione del contenitore LXC:
lxc.cgroup.devices.allow: c 195 : * rwmlxc.cgroup.devices.allow: c 237 : * rwm
lxc.cgroup.devices.allow: c 226 : * rwm
lxc.mount.voce: / dev / nvidia0 dev / nvidia0 nessuno legamento ,opzionale, creare = file
lxc.mount.voce: / dev / nvidiactl dev / nvidiactl nessuno legamento ,opzionale, creare = file
lxc.mount.voce: / dev / nvidia-modeset dev / nvidia-modeset nessuno legamento ,opzionale, creare = file
lxc.mount.voce: / dev / nvidia-uvm dev / nvidia-uvm nessuno legamento ,opzionale, creare = file
lxc.mount.voce: / dev / nvidia-uvm-tools dev / nvidia-uvm-tools nessuno legamento ,opzionale, creare = file
lxc.mount.voce: / dev / dri dev / dri nessuno legamento ,opzionale, creare = Voi
Assicurati di sostituire gli ID CGroup nelle righe 'lxc.cgroup.devices.allow' del file di configurazione del contenitore LXC. Una volta finito, premi
Ora avvia il contenitore LXC dalla dashboard di Proxmox VE 8.
Se il passthrough della GPU NVIDIA ha esito positivo, il contenitore LXC dovrebbe avviarsi senza errori e dovresti vedere i file del dispositivo NVIDIA nella directory '/dev' del contenitore.
$ l -sx / dev / nvidia *$ l -sx / dev / dri
Installazione dei driver GPU NVIDIA sul contenitore Proxmox VE 8 LXC
Stiamo utilizzando un contenitore Ubuntu 22.04 LTS LXC sul nostro server Proxmox VE 8 per la dimostrazione. Se stai utilizzando un'altra distribuzione Linux sul contenitore LXC, i tuoi comandi varieranno leggermente dai nostri. Quindi, assicurati di regolare i comandi in base alla distribuzione Linux che stai utilizzando nel contenitore.
Puoi trovare la versione dei driver GPU NVIDIA che hai installato sul tuo server Proxmox VE 8 con il comando 'nvidia-smi'. Come puoi vedere, sul nostro server Proxmox VE 8 sono installati i driver GPU NVIDIA versione 535.146.02. Dobbiamo quindi installare i driver GPU NVIDIA versione 535.146.02 anche sul nostro container LXC.
$ nvidia-smi
Innanzitutto, installa CURL sul contenitore LXC come segue:
$ aggiornamento adeguato && adatto installare arricciare -E
CURL deve essere installato sul contenitore LXC.
Per installare la versione dei driver della GPU NVIDIA 535.146.02 (diciamo), esporta la variabile di ambiente NVIDIA_VERSION ed esegui il comando CURL (sul contenitore) per scaricare la versione richiesta del file di installazione dei driver della GPU NVIDIA.
$ esportare NVIDIA_VERSIONE = '535.146.02'$ ricciolo -O 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .correre'
La versione corretta del file di installazione dei driver della GPU NVIDIA deve essere scaricata nel contenitore LXC, come puoi vedere nello screenshot seguente:
Ora aggiungi un'autorizzazione eseguibile al file di installazione dei driver GPU NVIDIA sul contenitore come segue:
$ chmod +x NVIDIA-Linux-x86_64-535.146.02.runPer installare i driver della GPU NVIDIA sul contenitore, esegui il file di installazione dei driver della GPU NVIDIA con '–no-kernel-module' opzione come segue:
$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-modulo-kernel Una volta visualizzata questa opzione, seleziona 'OK' e premi
Selezionare 'OK' e premere
Selezionare 'Sì' e premere
Selezionare 'OK' e premere
I driver della GPU NVIDIA vengono installati sul contenitore LXC. Sono necessari alcuni secondi per il completamento.
Una volta visualizzato questo messaggio, seleziona 'Sì' e premi
Selezionare 'OK' e premere
Per verificare se i driver della GPU NVIDIA sono installati e funzionanti, esegui il comando 'nvidia-smi' sul contenitore LXC. Come puoi vedere, la versione del driver GPU NVIDIA 535.146.02 (la stessa versione installata sul server Proxmox VE 8) è installata sul contenitore LXC e ha rilevato correttamente la nostra GPU NVIDIA RTX 4070.
$ nvidia-smi
Installazione di NVIDIA CUDA e cuDNN sul contenitore Proxmox VE 8 LXC
Stiamo utilizzando un contenitore Ubuntu 22.04 LTS LXC sul nostro server Proxmox VE 8 per la dimostrazione. Se stai utilizzando un'altra distribuzione Linux sul contenitore LXC, i tuoi comandi varieranno leggermente dai nostri. Quindi, assicurati di regolare i comandi in base alla distribuzione Linux che stai utilizzando nel contenitore.
Per installare NVIDIA CUDA e cuDNN sul contenitore Ubuntu 22.04 LTS Proxmox VE 8, esegui il seguente comando sul contenitore:
$ adatto installare build-essential nvidia-cuda-toolkit nvidia-cudnn Per confermare l'installazione, premere “Y” e poi premere
I pacchetti richiesti vengono scaricati e installati. Ci vuole un po' di tempo per completarlo.
Una volta visualizzata questa finestra, seleziona 'OK' e premi
Selezionare 'Accetto' e premere
L'installazione dovrebbe continuare.
Il programma di installazione sta scaricando l'archivio della libreria NVIDIA cuDNN da NVIDIA. È un file di grandi dimensioni, quindi richiede molto tempo per essere completato.
Una volta scaricato l'archivio della libreria NVIDIA cuDNN, l'installazione dovrebbe continuare normalmente.
A questo punto, NVIDIA CUDA e cuDNN dovrebbero essere installati sul contenitore Ubuntu 22.04 LTS Proxmox VE 8 LXC.
Verifica se l'accelerazione NVIDIA CUDA funziona sul contenitore Proxmox VE 8 LXC
Per verificare se NVIDIA CUDA è installato correttamente, controlla se il comando 'nvcc' è disponibile sul contenitore Proxmox VE 8 come segue:
$ nvcc --versioneCome puoi vedere, abbiamo NVIDIA CUDA 11.5 installato sul nostro container Proxmox VE 8.
Ora scriviamo, compiliamo ed eseguiamo un semplice programma CUDA C e vediamo se tutto funziona come previsto.
Innanzitutto, crea una directory di progetto '~/code' sul contenitore Proxmox VE 8 per mantenere i file organizzati.
$ mkdir ~ / codicePassare alla directory del progetto '~/code' come segue:
$ CD `/ codiceCrea un nuovo file come 'hello.cu' nella directory '~/code' del contenitore Proxmox VE 8 e aprilo con l'editor di testo nano:
$ nano ciao.cuDigita le seguenti righe di codice nel file 'hello.cu':
#include__global__ void sayCiao ( ) {
printf ( 'Ciao mondo dalla GPU! \N ' ) ;
}
int principale ( ) {
printf ( 'Ciao mondo dalla CPU! \N ' ) ;
di Ciao << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;
ritorno 0 ;
}
Una volta finito, premi
Per compilare il programma CUDA 'hello.cu' sul contenitore Proxmox VE 8, esegui i seguenti comandi:
$ nvcc ciao.cu -O CiaoOra puoi eseguire il programma CUDA 'ciao' sul contenitore Proxmox VE 8 come segue:
$ . / CiaoSe il contenitore Proxmox VE 8 può utilizzare la GPU NVIDIA per l'accelerazione NVIDIA CUDA, il programma stamperà due righe come mostrato nello screenshot seguente.
Se la GPU NVIDIA non è accessibile dal contenitore Proxmox VE 8, il programma stamperà solo la prima riga che è 'Hello world from the CPU!', non la seconda riga.
Conclusione
In questo articolo, ti abbiamo mostrato come passare una GPU NVIDIA dall'host Proxmox VE 8 a un container Proxmox VE 8 LXC. Ti abbiamo anche mostrato come installare la stessa versione dei driver GPU NVIDIA sul contenitore Proxmox VE 8 dell'host Proxmox VE. Infine, ti abbiamo mostrato come installare NVIDIA CUDA e NVIDIA cuDNN su un contenitore Ubuntu 22.04 LTS Proxmox VE 8 e compilare ed eseguire un semplice programma NVIDIA CUDA sul contenitore Proxmox VE 8.