21 votes

Comment configurer l'igpu pour xserver et le gpu Nvidia pour cuda ?

Ubuntu 16.04

Résultat de uname -a:

Linux HOST 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Classe de bureau:

  • CPU: Intel

  • GPU: Nvidia avec 361.42

Ce que je veux:

  • le GPU intel doit exécuter le serveur X et mon écran, qui est connecté au DP intégré
  • le GPU nvidia doit être utilisé uniquement pour des calculs spécifiques à CUDA etc.
  • contrôle total sur le GPU nvidia (temps réel, statistiques, températures, vitesses des ventilateurs...)

Mon Problème:

  • ni nvidia-smi ni nvidia-settings ne fonctionnent et je ne peux pas contrôler mon GPU nvidia (les erreurs sont citées ci-dessous)

Mon Histoire:

Après un bref résumé de mon problème, je veux plonger dans le sujet; Depuis la sortie d'Ubuntu 16.04, je bidouille et échoue à réaliser ce qui suit:

  • Je veux que mon GPU intel (i7 6700K) pilote mon serveur X et tout ce qui est associé à celui-ci.

  • Je veux que mon GPU nvidia dédié soit utilisé uniquement pour les calculs basés sur Cuda et similaires.

  • Je vais ajouter plus d'un GPU nvidia au système, une fois mes problèmes résolus.

Un bref résumé de mon état initial:

J'ai installé les pilotes propriétaires pour nvidia et intel (intel-microcode et nvidia-361.42) via apt-get et désactivé le secure boot via mokutul --disable-validation.
Ensuite, j'ai configuré nvidia-prime pour utiliser la carte intel.
Ensuite, j'ai modifié mon xorg.conf pour contenir un seul écran avec un GPU intel et un pilote intel. (demandez des détails si nécessaire)
En testant le GPU pour le rendu avec Blender, tout semblait en ordre, sauf que je ne pouvais obtenir aucune statistique de mon GPU et nvidia-settings apparaissait vide.

Erreurs:

sudo nvidia-smi
NVIDIA-SMI n'a pas pu trouver la bibliothèque libnvidia-ml.so dans votre système. Assurez-vous que le pilote d'affichage NVIDIA est correctement installé et présent dans votre système:
Essayez également d'ajouter le répertoire contenant libnvidia-ml.so à votre chemin système.

Ce que j'ai appris jusqu'à présent à travers tous mes essais et recherches depuis la sortie (version courte, demandez des détails à tout moment):

Mes deux problèmes sont liés mais différents:

Nvidia-settings Vide:

  • ceci est dû au fait que ces paramètres ne s'affichent que lorsqu'un serveur X est connecté au GPU nvidia
  • la solution à cela serait d'ajouter un nouvel écran dans xorg.conf qui force un serveur X inutilisé à s'exécuter sur le GPU nvidia
  • mais cela n'est actuellement pas possible (voir autre problème) et n'est pas souhaité, car je veux uniquement que le GPU nvidia se concentre sur Cuda

Nvidia-smi ne fonctionne pas:

  • bbswitch n'est pas un problème car mon GPU (550ti) ne le prend pas en charge (erreurs dans dmesg)
  • prime de nvidia modifie l'entrée pour x86_64-linux-gnu_gl_conf vers soit /usr/lib/nvidia-361/ld.so.conf (GPU nvidia sélectionné) soit /usr/lib/nvidia-361-prime/ld.so.conf (GPU intel sélectionné)
  • la configuration pour la sélection intel manque de chemins essentiels vers les modules nvidia essentiels qui sont tous présents dans la configuration pour la sélection nvidia
  • lors du passage à nvidia via prime-select, je n'ai pas de serveur X car l'écran est connecté au GPU intégré, mais en me connectant à une console virtuelle, nvidia-smi fonctionne

Mon Hypothèse:

  • Nvidia prime est mauvais et ne fonctionne pas comme je le veux.
  • Je dois en quelque sorte contourner prime et configurer le système (même écrire de nouveaux fichiers de configuration manuellement?)

Mes Essais:

  • J'ai essayé de désinstaller nvidia-prime mais je me suis rendu compte par la suite que cela ne fonctionnerait pas. Lorsque le fichier de configuration pour x86_64-linux-gnu_gl_conf est supprimé, le résultat est un véritable chaos...
  • J'ai même essayé d'ajouter manuellement les chemins manquants aux fichiers x86_64-linux-gnu_gl_conf, mais je ne savais vraiment pas ce que je faisais et je n'ai eu aucun succès.

Mes Questions:

1) Comment puis-je résoudre le problème de nvidia-smi? Suis-je sur la bonne voie? Est-ce que quelqu'un a des instructions sur la façon dont je pourrais procéder?

