Comment utiliser CUDA avec NVIDIA Prime

10

J'ai trouvé une demi-douzaine de messages à ce sujet sur le Web, mais aucun d'eux ne répond vraiment à la question.

Je veux configurer mon GPU nvidia pour ne faire que des calculs, pas pour piloter l'affichage. Mais lorsque je passe à l'utilisation du processeur graphique Intel dans la configuration nvidia-prime, je ne peux plus charger le module nvidia.

modprobe: ERROR: could not insert 'nvidia_352': No such device

Sans le module, CUDA ne fonctionne pas, évidemment.

Alors, que fait exactement nvidia-prime qui rend impossible le chargement du module? Ce n'est pas sur liste noire. Il n'y a pas de fichier xorg.conf, alors comment le système sait-il utiliser le processeur graphique Intel à la place du processeur discret?

Je suis sur un Dell 5510 Precision avec Ubuntu 14.04 installé en usine et mon GPU est Quadro M1000M.

Certains suggèrent d'utiliser des bourdons, mais cela ne devrait pas être nécessaire pour des charges de calcul pures.

En outre, apparemment, bumblebee est capable de charger le module. Alors, que fait-il exactement?

Mise à jour: Alors pourquoi semble-t-il toujours que je trouve la réponse lorsque je poste enfin une question, après des heures à essayer de la comprendre. Cette réponse n'est que partielle, mais je suis sur quelque chose.

Jusqu'à présent, j'ai déterminé que Prime fait au moins deux choses:

  • Désactivez le GPU à l'aide de bbswitch.
  • Modifie les alternatives pour /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf.

En utilisant bbswitch pour réactiver le GPU, je peux maintenant charger le module NVIDIA.

Mais la question demeure: quelle est la meilleure façon de configurer le système pour utiliser la carte NVIDIA uniquement pour les calculs?

Dois-je configurer nvidia-prime pour utiliser le processeur graphique Intel et essayer de démêler manuellement ce qui a fait fonctionner CUDA?

Comment puis-je m'assurer que le système utilise toujours le processeur graphique Intel pour l'affichage?

Comment pourrais-je simplement désactiver NVIDIA Prime et tout configurer manuellement?

Ou devrais-je abandonner et utiliser Bumblebee et optirun? Quels en sont les inconvénients, le cas échéant?

Des recommandations?

orodbhen
la source
Pouvez-vous désactiver l'affichage sur le GPU dans l'application Paramètres du serveur NVIDIA X?
Roger Dahl
L'utilitaire NVIDIA vous permet uniquement de choisir entre Intel et NVIDIA GPU. Il ne fournit pas de paramètres fins, tels que la carte à utiliser pour l'affichage.
orodbhen

Réponses:

5

Dans mon cas, j'ai constaté que la carte NVidia n'était pas réellement désactivée, et la seule chose que je devais réellement faire pour exécuter le code CUDA était:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

dans le shell où je veux l'exécuter (je suppose que changer globalement le paramètre alternatif casserait compiz, etc, etc ...)

Pour arriver à ce point (sur un Dell Optiplex 7010, avec Ubuntu 14.04, CUDA 7.5 et une GTX 980), je pense que les étapes étaient les suivantes:

  1. Utilisez l'onglet Profils PRIME pour sélectionner Intel
  2. Redémarrez et sélectionnez Intel par défaut dans le BIOS
  3. Éteindre l'ordinateur
  4. Branchez les moniteurs dans la vidéo intégrée :)

Tout semble bien fonctionner jusqu'à présent (nvidia-smi voit la carte, les échantillons cuda fonctionnent, theano utilise la carte, etc ...)

David Huggins Daines
la source
1
Oui, malheureusement, il ne semble pas y avoir de solution cohérente, c'est pourquoi je voulais vraiment comprendre ce qui se passait sous le capot.
orodbhen
2

Je crois que j'ai trouvé au moins une solution rapide à cela, comme décrit dans la mise à jour de mon message d'origine. J'ai vraiment trouvé deux solutions, même si je suis sûr qu'il y en a d'autres.

