Skip to main content

Installation de machine avec RT Kernel et accélération graphique

RT Kernel

RT Kernel ou Low Latency ?

https://unix.stackexchange.com/questions/553980/why-would-anyone-choose-not-to-use-the-lowlatency-kernel 

Soit on build à la main, soit on prend un Kernel qui est dispo dans les dépôts

sudo apt list *realtime* linux*rt

ubuntu-realtime
linux-realtime
linux-image-6.8.1-1015-realtime
  • On install sudo apt install ubuntu-realtime
  • Permettre le choix du noyau au démarrage (grub)
  • sudo nano /etc/default/grub
GRUB_SAVEDEFAULT=true
GRUB_DEFAULT="saved" # Le dernier Kernel choisi devient le Kernel par défaut
#GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.1-1015-realtime"
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=3 # 3 secondes pour choisir le Kernel à démarrer
  • sudo update-grub

https://unix.stackexchange.com/questions/198003/set-the-default-kernel-in-grub 

https://www.gnu.org/software/grub/manual/grub/html_node/Simple-configuration.html 

NVidia Driver et RT Kernel

https://interfacinglinux.com/2024/01/16/nvidia-cuda-on-debian-real-time-kernel/ 

https://gist.github.com/pantor/9786c41c03a97bca7a52aa0a72fa9387 

Prérequis :

  • Les paquets Nvidia pour les Kernels installés ne sont pas nécessairement dispos, mais le patch est automatique
  • Par contre le patch échoue si un RT Kernel est détecté
  • Il faut forcer le patch à s'appliquer sur le RT Kernel
  • export IGNORE_PREEMPT_RT_PRESENCE=1
  • On peut l'ajouter au ~.bashrc pour ne pas oublier de le faire lors d'un upgrade de Kernel)
  • On installe les headers pour le Kernel en cours 
  • sudo apt install linux-headers-$(uname -r)
  • S'il y a d'autres Kernel, installer les header 
  • sudo apt install linux-headers-...

sudo apt install nvidia-driver installe la dernière version du driver dispo, mais cuda-drivers n'est pas forcément dispo pour cette version. Donc on va chercher la bonne version.

Pour supprimer tous les drivers nvidia précédemment installés. A utiliser avec précautions : sudo apt autoremove --purge *nvidia*

Installation du nvidia-driver et de cuda :

  • On installe le dépôt CUDA
  • wget https://developer.download.nvidia.com/compute/cuda/repos/$distro/x86_64/cuda-keyring_1.1-1_all.deb
    sudo dpkg -i cuda-keyring_1.1-1_all.deb
    sudo apt update
  • On regarde les version de nvidia-driver qui peuvent être pin :
  • sudo apt install nvidia-driver-pinning-*
  • On regarde les version des cuda-drivers qui peuvent être installées :
  • sudo apt list cuda-drivers-*
  • On regarde quelle version de nvidia-driver serait installé pour une version voulue de cuda :
  • Exemple : sudo apt install cuda-13-1 OU sudo apt install cuda-12-8
  • On choisi de pin la version lade plus élevéenvidia-driver qui a un cuda-drivers et qui permet d'installer la bonne version de CUDA :
  • Exemple : sudo apt install nvidia-driver-pinning-570 installe CUDA 12
  • Exemple : sudo apt install nvidia-driver-pinning-580 installe CUDA 13 
  • On install les drivers propriétaires (Calcul et Affichage GPU) :
  • sudo IGNORE_PREEMPT_RT_PRESENCE=1 apt install cuda-drivers (pour patcher même les RT Kernel)
  • Installer nvidia-container-toolkit pour Docker : sudo apt install nvidia-container-toolkit

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#configuring-docker 

Optionnel
  • Si on est sur un serveur, on peut aussi n'installer que les composants de Calcul GPU :

sudo apt -V install libnvidia-compute nvidia-dkms

  • Si on est sur un PC, on peut aussi n'installer que les composants d'Affichage GPU :

sudo apt -V install libnvidia-gl nvidia-dkms

  • Pour installer les composants  Libres (Open Kernel Modules), voir : 

https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/ubuntu.html 

  • Installer le SDK CUDA sudo apt install cuda-toolkit
  • puis les paquets GDS sudo apt install nvidia-gds (qui contient nvidia-fs kernel module)
  • pour arm64-jetson : sudo apt install cuda-compat

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/#network-repo-installation-for-ubuntu 

GPU

Que ce soit pour LeRobot, pour AICA, ou en général pour utiliser des modèles d'IA, l'installation de Linux avec les bons drivers graphiques n'est pas toujours aisé.

On veut accéder dans Docker aux capacités Compute d'un GPU, essentiellement fournie par NVidia Cuda. On différentiera l'installation d'un serveur qui n'a pas besoin de l'accélération graphique liée à l'affichage, ni de capacités temps-réel, contrairement à un PC de commande de robot.

Vérification de la compatibilité

On a une carte graphique donnée :

  • Vérification du Compute Capability https://developer.nvidia.com/cuda/gpus
  • Si on est dans cette liste, donc Compute Capability >= 7.5 c'est une bonne base
  • Si on n'y est pas, c'est qu'on a une carte Legacy, voir plus bas