2) Est-il possible d'activer le contrôle du ventilateur et d'autres contrôles pour le GPU nvidia (coolbits dans xorg.conf) sans serveur X sur le GPU (sans écran pour le GPU dans xorg.conf)?

Merci beaucoup d'avance pour toutes les réponses. J'ai littéralement écumé le web, le peigne étant mon problème.
Si j'ai omis quelque chose d'important, veuillez me le dire et n'hésitez pas à demander des fichiers journaux, etc.

MERCI

Images

Mon image de l'onglet pilote supplémentaire: enter image description here

6voto

winnetou Points 279

Je (créateur de ce post) ai trouvé la solution dont j'avais besoin tout seul !

Je vais maintenant expliquer la solution pour toute personne dans une situation similaire et ayant besoin d'aide !

SOLUTION:
INSTALLEZ LE PILOTE NVIDIA VIA LE RUNFILE FOURNI À http://www.nvidia.com/object/unix.html AVEC LE DRAPEAU "--no-opengl-files" !!

Cela empêche non seulement les fichiers OpenGL de nvidia d'écraser les fichiers mesa existants, mais installe également le pilote sans nvidia prime !!

Ainsi, tous mes problèmes sont résolus, simplement en installant le pilote manuellement, au lieu de l'installer à partir des dépôts. Le package des dépôts est "Optimus-Friendly" et contient donc tous les tracas inutiles qui lui sont associés.

EN DEUXIÈME LIEU

le xorg.conf doit être étendu avec un autre écran pour le/des GPU dédié(s) afin qu'il/ils ait/ aient des entrées dans nvidia-settings.

le mien ressemble à ceci

Section "ServerLayout"
    Identifier     "Layout0"
    Screen 0       "intel" 0 0
    Screen 1       "nvidia550ti" 3000 0
EndSection

Section "Device"
    Identifier     "intel"
    Driver         "intel"
    BusID          "PCI:0@0:2:0"
EndSection

Section "Device"
    Identifier     "nvidia550ti"
    Driver         "nvidia"
    BoardName      "GeForce GTX 550ti"
    BusID          "PCI:2@0:0:0"
EndSection

Section "Screen"
    Identifier     "intel"
    Device         "intel"
EndSection

Section "Screen"
    Identifier     "nvidia550ti"
    Device         "nvidia550ti"
    Option         "AllowEmptyInitialConfiguration" "on"
    Option         "Coolbits" "4"
    Option         "ConstrainCursor" "on"
EndSection

4voto

leezu Points 181

La réponse acceptée utilise le serveur X pour activer les périphériques Nvidia. Ceci n'est pas nécessaire et signifie que le serveur X utilisera une partie de la mémoire de la carte.

À la place, nvidia-modprobe devrait être installé comme décrit dans la FAQ du pilote (disponible sur le lien ci-dessous).

Ma solution recommandée est donc la suivante :

1) Installer le dernier pilote Nvidia via le runfile depuis ftp://download.nvidia.com/XFree86/Linux-x86_64/ avec les options --no-opengl-files et --dkms.
2) Installer la version correspondante de nvidia-modprobe via make all et sudo make install depuis ftp://download.nvidia.com/XFree86/nvidia-modprobe/

L'option --dkms assure que le module du kernel soit recompilé lorsque vous mettez à jour votre kernel.

4voto

revers Points 141

J'ai réinstallé les pilotes nvidia sans opengl comme mentionné dans les solutions ci-dessus mais cela n'a pas fonctionné pour moi. De plus, ces solutions sont assez insatisfaisantes, car elles impliquent la suppression de certaines capacités des pilotes (opengl).

J'ai trouvé une solution beaucoup plus simple, pour laquelle vous n'avez pas besoin de réinstaller le pilote :

  • J'ai installé les pilotes nvidia normalement
  • Dans l'interface graphique nvidia-settings, sous les profils PRIME, j'ai choisi la carte graphique intel comme GPU principal
  • Après le redémarrage, nvidia-smi ne fonctionne pas, mais je l'ai réparé en ajoutant /usr/lib/nvidia-387 au chemin des bibliothèques :
    export LD_LIBRARY_PATH=/usr/lib/nvidia-387:$LD_LIBRARY_PATH

Notez que selon le pilote installé, vous pourriez avoir besoin d'ajouter un autre dossier dans votre chemin de bibliothèques, par exemple /usr/lib/nvidia-384.
Vous pouvez ajouter cette commande au fichier ~/.bashrc pour exporter automatiquement le chemin lors du chargement d'un nouveau bash.

3voto

user840583 Points 31

Principalement comme un rappel pour moi: dans ubuntu 18.04 pour utiliser igpu pour le rendu et le gpu nvidia pour cuda, installez les pilotes nvidia par défaut, ouvrez nvidia-settings et configurez pour utiliser le gpu intel. Après cela, blacklister les pilotes nouveau et une partie des pilotes nvidia:

