Cum să treceți prin GPU NVIDIA către containerele Proxmox VE 8 pentru accelerarea CUDA/AI și transcodarea media

Cum Sa Treceti Prin Gpu Nvidia Catre Containerele Proxmox Ve 8 Pentru Accelerarea Cuda Ai Si Transcodarea Media



Dacă aveți un GPU NVIDIA instalat pe serverul dvs. Proxmox VE, îl puteți transmite unui container Proxmox VE LXC și îl puteți utiliza în container pentru accelerarea CUDA/AI (adică TensorFlow, PyTorch). De asemenea, puteți utiliza GPU-ul NVIDIA pentru transcodarea media, streaming video etc. într-un container Proxmox VE LXC cu Plex Media Server sau NextCloud instalat (de exemplu).

În acest articol, vă vom arăta cum să treceți printr-un GPU NVIDIA la un container Proxmox VE 8 LXC, astfel încât să îl puteți utiliza pentru accelerarea CUDA/AI, transcodarea media sau alte sarcini care necesită un GPU NVIDIA.







Subiect de conținut:

Instalarea driverelor GPU NVIDIA pe Proxmox VE 8

Pentru a trece printr-un GPU NVIDIA la un container Proxmox VE LXC, trebuie să aveți driverele GPU NVIDIA instalate pe serverul dvs. Proxmox VE 8. Dacă aveți nevoie de asistență pentru a instala cea mai recentă versiune a driverelor oficiale NVIDIA GPU pe serverul dvs. Proxmox VE 8, citeste acest articol .



Asigurați-vă că modulele NVIDIA GPU Kernel sunt încărcate automat în Proxmox VE 8

Odată ce ați instalat driverele GPU NVIDIA pe serverul dvs. Proxmox VE 8, trebuie să vă asigurați că modulele nucleului GPU NVIDIA sunt încărcate automat la momentul pornirii.



Mai întâi, creați un fișier nou precum „nvidia.conf” în directorul „/etc/modules-load.d/” și deschideți-l cu editorul de text nano.





$ nano / etc / module-sarcina.d / nvidia.conf

Adăugați următoarele rânduri și apăsați + X urmat de „Y” și pentru a salva fișierul „nvidia.conf” :



nvidia

nvidia_uvm

Pentru ca modificările să intre în vigoare, actualizați fișierul „initramfs” cu următoarea comandă:

$ update-initramfs -în

Din anumite motive, Proxmox VE 8 nu creează fișierele de dispozitiv NVIDIA GPU necesare în directorul „/dev/”. Fără aceste fișiere de dispozitiv, containerele Promox VE 8 LXC nu vor putea folosi GPU-ul NVIDIA.

Pentru a vă asigura că Proxmox VE 8 creează fișierele dispozitivului GPU NVIDIA în directorul „/dev/” la pornire, creați un fișier de reguli udev „70-nvidia.rules” în „/etc/udev/rules.d/” director și deschideți-l cu editorul de text nano după cum urmează:

$ nano / etc / udev / reguli.d / 70 -nvidia.reguli

Introduceți următoarele rânduri în fișierul „70-nvidia.rules” și apăsați + X urmat de „Y” și pentru a salva fișierul:

# creați fișierele necesare dispozitivului NVIDIA în /dev/*

NUCLEU == 'nvidia' , RUN+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''

NUCLEU == 'nvidia_uvm' , RUN+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

Pentru ca modificările să intre în vigoare, reporniți serverul Proxmox VE 8 după cum urmează:

$ reporniți

Odată ce serverul Proxmox VE 8 pornește, modulele nucleului NVIDIA ar trebui să fie încărcate automat, așa cum puteți vedea în următoarea captură de ecran:

$ lsmod | prindere nvidia

Fișierele necesare pentru dispozitivul NVIDIA ar trebui să fie, de asemenea, populate în directorul „/dev” al serverului dvs. Proxmox VE 8. Notați ID-urile CGroup ale fișierelor dispozitivului NVIDIA. Trebuie să permiteți acele ID-uri CGroup pe containerul LXC în care doriți să treceți prin GPU-urile NVIDIA de pe serverul dvs. Proxmox VE 8. În cazul nostru, ID-urile CGroup sunt 195, 237 și 226.

$ ls -lh / dev / nvidia *

$ ls -lh / dev / dri

Crearea unui container Proxmox VE 8 LXC pentru NVIDIA GPU Passthrough

Am folosit un container Ubuntu 22.04 LTS Proxmox VE 8 LXC în acest articol pentru demonstrație, deoarece bibliotecile NVIDIA CUDA și NVIDIA cuDNN sunt ușor de instalat pe Ubuntu 22.04 LTS din depozitele de pachete Ubuntu și este mai ușor să testați dacă accelerarea NVIDIA CUDA funcționează. . Dacă doriți, puteți utiliza și alte distribuții Linux. În acest caz, comenzile de instalare NVIDIA CUDA și NVIDIA cuDNN vor varia. Asigurați-vă că urmați instrucțiunile de instalare NVIDIA CUDA și NVIDIA cuDNN pentru distribuția Linux dorită.