Grâce à la compatibilité des versions mineures de Nvidia CUDA, une application d'IA compilée avec CUDA 11.8 peut être exécutée avec n'importe laquelle des version CUDA 11.x. Idem pour CUDA 12.x .

Par contre une application compilée avec cuDNN 8.x n'est pas compatible avec cuDNN 9.x .

PyTorch 2.3 et inférieur utilisent cuDNN 8.x

PyTorch 2.4 et supérieur utilisent cuDNN 9.x

Il faut donc choisir la version de Pytorch en fonction des versions de CUDA et cuDNN qui sont compatibles avec l'environnement d'exécution (carte graphique et driver)

https://docs.nvidia.com/deeplearning/cudnn/backend/latest/reference/support-matrix.html 

cuDNN>=v9.12.0 supporte :

  • CUDA 12.x (nvidia-driver>=525.60.13)
  • CUDA 13.x (nvidia-driver>=580.65.06)
  • CUDA CC>=7.5

cuDNN<=v9.11.1 

  • CUDA 12.x (nvidia-driver>=525.60.13)
  • CUDA CC>=5.0-9.0 (10.0-12.0 avec CUDA>=12.8 et nvidia-driver>=570.26)

cuDNN<=v9.10.2 : 

  • CUDA 12.x (nvidia-driver>=525.60.13) (12.8-9 pour >=570.26 et CC 10-12)
  • CUDA 11.x (nvidia-driver>=450.80.02)
  • CUDA CC>=5.0-9.0 (10.0-12.0 avec CUDA>=12.8 et nvidia-driver>=570.26)


On a une application d'IA donnée

Par exemple YOLO :

Problèmes avec les GPU NVidia anciens : https://github.com/ultralytics/ultralytics/issues/5305 

GPU NVidia anciens / Legacy

On a une carte graphique donnée | par exemple Quadro M620 (GM107GLM) :

  • Vérification du Compute Capability https://developer.nvidia.com/cuda/gpus/legacy | CC5.2
  • On conseille de laisser tomber l'IA avec des Compute Capability de 5.0 ou inférieur |
  • Si on a une Compute Capability entre 5.2 et 7.2 , on peut envisager des choses mais c'est compliqué
  • On vérifie la version de CUDA Max supportée : https://stackoverflow.com/questions/28932864/which-compute-capability-is-supported-by-which-cuda-versions  | pour CC5.2 : CUDA 12.x
  • On va donc pouvoir chercher une compatibilité d'exécution avec CUDA 12.x et CUDA 11.x , mais pas CUDA 13.x
  • Les nvidia-driver dispos sont 535-580
  • mais les cuda-drivers dispos sont 550-580
  • et les nvidia-driver-pinning et dispo de 570-590
  • 535 est testé/recommandé
  • 580 est dispo
  • Avec CUDA 12.0-1 et le driver 535 on peut avoir v8.9.2<=cuDNN<=v9.11.1
  • Avec CUDA 12.2 v8.9.7<=cuDNN<=v9.11.1
  • Avec CUDA >=12.3 v9<=cuDNN<=v9.11.1
  • Donc il faudrait CUDA 12.0-2
  • mais sudo apt list cuda-toolkit* seuls CUDA 12.5-13.1 sont dispos

Option 1 : Driver Version: 535.288.01   CUDA Version: 12.2

  • On a v8.9.7<=cuDNN<=v9.11.1
  • Mais on n'a pas cuda-drivers

Option 2 : Driver Version: 580   CUDA Version: 

  • On n'a pas cuDNN v8
  • on a cuda-drivers-580

https://pytorch.org/get-started/previous-versions/

  • Avec pytorch 2.1.1 et 2.2.0 , c'est cuddn 8.9.2 qui est installé par défaut

pytorch <2.2.0 n'est plus supporté dans pip

https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-892/support-matrix/index.html 

cuDNN=v8.9.2 : 

  • CUDA 12.0-1 (nvidia-driver>=525.60.13)
  • CUDA 11.x (nvidia-driver>=450.80.02)
  • CUDA CC>=5.0 <=8.6 (8.9-9.0 avec CUDA>=11.8)
  • Avec pytorch ... c'est cuddn 8.9.7 qui est installé par défaut

https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-897/support-matrix/index.html 

cuDNN=v8.9.7 : 

  • CUDA 12.0-2 (nvidia-driver>=525.60.13)
  • CUDA 11.x (nvidia-driver>=450.80.02)
  • CUDA CC>=5.0 <=8.6 (8.9-9.0 avec CUDA>=11.8)

Voir aussi https://docs.nvidia.com/deeplearning/cudnn/archives/index.html 

Sources

https://stackoverflow.com/questions/30820513/what-is-the-correct-version-of-cuda-for-my-nvidia-driver/30820690#30820690 

https://interfacinglinux.com/2024/01/16/nvidia-cuda-on-debian-real-time-kernel/ 

https://forum.zorin.com/t/nvidia-drivers-cannot-be-installed-because-of-real-time-kernel/46419/22