Comment configurer igpu pour xserver et nvidia gpu pour cuda?

12

Ubuntu 16.04

Sortie 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

Qualité bureau:

  • CPU: Intel
  • GPU: Nvidia avec 361.42

Ce que je veux:

  • le GPU Intel doit exécuter le xserver et mon moniteur, qui est connecté au DP intégré
  • le GPU nvidia ne doit être utilisé que pour le calcul spécifique à CUDA, etc.
  • contrôle total sur le nvidia gpu (temps réel, statistiques, vitesse des ventilateurs temps ...)

Mon problème:

  • ni nvidia-smini nvidia-settingstravailler et je ne peux pas contrôler mon GPU nvidia (les erreurs sont citées plus bas)

Mon histoire:

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

  • Je veux que mon GPU Intel (i7 6700K) pilote mon Xserver et tout ce qui lui est associé.
  • Je veux que mon GPU nvidia dédié soit uniquement utilisé pour le calcul basé sur Cuda et autres.
  • J'ajouterai 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 (microcode intel et nvidia-361.42) via apt-get et un démarrage sécurisé désactivé via mokutul --disable-validation.
Ensuite, j'ai défini nvidia-prime pour utiliser la carte Intel.
Ensuite, j'ai édité mon xorg.conf pour ne contenir qu'un seul écran avec Intel GPU et pilote Intel. (demandez des détails si nécessaire)
Test du GPU pour le rendu avec Blender, tout semblait bien, sauf que je ne pouvais pas obtenir de statistiques sur mon GPU et que les paramètres nvidia semblaient vides.

Les erreurs:

sudo nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.

Ce que j'ai jusqu'à présent appris à 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 pas les mêmes:

Paramètres Nvidia vides:

  • c'est parce que ces paramètres n'apparaissent que lorsqu'un Xserver est connecté au GPU nvidia
  • la solution serait d'ajouter un nouvel écran dans xorg.conf qui oblige et xserver inutilisé à s'exécuter sur le GPU nvidia
  • mais ce n'est actuellement pas possible (voir un autre problème) et non souhaité, car je veux simplement 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 supporte pas (erreurs dans dmesg)
  • nvidia prime modifie l'entrée de x86_64-linux-gnu_gl_conf en /usr/lib/nvidia-361/ld.so.conf(GPU nvidia sélectionné) ou /usr/lib/nvidia-361-prime/ld.so.conf(GPU Intel sélectionné)
  • la configuration de la sélection Intel manque les chemins essentiels vers les modules nvidia essentiels qui sont tous présents dans la conf 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 la connexion à une console virtuelle nvidia-smi fonctionne

Mon hypothèse:

  • Nvidia prime est mauvais et ne veut pas comme je veux.
  • Je dois en quelque sorte surmonter Prime et configurer le système (même en écrivant manuellement de nouvelles configurations?)

Mes essais:

  • J'ai essayé de désinstaller nvidia-prime mais je n'ai reconnu que par la suite que cela ne pouvait pas fonctionner. Lorsque le fichier conf pour x86_64-linux-gnu_gl_conf est supprimé, le résultat est un pur gâchis ...
  • J'ai même essayé d'ajouter manuellement les chemins manquants aux fichiers x86_64-linux-gnu_gl_conf, mais je ne savais pas vraiment ce que je faisais et je n'ai pas réussi.

Mes questions:

1) Comment puis-je résoudre le problème nvidia-smi? Suis-je sur la bonne voie? Quelqu'un at-il des instructions sur la façon de procéder?

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

Un grand merci d'avance pour toutes les réponses. J'ai littéralement peigné le Web, le peigne étant mon problème.
Si j'ai raté quelque chose d'important, dites-le moi et n'hésitez pas à demander des fichiers journaux, etc.

MERCI

Images

Mon image supplémentaire de l'onglet du pilote: entrez la description de l'image ici

winnetou
la source
J'ai également créé une question sur le tableau de bord: answers.launchpad.net/ubuntu/+question/294621
winnetou
peut-être que je n'ai pas décrit mon processus d'installation correctement: après avoir installé nvidia-drivers via apt-get, on vérifie également les pilotes supplémentaires, comme vous l'avez dit et les bons pilotes ont déjà été sélectionnés. j'ai inclus une capture d'écran. les pilotes sont présents et si je passe de nvidia-prime à Nvidia-Gpu, tout fonctionne. changer ce paramètre ne peut pas installer un pilote entier, en fait sa partie du pilote et ne fonctionnera même pas sans qu'il soit présent
winnetou
c'était une installation propre d'ubuntu 16.04 À chaque démarrage, je
mets à
Je sais que les pilotes sont utilisés par le système, car je peux utiliser CUDA sur le GPU nvidia. Mais tous les modules nvidia ne sont pas chargés au démarrage, de sorte que nvidia-smi manque par exemple les bibliothèques .... SI je comprends bien mon problème
winnetou