ouvrez /etc/modprobe.d/blacklist-nvidia.conf et commentez les lignes de cette manière:

#blacklist nvidia
blacklist nvidia-drm
#blacklist nvidia-modeset
#alias nvidia off
alias nvidia-drm off
#alias nvidia-modeset off

après cela, ouvrez /etc/modprobe.d/blacklist-nvidia-nouveau.conf et ajoutez ces lignes:

blacklist nouveau
options nouveau modeset=0

pour être vraiment sûr que nouveau est désactivé, vous pouvez les blacklister dans /etc/modprobe.d/blacklist.conf aussi: à la fin ajoutez:

#Blacklist des pilotes nouveau
blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

ensuite redémarrez.

tapez nvidia-smi pour vérifier que nvidia est chargé, et tapez lspci -nnk | grep -iA2 3D pour vérifier que le pilote en cours d'utilisation est nvidia et non nouveau.

0voto

Michele Points 905

J'ai obtenu la configuration que vous souhaitez (je le voulais aussi ;) ):

  • le GPU intel doit exécuter le serveur X et mon moniteur, qui est connecté au DP intégré
  • le GPU nvidia ne doit être utilisé que pour des calculs spécifiques à CUDA etc.
  • un contrôle total sur le gpu nvidia (temps réel, statistiques, températures, vitesses des ventilateurs...)

en utilisant bumblebee.

Mais avant de rentrer dans les détails, je tiens à vous avertir que lorsque vous modifiez la configuration de nvidia-settings ou de xorg.conf ou de nvidia prime, vous devez redémarrer votre système (vous le savez peut-être déjà). Ne pas redémarrer pourrait laisser le système dans un état non cohérent.


Dans ma configuration, je n'ai pas touché à xorg.conf. Pour moi, le faire a toujours été une source de douleur. Veuillez le laisser à l'état d'origine. Si vous ne souhaitez pas effectuer une réinstallation complète, vous pouvez trouver des sauvegardes dans /etc/X11/ (ls /etc/X11/xorg.conf*).

La première étape est d'essayer de faire fonctionner nvidia-settings. Si vous réussissez à le faire, vous pouvez utiliser nvidia PRIME pour passer au GPU intel, comme vous l'avez déjà mentionné. Il est nécessaire que nvidia prime pointe vers le GPU intel si vous souhaitez utiliser le GPU NVIDIA uniquement pour les calculs CUDA (c'est particulièrement nécessaire si vous souhaitez utiliser le débogueur cuda cuda-gdb).

Ensuite, vous pouvez essayer d'installer bumblebee:

sudo apt install bumblebee

Redémarrez. Vous pouvez surveiller l'état de bumblebee en utilisant

sudo service bumblebeed status

ou

bumblebeed -vv

Ce que fait bumblebee, c'est activer le GPU NVIDIA et essayer d'insérer le pilote nvidia dans le noyau uniquement lorsque c'est nécessaire. Vous pouvez utiliser bumblebee en préfixant optirun à la commande que vous souhaitez exécuter.

Pour faire fonctionner bumblebee, j'ai dû éditer manuellement /etc/bumblebee/bumblebee.conf pour définir correctement le nom du pilote nvidia et le chemin.

[...]
Driver=nvidia
[...]
KernelDriver=nvidia_361
[...]
LibraryPath=/usr/lib/nvidia-361:/usr/lib32/nvidia-361

Ensuite, après un sudo service bumblebeed restart, j'ai réussi à activer le système bumblebee.

En fait, nvidia-smi retourne

$ nvidia-smi
NVIDIA-SMI n'a pas pu trouver la bibliothèque libnvidia-ml.so sur votre système. Veuillez vous assurer que le pilote d'affichage NVIDIA est correctement installé et présent sur votre système :
Veuillez également essayer d'ajouter le répertoire contenant libnvidia-ml.so à votre chemin système.

mais optirun nvidia-smi:

$ optirun nvidia-smi
Ven juin 17 11:47:48 2016
+-------------------------------+
| NVIDIA-SMI 361.42     Version du pilote: 361.42                    |
|-------------------------------+----------------------+----------------------+
| GPU  Nom        Persistence-M| ID bus     Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Usage mémoire | G-Util Utilisation de la mémoire. |
|===============================+======================+======================|
|   0  GeForce GTX 970M    Hors tension  | 0000:01:00.0     Hors tension |                  N/A |
| N/A   53C    P1    18W /  N/A |     18MiB /  3071MiB |      0%      Par défaut |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processus:                                                        Mémoire GPU |
|  GPU       PID  Type  Nom du processus                               Utilisation      |
|=============================================================================|
|    0     20678    G   /usr/lib/xorg/Xorg                               4MiB |
+-----------------------------------------------------------------------------+

J'espère que cela vous aidera.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X