web-dev-qa-db-fra.com

Comment faire fonctionner nVidia CUDA ou OpenCL sur un ordinateur portable doté d’une carte discrète nVidia / Intel Integrated Graphics?

Contexte: Je suis un artiste 3D (passe-temps) et j’ai récemment commencé à utiliser Ubuntu 12.04 LTS en double amorçage avec Windows 7. Il fonctionne sur un ordinateur portable Toshiba 64 bits tout à fait nouveau avec un GPU nVidia GeForce GT 540M ( carte graphique). Il a aussi, cependant, Intel Integrated Graphics (que je soupçonne déjà utilisé par Ubuntu).

Ainsi, lorsque je convertis mes scènes 3D en images sous Windows, je peux choisir d’utiliser mon processeur ou mon GPU nVidia (plus rapide). À partir de l'application 3D, je peux configurer le GPU pour utiliser CUDA ou OpenCL. Dans Ubuntu, il n'y a pas d'option GPU.

Après avoir fait (trop?) De recherches sur les problèmes liés à Linux et à la technologie nVidia Optimus, je suis un peu plus éclairé, mais beaucoup plus confus.

Je me fiche de la technologie Optimus, car la vie de la batterie ne me pose aucun problème.

Voici ma question: que puis-je faire pour pouvoir utiliser des programmes utilisant CUDA (tels que Blender) sur mon GPU nVidia sous Ubuntu? Aurai-je besoin de pilotes nVidia? (J'ai entendu dire qu'ils ne jouaient pas bien avec les configurations Optimus sous Linux.) Existe-t-il au moins un moyen d'utiliser OpenCL sur mon GPU sous Ubuntu?

28
Peter Cassetta

Voici la réponse complète (basée sur Alex Falappa et Lekensteyn répond):

Il est en effet possible d’obtenir que les GPU nVidia Optimus exécutent CUDA sur Ubuntu.

Bumblebee n'est pas nécessaire pour CUDA. (plus à propos de Bumblebee : n NVIDIA GeForce avec Optimus Technology est-il pris en charge par Ubuntu? )

Cependant, lorsque vous devez montrer des exemples graphiques avec OpenGL, vous faites avez besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne verrez rien afficher ou obtenir l'erreur:

ERROR: Support for necessary OpenGL extensions missing. 

Si vous devez utiliser un programme graphique intensif tel que Blender, Bumblebee est actuellement un bon choix.

Passez à Installation de CUDA si vous ne souhaitez pas installer Bumblebee (c’est-à-dire si vous n’avez pas besoin d’OpenGL).
Sinon, lisez la suite.

Installer Bumblebee

Suivez les instructions sur Comment fonctionnent les ordinateurs portables équipés de Nvidia Optimus?

Celles-ci sont actuellement mises à jour par un développeur Bumblebee.

Une fois que vous avez installé Bumblebee et redémarré, vous pourrez choisir la carte graphique à utiliser lors du lancement de programmes à l'aide du programme optirunname__.
Par exemple:

optirun blender

Pour tester rapidement si tout fonctionne correctement, utilisez:

optirun glxspheres

Vous verrez un programme avec des sphères colorées en rotation si tout fonctionne correctement.

Vérifiez que la chaîne GL vendor du terminal contient le mot nvidia .
Si vous n’exécutez que glxspheresname__, la chaîne du fournisseur contient la carte Intel.

Lorsque vous exécutez un programme CUDA, vous devez installer le toolkit CUDA et un pilote nvidia. Si vous avez l'intention de compiler des programmes, vous avez également besoin du SDK. Les installateurs sont disponibles sur http://developer.nvidia.com/cuda-downloads , veuillez lire les instructions ci-dessous avant de transférer votre ordinateur Optimus.

Installer CUDA

Driver

Je recommande d'installer le pilote nvidia à partir du gestionnaire de paquets d'Ubuntu. Si vous installez Bumblebee, vous n'avez pas à vous soucier du pilote. Sinon, après l'installation, désactivez les bibliothèques nvidia comme décrit sur https://askubuntu.com/a/107746/6969 . Sinon, vous perdrez l'accélération 3D et risquerez de rester bloqué sur une résolution faible.

Boîte à outils

Fondamentalement, vous devez télécharger le programme d'installation, le rendre exécutable et l'exécuter. - Téléchargez l'installateur. Au 9 janvier 2013, 5.0.35 était le pilote le plus récent. En tant que système d’exploitation 64 bits, j’utilise le paquet Ubuntu 11.10 64 bits (bien que j’exécute 12.10). Rendez-le exécutable et autorisez l’installation à /usr/local/cuda:

chmod +x cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run
Sudo ./cudatoolkit_5.0.35_linux_64_ubuntu11.10-1.run

