Gestion des cartes graphiques NVIDIA dans MATLAB : le NVIDIA System Management Interface

NVIDIA fournit un utilitaire de monitoring avec les drivers récents des cartes Tesla et Quadro. Cet outil s’appelle le « NVIDIA System Management Interface » ou « nvidia-smi ». Il est disponible sur Linux, et avec les versions 64bit de Windows Server 2008 R2 et de Windows 7. Il est également fournit avec les drivers des cartes GeForce avec une prise en charge limitée pour ces modèles (voir la liste à la fin de ce billet).

Je vais vous montrer comment appeler cet exécutable à partir de MATLAB pour récupérer des informations sur votre carte NVIDIA (nom, température, mémoire, fréquence…).

1) nvidia-smi

nvidia-smi est donc un exécutable 64 bits qui est installé en même tant que le driver de la carte graphique.

Le dossier d’installation par défaut sur Windows 7 est « C:\Program Files\NVIDIA Corporation\NVSMI ». Pour plus de souplesse, vous pouvez ajouter ce chemin dans la variable d’environnement PATH de Windows.

Sur Linux, il faut utiliser le driver propriétaire fournit par NVIDIA. Le dossier d’installation par défaut est « /usr/bin »

Pour vérifier que vous êtes prêt à utiliser cet outil, vous pouvez simplement exécuter la commande suivante dans une invite de commande de votre système d’exploitation :

nvidia-smi -L

Indice du GPU

Pour simplifier la suite de ce billet, je partirai du principe qu’il n’y a qu’une seule carte graphique présente sur votre machine. La commande utilisée commencera donc toujours par :

nvidia-smi -i 0

Le « 0 » étant l’indice du premier GPU détecté sur la machine.

Liste des propriétés

La commande pour récupérer les propriétés est la suivante :

nvidia-smi -i 0 --query-gpu=

Le signe « = » est alors suivi de la liste des propriétés à récupérer, séparées par des virgules. Pour obtenir la liste de toutes les propriétés, utilisez la commande suivante dans une console de votre système d’exploitation :

nvidia-smi --help-query-gpu > list.txt

Ouvrez le fichier list.txt et cherchez la propriété qui vous intéresse.

Vous pouvez consulter la liste générée sur ma machine ici.

Format

Sans trop rentrer dans le détail, on utilisera le formatage --format=csv,noheader lors des appels à nvidia-smi

2) nvidia-smi & MATLAB

Pour résumer, on utilisera ce modèle de commande :

nvidia-smi -i 0 --format=csv,noheader --query-gpu=

Que ce soit sur Windows, Linux ou Mac OS X, MATLAB est capable d’exécuter des programmes externes grâce aux fonctions system, dos ou unix.

On peut donc tester comme précédemment dans le Command Window de MATLAB :

[status, data] = system('nvidia-smi -L')
status =

     0


data =

GPU 0: Quadro K2000 (UUID: GPU-66119846-d929-fb76-3d19-b9056e2e00ab)

Il est très important de tester la valeur de retour de la variable status. Elle vaut 0 en cas de succès et une valeur différente de 0 en cas d’échec. Tout le travail consiste ensuite à extraire les informations de la chaine de caractère contenue dans la variable data

Version du driver

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=driver_version')
data =

320.00

Nom

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=name')
data =

Quadro K2000

Numéro de série

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=serial')
data =

0321113022548

Identifiant unique (UUID)

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=uuid')
data =

GPU-66119846-d929-fb76-3d19-b9056e2e00ab

Vitesse ventilateur

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=fan.speed')
data =

30 %

Température

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=temperature.gpu')
data =

32

Mémoire totale

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.total')
data =

2047 MB

Mémoire disponible

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.free')
data =

34 MB

Mémoire utilisée

[status, data] = system('nvidia-smi -i 0 --format=csv,noheader --query-gpu=memory.used')
data =

2013 MB

3) Fonctions MATLAB

J’ai écris deux fonctions MATLAB pour vous permettre de récupérer aisément certaines informations sur votre carte graphique NVIDIA.

Vous pouvez télécharger les deux codes sources ici : Informations sur la carte graphique NVIDIA avec MATLAB et le NVIDIA System Management Interface

Voici un exemple d’utilisation :

>> [gpuInfo, sysInfo] = nvsmiQuery;
>> nvsmiLog(gpuInfo, sysInfo);

Voici un aperçu des informations renvoyées :

query nvidia gpu property with MATLAB

4) Multiple GPUs

Si vous avez plusieurs cartes graphiques installées sur votre machine, il serait tentant d’utiliser les syntaxes suivantes pour accéder aux différents GPU :

nvidia-smi -i 0 ...

Puis

nvidia-smi -i 1 ...

Mais, il faut savoir que l’ordre des indices peut changer à chaque démarrage de la machine. Dans ce cas, il est donc plus prudent d’utiliser l’identifiant unique de chaque GPU :

nvidia-smi -i GPU-66119846-d929-fb76-3d19-b9056e2e00ab ...

5) Alternative à l’utilisation de la fonction system

L’outil fourni par NVIDIA permet de stocker le résultat dans un fichier CSV, comme par exemple :

status = system('nvidia-smi -i 0 -f gpuprop.csv --format=csv,noheader --query-gpu=driver_version,serial,name,uuid,temperature.gpu,fan.speed')

Ou encore dans un fichier XML :

status = system('nvidia-smi -q -f gpuprop.xml -x ')

Il faudra alors ensuite extraire les informations de ces fichiers.

Vous pouvez consulter les fichiers issus des lignes précédentes :

6) Conclusion

Vous avez maintenant un outil à disposition pour récupérer des informations sur les GPUs NVIDIA directement depuis MATLAB.

En réalité, l’exécutable nvidia-smi est basé sur la bibliothèque NVIDIA Management Library (NVML) disponible gratuitement avec le GPU Deployment Kit. De ce fait, on peut faire directement appel à cette librairie via un fichier MEX depuis MATLAB. C’est ce que je vous montrerai dans un prochain billet ;)

N’hésitez pas à me faire des retours si vous rencontrez des difficultés dans l’utilisation des codes présentés dans ce billet.

7) Produits pris en charge

Voici une liste des GPUs pris en charge par nvidia-smi :

  • Full Support
    • NVIDIA Tesla Line:
      • S2050, C2050, C2070, C2075,
      • M2050, M2070, M2075, M2090,
      • X2070, X2090,
      • K10, K20, K20X, K20Xm, K20c, K20m, K20s
    • NVIDIA Quadro Line:
      • 410, 600, 2000, 4000, 5000, 6000, 7000, M2070-Q
      • K2000, K2000D, K4000, K5000, K6000
    • NVIDIA GRID Line:
      • K1, K2, K340, K520
    • NVIDIA GeForce Line: None
  • Limited Support
    • NVIDIA Tesla Line: S1070, C1060, M1060
    • NVIDIA Quadro Line: All other current and previous generation Quadro-branded parts
    • NVIDIA GeForce Line: All current and previous generation GeForce-branded parts

8) Liens utiles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>