Réponses:

4

La réponse acceptée utilise le serveur X pour activer les appareils Nvidia. Cela n'est pas nécessaire et signifie que le serveur X utilisera de la mémoire de la carte.

Au lieu de cela nvidia-modprobedoit être installé comme décrit dans la FAQ du pilote (peut être trouvé sur le lien ci-dessous).

Donc, ma solution recommandée est de:

1) Installez le dernier pilote Nvidia via le fichier d' exécution de ftp://download.nvidia.com/XFree86/Linux-x86_64/ avec l' indicateur --no-opengl-fileset --dkms.
2) Installez la nvidia-modprobeversion correspondante via make allet sudo make installdepuis ftp://download.nvidia.com/XFree86/nvidia-modprobe/

L' --dkmsindicateur s'assure que le module du noyau est recompilé lorsque vous mettez à niveau votre noyau.

leezu
la source
Cela a fonctionné pour moi. C'est la réponse la plus simple et devrait être la réponse acceptée.
Marko Avlijaš
Cette solution n'a pas fonctionné pour moi. Au lieu de cela, je viens d'installer le pilote normalement et j'ai ajouté le chemin nvidia à LD_LIBRARY_PATH comme mentionné ci-dessous.
inverser le
3

J'ai (créateur de cet article) trouvé la solution dont j'ai besoin par moi-même!

Je vais maintenant expliquer la solution à quiconque se trouve dans une situation similaire et a besoin de cette aide!

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

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

Donc, tous mes problèmes sont résolus, simplement en installant le pilote manuellement, au lieu de l'installer à partir des référentiels. Le package des référentiels est "Optimus-Friendly" et a donc tous les fauteurs de troubles inutiles inclus avec lui.

DEUXIÈMEMENT

le xorg.conf doit être étendu avec un autre écran pour le (s) GPU dédié (s) afin qu'il / ils aient / 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
winnetou
la source
1
Salut. La réponse de leezu est plus simple et peut-être devriez-vous l'accepter?
Marko Avlijaš
Je ne peux pas encore confirmer la réponse de Leezu, bien qu'elle semble très prometteuse à mes yeux. S'il y a plus de personnes rapportant que cela fonctionne, ou si je peux enfin tester sa réponse et confirmer, je changerai la réponse acceptée. Il corrige le problème, que nvidia-modprobe ne fonctionne pas sans un x-server fonctionnant sur cette carte.
winnetou
Cela ne fonctionne pas si vous supprimez tous les pilotes nvidia existants et recommencez. Dit ceci NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
AfzalivE
1

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

  • le GPU Intel doit exécuter le xserver et mon moniteur, qui est connecté au DP intégré
  • le GPU nvidia ne doit être utilisé que pour le calcul spécifique à CUDA, etc.
  • contrôle total sur le nvidia gpu (temps réel, statistiques, vitesse des ventilateurs temps ...)

en utilisant bumblebee.

Mais avant d'entrer dans les détails, je dois vous avertir que lorsque vous modifiez la configuration de nvidia-settings ou xorg.conf ou nvidia prime, vous devez redémarrer votre système (peut-être que vous le savez 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, cela a toujours été une source de douleur. Veuillez le laisser à l'état d'origine. Si vous ne souhaitez pas effectuer une nouvelle installation, vous pouvez trouver des sauvegardes dans /etc/X11/( ls /etc/X11/xorg.conf*).

La première étape consiste à essayer de faire du nvidia-settingstravail. Si vous réussissez à le faire, vous pouvez utiliser nvidia PRIME pour passer au GPU Intel, comme vous l'avez déjà mentionné. Avoir nvidia prime point vers le GPU Intel est nécessaire si vous souhaitez utiliser le GPU NVIDIA uniquement pour les calculs CUDA (il est particulièrement nécessaire si vous souhaitez utiliser le débogueur cuda cuda-gdb).

Après cela, vous pouvez essayer d'installer Bumblebee :

sudo apt install bumblebee

Redémarrez. Vous pouvez surveiller l'état du bourdon en utilisant

sudo service bumblebeed status

ou