Lorsque le message d'installation vous demandant où installer CUDA s'affiche, appuyez simplement sur Entrée pour accepter le /usr/local/cuda par défaut:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

Après l’installation, certains messages suggérant de placer le répertoire de la bibliothèque cuda dans le chemin de recherche de votre bibliothèque seront imprimés:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Vous pouvez ignorer cette étape si vous le souhaitez, mais vous devez ensuite définir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH ultérieurement lors de l'exécution d'un programme.

SDK

Si vous voulez pouvoir compiler des applications CUDA, vous pouvez installer le SDK de la manière décrite ci-dessus. Téléchargez, rendez-le exécutable et exécutez-le (pas en tant que root, par exemple sans Sudoname__!).

Utiliser CUDA

CUDA n'a pas besoin d'un serveur X piloté par nvidia pour fonctionner. Dans ce cas, vous pouvez exécuter votre programme de test aléatoire comme:

LD_LIBRARY_PATH =/usr/lib/nvidia-current:/usr/lib32/nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Si vous n'avez pas ajouté CUDA à votre chemin de bibliothèque, vous aurez besoin des éléments suivants:

LD_LIBRARY_PATH =/usr/lib/nvidia-current:/usr/lib32/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(vous pouvez en éliminer les chemins 32 bits si votre programme est 64 bits).

Si le programme CUDA a quelque chose à afficher avec OpenGL, vous devez utiliser optirun:

 optirun blender

Ou, si CUDA n’a pas été ajouté à votre chemin par défaut:

LD_LIBRARY_PATH =/usr/local/cuda/lib64:/usr/local/cuda/lib: $ LD_LIBRARY_PATH optirun blender

Installer une compilation de Blender

(Avec les noyaux CUDA pré-compilés)

Lorsque vous exécutez optirun blender, vous pouvez recevoir un message de Blender indiquant que la compilation du noyau CUDA a échoué, ainsi qu'un message similaire à celui-ci dans le terminal:

Compiling CUDA kernel ...
nvcc warning : Option '--opencc-options (-Xopencc)' is obsolete and ignored, when
targeting compute_20, sm_20, or higher
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
CUDA kernel compilation failed, see console for details.

Si vous souhaitez utiliser la fonctionnalité de rendu GPU de Blender, vous aurez peut-être besoin d'une construction Blender avec des noyaux CUDA pré-compilés. Les versions de Blender.org ont toutes des noyaux CUDA pré-compilés; les constructions ppa: cheleb/blender-svn ( plus d’informations sur cette question ) ne le font pas.

Pour installer une version officielle de Blender, suivez simplement les instructions présentées dans cette réponse .

Si vous avez installé Blender sur /usr/lib/blender, vous devriez alors pouvoir exécuter Blender à partir du terminal et utiliser le rendu GPU avec:

 optirun '/usr/lib/blender/blender'
15
Peter Cassetta

Je viens de faire quelques expériences et peux confirmer les affirmations d'Eric Appleman selon lesquelles Bumblebee n'est pas nécessaire pour CUDA. (plus à propos de Bumblebee : n NVIDIA GeForce avec Optimus Technology est-il pris en charge par Ubuntu? )

Cependant, lorsque vous devez montrer des exemples graphiques avec OpenGL, vous faites avez besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne verrez rien afficher ou obtenir l'erreur:

ERROR: Support for necessary OpenGL extensions missing.

Lorsque vous exécutez un programme CUDA, vous devez installer le toolkit CUDA et un pilote nvidia. Si vous avez l'intention de compiler des programmes, vous avez également besoin du SDK. Les installateurs sont disponibles sur http://developer.nvidia.com/cuda-downloads , veuillez lire les instructions ci-dessous avant de transférer votre ordinateur Optimus.

Installer CUDA

Driver

Je recommande d'installer le pilote nvidia à partir du gestionnaire de paquets d'Ubuntu. Si vous installez Bumblebee, vous n'avez pas à vous soucier du pilote. Sinon, après l'installation, désactivez les bibliothèques nvidia comme décrit sur https://askubuntu.com/a/107746/6969 . Si vous ne le faites pas, vous perdrez l'accélération 3D et risquerez de rester bloqué sur une résolution faible.

Boîte à outils

Fondamentalement, vous devez télécharger le programme d'installation, le rendre exécutable et l'exécuter. - Téléchargez l'installateur. À ce jour, 4.2.9 est le pilote le plus récent. En tant que système d’exploitation 64 bits, j’utilise le paquet Ubuntu 11.04 64 bits (bien que j’exécute 12.04). Rendez-le exécutable et autorisez l’installation à /usr/local/cuda:

chmod +x cudatoolkit_4.2.9_linux_64_ubuntu11.04.run
Sudo ./cudatoolkit_4.2.9_linux_64_ubuntu11.04.run