Dacă aveți nevoie de asistență pentru crearea unui container Proxmox VE 8 LXC, citeste acest articol .

Configurarea unui container LXC pentru NVIDIA GPU Passthrough pe Promox VE 8

Pentru a configura un container LXC (container 102, să spunem) pentru trecerea GPU-ului NVIDIA, deschideți fișierul de configurare a containerului LXC din shell-ul Proxmox VE cu editorul de text nano, după cum urmează:

$ nano / etc / pve / lxc / 102 .conf

Introduceți următoarele rânduri la sfârșitul fișierului de configurare a containerului LXC:

lxc.cgroup.devices.permit: c 195 : * rwm

lxc.cgroup.devices.permit: c 237 : * rwm

lxc.cgroup.devices.permit: c 226 : * rwm

lxc.mount.entry: / dev / nvidia0          dev / nvidia0          niciuna lega ,optional, crea = fişier

lxc.mount.entry: / dev / nvidiactl        dev / nvidiactl        niciunul lega ,optional, crea = fişier

lxc.mount.entry: / dev / nvidia-modeset   dev / nvidia-modeset   niciunul lega ,optional, crea = fişier

lxc.mount.entry: / dev / nvidia-uvm       dev / nvidia-uvm       niciuna lega ,optional, crea = fişier

lxc.mount.entry: / dev / nvidia-uvm-tools dev / nvidia-uvm-tools nici unul lega ,optional, crea = fişier

lxc.mount.entry: / dev / dri              dev / dri              niciunul lega ,optional, crea = tu

Asigurați-vă că înlocuiți ID-urile CGroup în liniile „lxc.cgroup.devices.allow” din fișierul de configurare a containerului LXC. După ce ați terminat, apăsați + X urmat de „Y” și pentru a salva fișierul de configurare a containerului LXC.

Acum, porniți containerul LXC din tabloul de bord Proxmox VE 8.

Dacă trecerea GPU-ului NVIDIA are succes, containerul LXC ar trebui să pornească fără nicio eroare și ar trebui să vedeți fișierele dispozitivului NVIDIA în directorul „/dev” al containerului.

$ ls -lh / dev / nvidia *

$ ls -lh / dev / dri

Instalarea driverelor GPU NVIDIA pe containerul Proxmox VE 8 LXC

Utilizăm un container Ubuntu 22.04 LTS LXC pe serverul nostru Proxmox VE 8 pentru demonstrație. Dacă utilizați o altă distribuție Linux pe containerul LXC, comenzile dvs. vor varia ușor față de ale noastre. Așadar, asigurați-vă că ajustați comenzile în funcție de distribuția Linux pe care o utilizați pe container.

Puteți găsi versiunea driverelor GPU NVIDIA pe care ați instalat-o pe serverul dvs. Proxmox VE 8 cu comanda „nvidia-smi”. După cum puteți vedea, avem driverele GPU NVIDIA versiunea 535.146.02 instalate pe serverul nostru Proxmox VE 8. Prin urmare, trebuie să instalăm driverele GPU NVIDIA versiunea 535.146.02 și pe containerul nostru LXC.

$ nvidia-smi

Mai întâi, instalați CURL pe containerul LXC după cum urmează:

$ actualizare apt && apt instalare răsuci -și

CURL ar trebui să fie instalat pe containerul LXC.

Pentru a instala driverele GPU NVIDIA versiunea 535.146.02 (să spunem), exportați variabila de mediu NVIDIA_VERSION și rulați comanda CURL (pe container) pentru a descărca versiunea necesară a fișierului de instalare a driverelor GPU NVIDIA.

$ export NVIDIA_VERSION = „535.146.02”

$ curl -O „https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .alerga'

Versiunea corectă a fișierului de instalare a driverelor GPU NVIDIA ar trebui să fie descărcată pe containerul LXC, așa cum puteți vedea în următoarea captură de ecran:

Acum, adăugați o permisiune executabilă la fișierul de instalare a driverelor GPU NVIDIA din container, după cum urmează:

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

Pentru a instala driverele GPU NVIDIA pe container, rulați fișierul de instalare a driverelor GPU NVIDIA cu „–no-kernel-module” opțiune după cum urmează:

$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-kernel-module

După ce vedeți această opțiune, selectați „OK” și apăsați .

Selectați „OK” și apăsați .

Selectați „Da” și apăsați .

Selectați „OK” și apăsați .

Driverele GPU NVIDIA sunt instalate pe containerul LXC. Este nevoie de câteva secunde pentru a finaliza.

După ce vedeți această solicitare, selectați „Da” și apăsați .