1 - Avec Prime en mode Intel, réactivez la carte NVIDIA via bbswitch , puis exécutez modprobe nvidiapour charger le module et créer les nœuds de périphérique.

2 - Utilisez Bumblebee optirun pour lancer une session bash à partir de laquelle vous pouvez faire tous vos trucs CUDA.

Ces deux solutions vous permettent d'utiliser les graphiques intégrés pour votre affichage, tout en utilisant la carte NVIDIA pour calculer les charges. La solution optirun semble plus polyvalente, mais je préfère la première pour son minimalisme.

J'espère que quelqu'un avec plus de compréhension améliorera cette réponse.

orodbhen
la source
pouvez-vous expliquer plus clairement la première option? Comment allumer et éteindre la carte à l'aide de bbswitch?
Abonec
En fait, j'ai compris comment faire fonctionner correctement les bourdons, et je mettrai à jour ma réponse lorsque j'aurai le temps. J'ai essentiellement suivi cela . C'est frustrant que ce genre de choses soit si mal documenté, car c'est vraiment assez simple.
orodbhen
2

J'utilise la carte NVIDIA uniquement pour les exécutions CUDA et découvre cette approche:

Tout le temps j'utilise une carte Intel et cela est confirmé par la commande lspci | grep -E "VGA|3D":

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

Dans la ligne correspondante pour la carte NVIDIA, vous devriez voir (rev ff)que cela signifie qu'elle est désactivée.

Pour allumer la carte et l'utiliser pour les calculs CUDA, j'utilise deux commandes suivantes:

sudo prime-select nvidia
sudo prime-switch

Après ce lspci | grep -E "VGA|3D"rapport de commande :

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

Notez environ (rev a2), pas (rev ff)dans la ligne correspondante. Maintenant, la carte est prête pour le calcul.

Après les calculs, j'utilise des actions en arrière:

sudo prime-select intel
sudo prime-switch

Et lspci | grep -E "VGA|3D"rapporte:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)
Abonec
la source
Donc, fondamentalement, vous n'avez besoin de vous reconnecter qu'après avoir basculé avec Prime, si vous voulez changer le GPU qui exécute l'affichage? Je n'avais pas pensé à ça, mais c'est logique. Bien sûr, vous devez vous assurer de revenir en arrière avant de vous déconnecter ou de redémarrer.
orodbhen
J'utilise cette approche. Je me connecte avec le profil Intel actif afin que Xorg et Firefox n'utilisent pas le GPU. Ensuite, je passe au profil nvidia et tout mon travail CUDA passe ensuite sur le GPU et n'a pas à rivaliser avec firefox et Xorg pour la mémoire :)!
John
0

Si quelqu'un rencontre toujours des problèmes après avoir suivi les étapes de la réponse acceptée, essayez ceci:

echo "install bbswitch /bin/true" > /etc/modprobe.d/blacklist-bbswitch.conf
update-initramfs -u

Cela désactivera complètement bbswitch. L'inconvénient est que vous ne pourrez pas désactiver la carte NVIDIA pour économiser l'énergie (Xorg utilise toujours des graphiques intégrés, tant que prime-select intel).

Huazuo Gao
la source
0

J'utilise un 1070 ti avec un thinkpad T420 dans un egpu configuré pour extraire la crypto-monnaie pendant que je travaille. Le GPU sera théoriquement rentabilisé après quelques mois de cette façon.

J'ai trouvé qu'avec nvidia 387, l'exportation LD_LIBRARY_PATH = / usr / lib / nvidia-387 fonctionnait avec ethminer en utilisant cuda.

Cependant, la seule façon dont je pouvais faire fonctionner le système après un "premier choix" était si j'avais un deuxième moniteur branché sur la carte lorsque j'ai fait la sélection et que je me suis déconnecté. Sinon, j'obtiendrais une erreur «Le système fonctionne en mode graphique bas» ou un écran vide continu. Bien sûr, lorsque je me connecte en exécutant des graphiques Intel, le moniteur branché sur le GPU n'affiche rien, je dois donc le débrancher du processeur graphique et le rebrancher sur le système (sortie de la station d'accueil DVI) pour exécuter la configuration de mon moniteur en duel .

Je pense que c'est parce que gpu-manager détecte que bbswitch ne fonctionne pas, puis supprime la configuration xorg.

Je poste ceci pour montrer une solution de contournement pour quelques-uns qui pourraient être dans une situation similaire, mais aussi pour voir si quelqu'un a une idée pour empêcher cela, car avoir à déplacer ce câble pour chaque redémarrage est un peu un inconvénient.

fichier_log: /var/log/gpu-manager.log

last_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot new_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot ne peut pas accéder / exécuter / udc-fglrx-was-chargé fichier Recherche de modules fglrx dans / lib /modules/4.4.0-104-generic/updates/dkms Recherche de modules nvidia dans /lib/modules/4.4.0-104-generic/updates/dkms Module nvidia trouvé: nvidia_387_drm.ko Nvidia est-il chargé? oui Nvidia a-t-il été déchargé? non Nvidia est-il sur liste noire? oui fglrx est-il chargé? non fglrx a-t-il été déchargé? non fglrx est-il sur liste noire? non Les informations sont-elles chargées? oui La radeon est-elle chargée? non Radeon est-il sur liste noire? non amdgpu est-il chargé? non amdgpu est-il sur liste noire? non Nouveau chargé? non Nouveau sur liste noire? oui Le module du noyau fglrx est-il disponible? non Le module du noyau nvidia est-il disponible? oui ID fournisseur / périphérique: 8086: 126 BusID "PCI: 0 @ 0: 2: 0" Est-ce que boot vga? oui ID fournisseur / périphérique: 10de: 1b82 BusID "PCI: conf Alternative principale actuelle: (null) Alternative actuelle à egl: /usr/lib/nvidia-387-prime/ld.so.conf nvidia est-il activé? nvidia egl est-il activé? non fglrx est-il activé? non Mesa est-il activé? non Mesa egl est-il activé? non pxpress est-il activé? non L'amorçage est-il activé? oui Prime egl est-il activé? oui Nvidia est-il disponible? oui Nvidia egl est-il disponible? non fglrx est-il disponible? non Fglrx-core est-il disponible? non Mesa est-il disponible? oui Mesa egl est-il disponible? oui pxpress est-il disponible? non Le premier est-il disponible? oui Prime egl est-il disponible? aucun processeur Intel IGP détecté Système hybride Intel Nvidia version 387.34 détectée / sys / class / dmi / id / product_version = "ThinkPad T420" / sys / class / dmi / id / product_name = "4236L23" 1er essai: bbswitch sans bizarreries Chargement de bbswitch avec Paramètres "load_state = -1 unload_state = 1" Erreur: peut ' t open / proc / acpi / bbswitch Suppression de xorg.conf. Chemin: /etc/X11/xorg.conf ne peut pas accéder à /usr/share/gpu-manager.d/hybrid-power-saving Pas besoin de changer l'état actuel du bbswitch

Si je nano xorg.conf après cela, il est vide. Je poste ceci après avoir fait l'astuce de changement de moniteur, avec l'exploitation minière en arrière-plan, et mon xorg.conf est toujours vide. Donc, je suppose que pour une raison quelconque, lorsque je garde le moniteur connecté au GPU au redémarrage de lightdm, peu importe que mon xorg.conf soit supprimé. Des idées?

nhorning
la source
Aussi ... J'ai bbswitch sur liste noire comme suggéré ci-dessus, car j'obtiendrais une erreur continue avec cela au démarrage. J'ai pu démarrer en mode intel en utilisant nvidia-384 une ou deux fois, mais j'ai eu du mal à faire le minage avec cela, et j'ai pensé que cela pourrait être parce que le support 1070 ti a été ajouté avec nvidia-387.
nhorning