Lorsque le message d'installation vous demandant où installer CUDA s'affiche, appuyez simplement sur Entrée pour accepter le /usr/local/cuda par défaut:

......................................
Enter install path (default /usr/local/cuda, '/cuda' will be appended):

Après l’installation, certains messages suggérant de placer le répertoire de la bibliothèque cuda dans le chemin de recherche de votre bibliothèque seront imprimés:

========================================

* Please make sure your PATH includes /tmp/cuda/cuda/bin
* Please make sure your LD_LIBRARY_PATH
*   for 32-bit Linux distributions includes /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions includes /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OR
*   for 32-bit Linux distributions add /tmp/cuda/cuda/lib
*   for 64-bit Linux distributions add /tmp/cuda/cuda/lib64 and /tmp/cuda/cuda/lib
* to /etc/ld.so.conf and run ldconfig as root

* Please read the release notes in /tmp/cuda/cuda/doc/

* To uninstall CUDA, remove the CUDA files in /tmp/cuda/cuda
* Installation Complete

Vous pouvez ignorer cette étape si vous le souhaitez, mais vous devrez ensuite définir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH ultérieurement lors de l'exécution d'un programme.

SDK

Si vous voulez pouvoir compiler des applications CUDA, vous pouvez installer le SDK de la manière décrite ci-dessus. Téléchargez, rendez-le exécutable et exécutez-le (pas en tant que root, par exemple sans Sudoname__!). Lors de la compilation de certaines parties, j’ai dû apporter quelques modifications à NVIDIA_GPU_Computing_SDK/C/common/common.mk:

  • après la ligne 189, OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu, ajoutez:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • après la ligne 271 environ, remplacez ${RENDERCHECKGLLIB} par ${OPENGLLIB} de telle sorte qu'il se présente comme suit:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • quelques lignes plus loin, faites de même, mais supprimez aussi -lcuda.
  • quelques lignes plus loin, faites la même chose que vous avez fait à la ligne 271.

Utiliser CUDA

CUDA n'a pas besoin d'un serveur X piloté par nvidia pour fonctionner. Dans ce cas, vous pouvez exécuter votre programme de test aléatoire comme:

LD_LIBRARY_PATH =/usr/lib/nvidia-current:/usr/lib32/nvidia-current: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

Si vous n'avez pas ajouté CUDA à votre chemin de bibliothèque, vous aurez besoin des éléments suivants:

LD_LIBRARY_PATH =/usr/lib/nvidia-current:/usr/lib32/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

(vous pouvez en éliminer les chemins 32 bits si votre programme est 64 bits).

Si le programme CUDA a quelque chose à afficher avec OpenGL, vous devez utiliser optirun:

 optirun blender

Ou, si CUDA n’a pas été ajouté à votre chemin par défaut:

LD_LIBRARY_PATH =/usr/local/cuda/lib64:/usr/local/cuda/lib: $ LD_LIBRARY_PATH optirun blender

27
Lekensteyn

La prise en charge des graphiques hybrides (généralement les graphiques intégrés Intel et les graphiques discrets Nvidia) sous Linux est actuellement un peu gênante. Quelque chose bouge lentement dans le champ serveur X mais ne retenez pas votre souffle.

Comme vous l'avez deviné, Bumblebee est actuellement un bon moyen d'aller.

J'ai récemment acheté un ordinateur portable Asus N55 avec des graphiques Intel/Nvidia. J'ai réussi à obtenir le rendu Blender Cycles pour utiliser CUDA.

Quand j'ai installé Ubuntu 12.04, il utilisait les graphiques intégrés par défaut via le pilote graphique Intel. Le pilote graphique noveau ne doit pas être installé.

Puis j'ai ouvert un terminal et ai fait:

Sudo add-apt-repository ppa:bumblebee/stable
Sudo apt-get update
Sudo apt-get install bumblebee bumblebee-nvidia

Après cela, je l’ai fait (comme recommandé par les instructions d’installation):

Sudo usermod -a -G bumblebee $USER

Puis j'ai redémarré.

Pour choisir le pilote à utiliser lors du lancement de programmes, utilisez le programme optirun, par exemple:

optirun blender

Pour tester si tout fonctionne correctement, utilisez:

optirun glxspheres

Et vérifiez que la chaîne de fournisseur GL contient le mot Nvidia. Si vous courez à la place:

glxspheres

La chaîne du fournisseur doit contenir le code Intel Word

2
Alex Falappa

Je trouve que pour exécuter tous les exemples de CUDA, en utilisant Bumblebee, vous devez installer les pilotes 295.40 à partir de ici et lors de l'installation choisissez de ne pas remplacer le config x11.

Ensuite, vous devez utiliser le même pilote pour compiler les exemples et exécuter le programme.

1
olmer