Selectați „OK” și apăsați . Driverele GPU NVIDIA trebuie instalate pe containerul LXC.

Pentru a confirma dacă driverele GPU NVIDIA sunt instalate și funcționează, executați comanda „nvidia-smi” pe containerul LXC. După cum puteți vedea, versiunea driverului GPU NVIDIA 535.146.02 (aceeași versiune ca cea instalată pe serverul Proxmox VE 8) este instalată pe containerul LXC și a detectat corect GPU-ul nostru NVIDIA RTX 4070.

$ nvidia-smi

Instalarea NVIDIA CUDA și cuDNN pe containerul Proxmox VE 8 LXC

Utilizăm un container Ubuntu 22.04 LTS LXC pe serverul nostru Proxmox VE 8 pentru demonstrație. Dacă utilizați o altă distribuție Linux pe containerul LXC, comenzile dvs. vor varia ușor față de ale noastre. Așadar, asigurați-vă că ajustați comenzile în funcție de distribuția Linux pe care o utilizați pe container.

Pentru a instala NVIDIA CUDA și cuDNN pe containerul Ubuntu 22.04 LTS Proxmox VE 8, executați următoarea comandă pe container:

$ apt instalare build-essential nvidia-cuda-toolkit nvidia-cudnn

Pentru a confirma instalarea, apăsați „Y” și apoi apăsați .

Pachetele necesare sunt descărcate și instalate. Durează ceva timp pentru a finaliza.

După ce vedeți această fereastră, selectați „OK” și apăsați .

Selectați „Sunt de acord” și apăsați .

Instalarea ar trebui să continue.

Programul de instalare descarcă arhiva bibliotecii NVIDIA cuDNN de la NVIDIA. Este un fișier mare, deci durează mult timp pentru a fi finalizat.

Odată ce arhiva bibliotecii NVIDIA cuDNN este descărcată, instalarea ar trebui să continue ca de obicei.

În acest moment, NVIDIA CUDA și cuDNN ar trebui să fie instalate pe containerul Ubuntu 22.04 LTS Proxmox VE 8 LXC.

Verificarea dacă accelerația NVIDIA CUDA funcționează pe containerul Proxmox VE 8 LXC

Pentru a verifica dacă NVIDIA CUDA este instalat corect, verificați dacă comanda „nvcc” este disponibilă pe containerul Proxmox VE 8, după cum urmează:

$ nvcc --versiune

După cum puteți vedea, avem NVIDIA CUDA 11.5 instalat pe containerul nostru Proxmox VE 8.

Acum, să scriem, să compilăm și să rulăm un program simplu CUDA C și să vedem dacă totul funcționează conform așteptărilor.

Mai întâi, creați un director de proiect „~/code” pe containerul Proxmox VE 8 pentru a menține fișierele organizate.

$ mkdir ~ / cod

Navigați la directorul de proiect „~/code” după cum urmează:

$ CD `/ cod

Creați un fișier nou precum „hello.cu” în directorul „~/code” al containerului Proxmox VE 8 și deschideți-l cu editorul de text nano:

$ nano salut.cu

Introduceți următoarele rânduri de cod în fișierul „hello.cu” :

#include

__global__ void sayHello ( ) {
printf ( „Bună lume de la GPU! \n ' ) ;
}

int principal ( ) {
printf ( „Bună lume de la CPU! \n ' ) ;

spune buna << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;

întoarcere 0 ;
}

După ce ați terminat, apăsați + X urmat de „Y” și pentru a salva fișierul „hello.cu”.

Pentru a compila programul CUDA „hello.cu” pe containerul Proxmox VE 8, executați următoarele comenzi:

$ nvcc salut.cu -O Buna ziua

Acum, puteți rula programul „bună ziua” CUDA pe containerul Proxmox VE 8, după cum urmează:

$ . / Buna ziua

Dacă containerul Proxmox VE 8 poate folosi GPU-ul NVIDIA pentru accelerarea NVIDIA CUDA, programul va imprima două linii, așa cum se arată în următoarea captură de ecran.

Dacă GPU-ul NVIDIA nu este accesibil din containerul Proxmox VE 8, programul va imprima doar prima linie care este „Bună ziua, lumea de la CPU!”, nu a doua linie.

Concluzie

În acest articol, v-am arătat cum să treceți printr-un GPU NVIDIA de la gazda Proxmox VE 8 la un container Proxmox VE 8 LXC. De asemenea, v-am arătat cum să instalați aceeași versiune a driverelor GPU NVIDIA pe containerul Proxmox VE 8 ca și gazda Proxmox VE. În cele din urmă, v-am arătat cum să instalați NVIDIA CUDA și NVIDIA cuDNN pe un container Ubuntu 22.04 LTS Proxmox VE 8 și cum să compilați și să rulați un program simplu NVIDIA CUDA pe containerul Proxmox VE 8.

Referinte: