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


28

Contexte: Je suis un artiste 3D (comme passe-temps) et j'ai récemment commencé à utiliser Ubuntu 12.04 LTS comme double démarrage avec Windows 7. Il fonctionne sur mon tout nouveau portable Toshiba 64 bits avec un GPU nVidia GeForce GT 540M ( carte graphique). Cependant, il dispose également d'Intel Integrated Graphics (que je soupçonne qu'Ubuntu utilise).

Ainsi, lorsque je rend mes scènes 3D sur des images sous Windows, je peux choisir entre utiliser mon processeur ou mon GPU nVidia (plus rapide). Depuis 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?) Des recherches sur les problèmes avec Linux et la technologie nVidia Optimus, je suis un peu plus éclairé, mais beaucoup plus confus.

Je me fiche un peu de la technologie Optimus, car l'autonomie de la batterie n'est en aucun cas un problème pour moi.

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

Réponses:


27

Je viens de faire quelques expériences et je peux confirmer les déclarations d'Eric Appleman selon lesquelles Bumblebee n'est pas nécessaire pour CUDA. (en savoir plus sur Bumblebee : un NVIDIA GeForce avec la technologie Optimus est-il pris en charge par Ubuntu? )

Cependant, lorsque vous avez besoin de montrer des exemples graphiques en utilisant OpenGL, vous avez besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne voyez pas non plus quoi que ce soit sur votre écran ou obtenez l'erreur:

ERROR: Support for necessary OpenGL extensions missing.

Lorsque vous exécutez un programme CUDA, vous devez installer la boîte à outils CUDA et un pilote nvidia. Si vous avez l'intention de compiler des programmes, vous avez également besoin du SDK. Les programmes d'installation peuvent être trouvés sur http://developer.nvidia.com/cuda-downloads , veuillez lire les instructions ci-dessous avant d'utiliser votre ordinateur portable Optimus.

Installer CUDA

Chauffeur

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 /ubuntu//a/107746/6969 . Si vous ne le faites pas, vous perdrez l'accélération 3D et risquez de rester bloqué sur une basse résolution.

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 moment d'écrire ces lignes, 4.2.9 est le pilote le plus récent. Comme j'ai un système d'exploitation 64 bits, j'utilise le package 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 s'affiche et vous demande où installer CUDA, appuyez simplement sur Entrée pour accepter la valeur par défaut /usr/local/cuda:

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

Après l'installation, il affichera quelques messages qui suggèrent de mettre le répertoire de la bibliothèque cuda dans votre chemin de recherche de bibliothèque:

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

* 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 la définir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHultérieurement lors de l'exécution d'un programme.

SDK

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

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

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • après environ la ligne 271, permutez ${RENDERCHECKGLLIB}de ${OPENGLLIB}telle sorte qu'il ressemble à:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • quelques (5) lignes plus loin, faites de même, mais supprimez -lcudaaussi.
  • quelques (7) lignes plus loin, faites comme vous l'avez fait à la ligne 271.

Utilisation de 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 d'accès à la bibliothèque, vous aurez besoin de:

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 supprimer les chemins 32 bits si votre programme est en 64 bits).

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

 optirun blender

Ou, si vous n'avez pas ajouté CUDA à votre chemin par défaut:

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


Merci, je vous remettrai la prime (mais j'accepterai ma réponse Community Wiki).
Peter Cassetta

De plus, 100 répétitions et un vote positif n'expriment pas avec précision combien j'apprécie votre travail sur le projet Bumblebee. Vous et vos collègues en avez fait un excellent logiciel. Alors merci. :)
Peter Cassetta

2
Vous êtes les bienvenus, maintenant j'espère que le temps nous accordera une solution finale sous forme de PRIME avec une pile xorg + mesa (ou Wayland?)
Mise à jour

1
PRIME , Xorg est le serveur d'affichage chargé de vous montrer les graphiques, Mesa est pour OpenGL, Wayland est un successeur possible de Xorg.
Lekensteyn

1
Il faut noter que CUDA nécessite un pilote NVIDIA minimum. Par exemple, CUDA 6.5 nécessite au moins NVIDIA 340.21.
Yamaneko

15

Voici la réponse complète (basée sur les réponses d' Alex Falappa et de Lekensteyn ):

Il est en effet possible d'obtenir des GPU nVidia Optimus pour exécuter CUDA sur Ubuntu.

Bumblebee n'est pas nécessaire pour CUDA. (en savoir plus sur Bumblebee : un NVIDIA GeForce avec la technologie Optimus est-il pris en charge par Ubuntu? )

Cependant, lorsque vous avez besoin de montrer des exemples graphiques en utilisant OpenGL, vous avez besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne voyez pas non plus quoi que ce soit sur votre écran ou obtenez l'erreur:

ERROR: Support for necessary OpenGL extensions missing. 

Si vous devez utiliser un programme gourmand en graphisme tel que Blender, Bumblebee est actuellement une bonne solution.

Passez à Installer 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 de Comment fonctionnent les ordinateurs portables avec Nvidia Optimus?

Celles-ci sont actuellement tenues à 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 en utilisant le optirunprogramme.
Par exemple:

optirun blender

Pour tester rapidement si tout fonctionne correctement, utilisez:

optirun glxspheres

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

Vérifiez que la chaîne du fournisseur GL dans le terminal contient le mot nvidia .
Si vous exécutez uniquement glxspheres, vous verrez que la chaîne du fournisseur contient la carte Intel à la place.

Lorsque vous exécutez un programme CUDA, vous devez installer la boîte à outils CUDA et un pilote nvidia. Si vous avez l'intention de compiler des programmes, vous avez également besoin du SDK. Les programmes d'installation peuvent être trouvés sur http://developer.nvidia.com/cuda-downloads , veuillez lire les instructions ci-dessous avant d'utiliser votre ordinateur portable Optimus.

Installer CUDA

Chauffeur

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 /ubuntu//a/107746/6969 . Si vous ne le faites pas, vous perdrez l'accélération 3D et risquez de rester bloqué sur une basse résolution.

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. Comme j'ai un système d'exploitation 64 bits, j'utilise le package Ubuntu 64 bits 11.10 (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 s'affiche et vous demande où installer CUDA, appuyez simplement sur Entrée pour accepter la valeur par défaut /usr/local/cuda:

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

Après l'installation, il affichera quelques messages qui suggèrent de mettre le répertoire de la bibliothèque cuda dans votre chemin de recherche de bibliothèque:

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

* 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_PATHplus tard lors de l'exécution d'un programme.

SDK

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

Utilisation de 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 d'accès à la bibliothèque, vous aurez besoin de:

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 supprimer les chemins 32 bits si votre programme est en 64 bits).

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

 optirun blender

Ou, si vous n'avez pas ajouté CUDA à votre chemin par défaut:

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

Installation d'une version Blender

(Avec les noyaux CUDA précompilés)

Lorsque vous exécutez optirun blender, vous pouvez recevoir un message de Blender disant que la compilation du noyau CUDA a échoué, et un message dans le terminal semblable au suivant:

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 fonction de rendu GPU de Blender, vous aurez peut-être besoin d'une version Blender avec des noyaux CUDA précompilés. Les versions de Blender.org ont toutes des noyaux CUDA précompilés; les versions ppa: cheleb / blender-svn ( plus d'informations à 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'

Les versions récentes de Bumblebee (installées à partir du bumblebee / PPA stable) n'ont pas besoin de la usermodcommande. Je garderai les instructions d'installation sur askubuntu.com/a/36936/6969 mises à jour, veuillez donc créer un lien vers cette publication au lieu de copier ces instructions d'installation.
Lekensteyn

@Lekensteyn D'accord, c'est fait!
Peter Cassetta

2

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 du serveur X mais ne retenez pas votre souffle.

Comme vous l'avez deviné, Bumblebee est actuellement une bonne façon de procéder.

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

Lorsque 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é.

Ensuite, j'ai ouvert un terminal et j'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 du fournisseur GL contient le mot Nvidia. Si vous exécutez à la place:

glxspheres

La chaîne du fournisseur doit contenir le mot Intel


Aurai-je besoin d'installer les pilotes nVidia avant d'installer Bumblebee? Je suppose que non, d'après la façon dont vous avez rédigé votre réponse. De plus, il est bon de voir que quelqu'un a pu utiliser CUDA sur Ubuntu avec une carte Optimus! Je voterai cela dès que j'aurai 15 représentants. :)
Peter Cassetta

D'accord, j'ai installé Bumblebee. J'ai utilisé optirunet je peux vérifier que Blender utilisait mon GPU nVidia pour rendre la fenêtre 3D. Cependant, il n'y a pas d'option "GPU" dans la liste déroulante des préférences utilisateur de Blender. Il répertorie uniquement les "CPU". Voir cette capture d'écran . Dois-je installer des pilotes supplémentaires pour utiliser CUDA?
Peter Cassetta

1

Je trouve que pour exécuter tous les exemples de CUDA, en utilisant Bumblebee, vous devez installer les pilotes 295.40 à partir d' ici et pendant 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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.