« GPU Passthrough » : différence entre les versions

De Le Wiki de Lug
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
= NVidia =
= NVidia LXC =
[https://matthieu.yiptong.ca/2020/12/06/nvidia-gpu-passthrough-to-lxc-containers-on-proxmox-6-for-nvenc-in-plex/ Source] [https://theorangeone.net/posts/lxc-nvidia-gpu-passthrough/ Autre source] [https://medium.com/@MARatsimbazafy/journey-to-deep-learning-nvidia-gpu-passthrough-to-lxc-container-97d0bc474957 Encore une autre]
[https://matthieu.yiptong.ca/2020/12/06/nvidia-gpu-passthrough-to-lxc-containers-on-proxmox-6-for-nvenc-in-plex/ Source] [https://theorangeone.net/posts/lxc-nvidia-gpu-passthrough/ Autre source] [https://medium.com/@MARatsimbazafy/journey-to-deep-learning-nvidia-gpu-passthrough-to-lxc-container-97d0bc474957 Encore une autre]
{{Méta bandeau
{{Méta bandeau
Ligne 15 : Ligne 15 :
   | texte  = Astuce : Il est possible d'utiliser un '''[[Bindmount|montage interne]]''' pour partager les fichiers :
   | texte  = Astuce : Il est possible d'utiliser un '''[[Bindmount|montage interne]]''' pour partager les fichiers :
  }}
  }}
Si nécessaire on install git :
Si nécessaire on installe git :
  # apt install git
  # apt install git
Puis on récupère les fichiers :
Puis on récupère les fichiers :
  # mkdir /opt/nvidia
  # mkdir /opt/nvidia-driver
  # cd /opt/nvidia/
  # cd /opt/nvidia-driver/
  # wget <nowiki>https://</nowiki>international.download.nvidia.com/XFree86/Linux-x86_64/<font color = green>470.74</font>/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
  # wget <nowiki>https://</nowiki>international.download.nvidia.com/XFree86/Linux-x86_64/<font color = green>470.74</font>/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
  # git clone <nowiki>https://</nowiki>github.com/keylase/nvidia-patch
  # git clone <nowiki>https://</nowiki>github.com/keylase/nvidia-patch
Ligne 25 : Ligne 25 :
==ProxMox==
==ProxMox==
* On installe les prérequis si nécessaire :
* On installe les prérequis si nécessaire :
  # apt install pve-headers
  proxmox:~# apt install pve-headers
* On installe le pilote :
* On installe le pilote :
  # bash /opt/nvidia/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
  proxmox:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
----
----
Si nécessaire on demande à l'installateur de remplacer le pilote "nouveau" au démarrage :
Si nécessaire on demande à l'installateur de remplacer le pilote "nouveau" au démarrage :
[[Fichier:Nouveau nvidia.png|border|On ne veut plus de toi nouveau..]]


On le décharge :
On le décharge :
  # rmmod nouveau
  proxmox:~# rmmod nouveau
On relance l'installation :
On relance l'installation :
  # bash /opt/nvidia/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
  proxmox:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run
----
----
* On accepte d'enregistrer le module dans DKMS pour éviter de devoir le réinstaller lors de la mise à jour du kernel :
* On accepte d'enregistrer le module dans DKMS pour éviter de devoir le réinstaller lors de la mise à jour du kernel :
 
[[Fichier:Dkms.png|border|On accepte l'inscription dans DKMS..]]
 
{{Méta bandeau
On conserve le choix par défaut pour les autres options demandées..
  | niveau = information
 
  | icône = loupe
  | texte  = On conserve le choix par défaut pour les autres options demandées..
}}


*On applique le patch pour supprimer la limite de sessions :
*On applique le patch pour supprimer la limite de sessions :
  # bash /opt/nvidia/nvidia-patch/patch.sh
  proxmox:~# bash /opt/nvidia-driver/nvidia-patch/patch.sh
On peut également appliquer le patch pour autoriser "NvFBC" :
On peut également appliquer le patch pour autoriser "NvFBC" :
  # bash /opt/nvidia/nvidia-patch/patch-fbc.sh
  proxmox:~# bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh
* On force le chargement de modules au démarrage :
* On force le chargement de modules au démarrage :
  # vi /etc/modules-load.d/modules.conf
  proxmox:~# vi /etc/modules-load.d/modules.conf


  <font color = grey>...</font>
  <font color = grey>...</font>
Ligne 54 : Ligne 58 :
  nvidia_uvm
  nvidia_uvm


  # update-initramfs -u -k all
  proxmox:~# update-initramfs -u -k all
* On force la création de fichiers qui en utilisation normale ne sont créés qu'a la demande :
* On force la création de fichiers qui en utilisation normale ne sont créés qu'a la demande :
  # vi /etc/udev/rules.d/70-nvidia.rules
  proxmox:~# vi /etc/udev/rules.d/70-nvidia.rules


  KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'"
  KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'"
  KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*'"
  KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*'"
* On redémarre le serveur, on peut vérifier ensuite l'installation avec la commande "nvidia-smi"
* On redémarre le serveur, on peut ensuite vérifier l'installation avec la commande "nvidia-smi"
  # nvidia-smi
  proxmox:~# nvidia-smi
 
* Ensuite il faut noter le numéro du "cgroup" à autoriser pour le conteneur :
proxmox:~# ls -l /dev/nvidia*
 
crw-rw-rw- 1 root root <font color = blue>195</font>,  0 Oct 23 15:59 /dev/nvidia0
crw-rw-rw- 1 root root <font color = blue>195</font>, 255 Oct 23 15:59 /dev/nvidiactl
crw-rw-rw- 1 root root <font color = blue>510</font>,  0 Oct 23 15:59 /dev/nvidia-uvm
crw-rw-rw- 1 root root <font color = blue>510</font>,  1 Oct 23 15:59 /dev/nvidia-uvm-tools
On édite la configuration du conteneur LXC, ici pour exemple le conteneur "<font color = green>101</font>" :
proxmox:~# vi /etc/pve/lxc/<font color = green>101</font>.conf
 
# Allow cgroup access
lxc.<font color = green>cgroup2</font>.devices.allow: c <font color = blue>195</font>:* rwm
lxc.<font color = green>cgroup2</font>.devices.allow: c <font color = blue>510</font>:* rwm
# Pass through device files
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
{{Méta bandeau
  | niveau = information
  | icône = loupe
  | texte  = "<font color = green>cgroup'''2'''</font>" à partir de ProxMox 7, sinon utiliser "cgroup".
}}
 
= Conteneur LXC =
* Après avoir démarré ou redémarré le conteneur, on installe le pilote :
LXC:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-<font color = green>470.74</font>.run --no-kernel-module
* On installe le patch pour supprimer la limite de sessions :
LXC:~# bash /opt/nvidia-driver/nvidia-patch/patch.sh
Optionnelement on peut activer "NvFBC"
LXC:~# bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh
Et pour finir on vérifie l'installation avec la commande "nvidia-smi" :
LXC:~# nvidia-smi

Version actuelle datée du 29 octobre 2021 à 10:14

NVidia LXC

Source Autre source Encore une autre

Sur le serveur ProxMox l'on peut installé DKMS pour ne pas perdre le module du pilote lorsque le kernel est mise à jour :

# apt update && apt upgrade
# apt install dkms

Se rendre sur ce site et choisir un pilote compatible avec le patch pour supprimé la limite de sessions, télécharger l'ensemble sur le serveur et les containeurs :

Si nécessaire on installe git :

# apt install git

Puis on récupère les fichiers :

# mkdir /opt/nvidia-driver
# cd /opt/nvidia-driver/
# wget https://international.download.nvidia.com/XFree86/Linux-x86_64/470.74/NVIDIA-Linux-x86_64-470.74.run
# git clone https://github.com/keylase/nvidia-patch

Ensuite on commence par configurer ProxMox :

ProxMox

  • On installe les prérequis si nécessaire :
proxmox:~# apt install pve-headers
  • On installe le pilote :
proxmox:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-470.74.run

Si nécessaire on demande à l'installateur de remplacer le pilote "nouveau" au démarrage :

On ne veut plus de toi nouveau..

On le décharge :

proxmox:~# rmmod nouveau

On relance l'installation :

proxmox:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-470.74.run

  • On accepte d'enregistrer le module dans DKMS pour éviter de devoir le réinstaller lors de la mise à jour du kernel :

On accepte l'inscription dans DKMS..

  • On applique le patch pour supprimer la limite de sessions :
proxmox:~# bash /opt/nvidia-driver/nvidia-patch/patch.sh

On peut également appliquer le patch pour autoriser "NvFBC" :

proxmox:~# bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh
  • On force le chargement de modules au démarrage :
proxmox:~# vi /etc/modules-load.d/modules.conf
...
# Nvidia modules
nvidia
nvidia_uvm
proxmox:~# update-initramfs -u -k all
  • On force la création de fichiers qui en utilisation normale ne sont créés qu'a la demande :
proxmox:~# vi /etc/udev/rules.d/70-nvidia.rules
KERNEL=="nvidia", RUN+="/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 666 /dev/nvidia*'"
KERNEL=="nvidia_uvm", RUN+="/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*'"
  • On redémarre le serveur, on peut ensuite vérifier l'installation avec la commande "nvidia-smi"
proxmox:~# nvidia-smi
  • Ensuite il faut noter le numéro du "cgroup" à autoriser pour le conteneur :
proxmox:~# ls -l /dev/nvidia*
crw-rw-rw- 1 root root 195,   0 Oct 23 15:59 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Oct 23 15:59 /dev/nvidiactl
crw-rw-rw- 1 root root 510,   0 Oct 23 15:59 /dev/nvidia-uvm
crw-rw-rw- 1 root root 510,   1 Oct 23 15:59 /dev/nvidia-uvm-tools

On édite la configuration du conteneur LXC, ici pour exemple le conteneur "101" :

proxmox:~# vi /etc/pve/lxc/101.conf
# Allow cgroup access
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 510:* rwm

# Pass through device files
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file

Conteneur LXC

  • Après avoir démarré ou redémarré le conteneur, on installe le pilote :
LXC:~# bash /opt/nvidia-driver/NVIDIA-Linux-x86_64-470.74.run --no-kernel-module
  • On installe le patch pour supprimer la limite de sessions :
LXC:~# bash /opt/nvidia-driver/nvidia-patch/patch.sh

Optionnelement on peut activer "NvFBC"

LXC:~# bash /opt/nvidia-driver/nvidia-patch/patch-fbc.sh

Et pour finir on vérifie l'installation avec la commande "nvidia-smi" :

LXC:~# nvidia-smi