bumblebeed -vv

Ce que fait Bumblebee est d'activer le GPU NVIDIA et d'essayer d'insérer le pilote nvidia dans le noyau uniquement lorsque cela est nécessaire. Vous pouvez utiliser bumblebee en pré-attendant optirunla commande que vous souhaitez exécuter.

Pour faire fonctionner les bourdons, j'ai dû modifier manuellement /etc/bumblebee/bumblebee.confpour définir correctement le nom et le chemin du pilote nvidia.

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

Puis, après un sudo service bumblebeed restartj'ai réussi à activer le système de bourdon.

En fait nvidia-smiretourne

$ nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system:
Please also try adding directory that contains libnvidia-ml.so to your system PATH.

mais optirun nvidia-smi:

$ optirun nvidia-smi
Fri Jun 17 11:47:48 2016       
+------------------------------------------------------+                       
| NVIDIA-SMI 361.42     Driver Version: 361.42         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 970M    Off  | 0000:01:00.0     Off |                  N/A |
| N/A   53C    P1    18W /  N/A |     18MiB /  3071MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0     20678    G   /usr/lib/xorg/Xorg                               4MiB |
+-----------------------------------------------------------------------------+

J'espère que cela t'aides.

Michele
la source
bonne réponse! MAIS j'ai fatigué Bumblebee avec Ubuntu 15.10 et le même matériel et ça a été foiré. Tellement, que j'ai fait une nouvelle installation de 16.04 après qu'elle soit devenue disponible. C'était vraiment pire. Même le mode de récupération n'a pas démarré correctement .... Je me suis donc juré de ne plus utiliser de bourdon. Un autre problème avec Bumblebee était (je ne sais pas comment vous avez contourné cela) était que mon GPU dédié ne supporte pas bbswitch, donc j'ai eu des erreurs, que le GPU ne pouvait pas être éteint correctement
Winnetou
Mais, c'est théoriquement une réponse possible! Mais pas celui que je recherche :(.
winnetou
Un autre MAIS: (je ne sais plus, si cela a fonctionné à mon essai) Est-ce que nvidia-settings vous montre le GPU (sudo optirun nvidia-settings bien sûr)? Êtes-vous capable de contrôler la vitesse, la tension, etc. du ventilateur? Si je me souviens bien, ces paramètres ne sont possibles que dans nvidia-settings, après avoir activé les coolbits dans le fichier xorg.conf. nvidia-smi ne vous donne qu'un moniteur ..... veuillez corriger si je me trompe
winnetou
Et un autre énorme point d'interrogation est: Est-ce que Bumblebee fonctionne bien si j'ai plus d'un GPU dédié? Ce cas d'utilisation (igpu + gpu) n'est déjà pas recommandé pour les bourdons sur les gpus non mobiles, mais avoir plus d'un d-gpu est une nouvelle histoire de trou pour les bourdons.
winnetou
@winnetou vous avez absolument raison sur plus d'un processeur graphique - c'est une bonne question. Un autre problème est que nvidia-docker ne fonctionne pas comme prévu le plus probablement.
vskubriev
1

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 tout à fait insatisfaisantes, car elles impliquent de supprimer 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 de nvidia-settings, sous les profils PRIME, je choisis la carte graphique Intel comme GPU principal
  • Après le redémarrage, nvidia-smi ne fonctionne pas, mais j'ai corrigé 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 devrez peut-être ajouter un autre dossier dans le chemin de votre bibliothèque, 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.

renverser
la source
Que se passe-t-il si vous mettez à niveau le pilote nvidia? Devez-vous modifier manuellement le chemin d'accès à la bibliothèque?
liang
Je suppose que cela ne devrait pas être un problème si le pilote est toujours dans le même dossier. Si le dossier change, vous devez probablement changer le chemin de la bibliothèque.
inverser
0

principalement pour rappel: dans ubuntu 18.04 pour utiliser igpu pour le rendu et nvidia gpu pour cuda, installer les pilotes nvidia par défaut, ouvrir nvidia-settings et paramétrer pour utiliser intel gpu. Après cela, mettez les nouveaux pilotes sur liste noire 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 aussi les mettre sur liste noire dans /etc/modprobe.d/blacklist.conf: à la fin, ajoutez:

#Blacklist nouveau drivers
blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

puis redémarrez.

tapez nvidia-smipour vérifier que nvidia est chargé, et tapez lspci -nnk | grep -iA2 3Dpour vérifier que le pilote utilisé est nvidia et non nouveau.

user840583
la source