32 votes

Comment puis-je faire fonctionner nVidia CUDA ou OpenCL sur un ordinateur portable doté d'une carte discrète nVidia/graphiques intégrés Intel ?

Fond: Je suis un artiste 3D (en tant que passe-temps) et j'ai récemment commencé à utiliser Ubuntu 12.04 LTS en dual-boot avec Windows 7. Il fonctionne sur un ordinateur portable Toshiba 64 bits assez récent avec un processeur graphique nVidia GeForce GT 540M. Il dispose également de graphiques intégrés Intel (que je soupçonne qu'Ubuntu utilise).

Ainsi, lorsque je rends mes scènes 3D en images sur Windows, je peux choisir d'utiliser mon processeur central (CPU) ou ma carte graphique nVidia (plus rapide). Depuis l'application 3D, je peux définir si le GPU doit utiliser CUDA ou OpenCL. Sous Ubuntu, il n'y a pas d'option GPU.

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

Je me moque complètement de la technologie Optimus, car l'autonomie de la batterie n'est pas du tout un problème pour moi.

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

28voto

Lekensteyn Points 162346

J'ai juste fait quelques expériences et je peux confirmer les déclarations d'Eric Appleman que Bumblebee n'est pas nécessaire pour CUDA. (plus d'informations sur Bumblebee: Une NVIDIA GeForce avec la technologie Optimus est-elle prise en charge par Ubuntu?)

Cependant, lorsque vous avez besoin d'afficher des exemples graphiques en utilisant OpenGL, vous avez effectivement besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne verrez rien sur votre écran ou vous obtiendrez l'erreur:

ERREUR: Prise en charge des extensions OpenGL nécessaires manquante.

Lors de l'exécution d'un programme CUDA, vous devez installer le kit d'outils CUDA et un pilote nvidia. Si vous avez l'intention de compiler des programmes, vous avez également besoin du SDK. Les installateurs peuvent être trouvés sur http://developer.nvidia.com/cuda-downloads, veuillez lire les instructions ci-dessous avant de bousiller votre ordinateur portable Optimus.

Installation de CUDA

Pilote

Je recommande d'installer le pilote nvidia à partir du gestionnaire de paquets d'Ubuntu. Si vous installez Bumblebee, vous n'avez pas besoin de 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 vous risquez de rester bloqué sur une faible résolution.

Kit d'outils

En gros, vous devez télécharger l'installateur, le rendre exécutable et l'exécuter. - Téléchargez l'installateur. À l'heure actuelle, 4.2.9 est le pilote le plus récent. Comme j'ai un OS 64 bits, j'utilise le paquet Ubuntu 11.04 64 bits (bien que je fasse tourner la version 12.04) - Rendez-le exécutable et autorisez l'installation dans /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 apparaît et vous demande où installer CUDA, appuyez simplement sur Entrée pour accepter le chemin par défaut /usr/local/cuda:

......................................
Entrez le chemin d'installation (par défaut /usr/local/cuda, '/cuda' sera ajouté):

Après l'installation, il affichera quelques messages suggérant d'ajouter le répertoire de bibliothèques cuda à votre chemin de recherche de bibliothèques:

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

* Assurez-vous que votre PATH inclut /tmp/cuda/cuda/bin
* Assurez-vous que votre LD_LIBRARY_PATH
*   pour les distributions Linux 32 bits inclut /tmp/cuda/cuda/lib
*   pour les distributions Linux 64 bits inclut /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OU
*   pour les distributions Linux 32 bits, ajoutez /tmp/cuda/cuda/lib
*   pour les distributions Linux 64 bits, ajoutez /tmp/cuda/cuda/lib64 et /tmp/cuda/cuda/lib
* à /etc/ld.so.conf et exécutez ldconfig en tant que root

* Veuillez lire les notes de version dans /tmp/cuda/cuda/doc/

* Pour désinstaller CUDA, supprimez les fichiers CUDA dans /tmp/cuda/cuda
* Installation terminée

Vous pouvez ignorer cette étape si vous le souhaitez, mais ensuite vous devrez 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 souhaitez pouvoir compiler des applications CUDA, vous pouvez installer le SDK de manière similaire à ce qui a été décrit ci-dessus. Téléchargez, rendez-le exécutable et exécutez-le (sans être root, par exemple sans sudo !). En compilant certaines parties, j'ai dû apporter des modifications à NVIDIA_GPU_Computing_SDK/C/common/common.mk :

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

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
  • après environ la ligne 271, échangez ${RENDERCHECKGLLIB} avec ${OPENGLLIB} de sorte que cela ressemble à :

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
  • quelques lignes (5) plus loin, faites de même, mais supprimez également -lcuda.

  • quelques lignes (7) plus loin, faites la même chose que vous 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 suit :

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

Si vous n'avez pas ajouté CUDA à votre chemin de 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 uneCertainsProgrammeIntensifEnCalcul

(vous pouvez supprimer les chemins 32 bits s'il s'agit d'un programme 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

15voto

Peter Cassetta Points 329

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

Il est en effet possible de faire fonctionner les GPU nVidia Optimus avec CUDA sur Ubuntu.

Bumblebee n'est pas nécessaire pour CUDA. (plus d'infos sur Bumblebee : Une carte NVIDIA GeForce avec la technologie Optimus est-elle prise en charge par Ubuntu ?)

Cependant, lorsque vous avez besoin d'afficher des exemples graphiques utilisant OpenGL, vous avez bien besoin de quelque chose comme Bumblebee pour les systèmes Optimus, sinon vous ne verrez rien sur votre écran ou obtiendrez l'erreur :

ERREUR : Prise en charge des extensions OpenGL nécessaires manquante.

Si vous avez besoin d'utiliser un programme intensif en graphiques comme Blender, Bumblebee est actuellement une bonne option.

Allez directement à Installation de CUDA si vous ne voulez pas installer Bumblebee (c'est-à-dire si vous n'avez pas besoin d'OpenGL).
Sinon, continuez.

Installation de Bumblebee

Suivez les instructions sur Comment fonctionnent les ordinateurs portables avec Nvidia Optimus ?

Ces instructions sont actuellement maintenues à jour par un développeur de Bumblebee.

Une fois que vous avez installé Bumblebee et redémarré, vous pourrez choisir la carte graphique à utiliser lors du lancement des programmes en utilisant le programme optirun.
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 du vendeur GL dans le terminal contient le mot nvidia.
Si vous exécutez simplement glxspheres, vous verrez que la chaîne du vendeur contient la carte Intel à la place.

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

Installation de CUDA

Pilote

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 pourriez rester bloqué à une faible résolution.

Trousse à outils

En gros, vous devez télécharger l'installateur, le rendre exécutable et l'exécuter. - Téléchargez l'installateur. Au 9 janvier 2013, la version 5.0.35 est la plus récente. Étant donné que j'ai un OS 64 bits, j'utilise le paquet Ubuntu 64 bits 11.10 (bien que j'utilise la version 12.10) - Rendez-le exécutable et autorisez l'installation dans /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 apparaît et vous demande où installer CUDA, appuyez simplement sur Entrée pour accepter /usr/local/cuda par défaut :

......................................
Entrez le chemin d'installation (par défaut /usr/local/cuda, '/cuda' sera ajouté) :

Après l'installation, quelques messages s'afficheront indiquant de mettre le répertoire de la bibliothèque de cuda dans votre chemin de recherche de bibliothèque :

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

* Assurez-vous que votre CHEMIN inclut /tmp/cuda/cuda/bin
* Assurez-vous que votre LD_LIBRARY_PATH
*   pour les distributions Linux 32 bits inclut /tmp/cuda/cuda/lib
*   pour les distributions Linux 64 bits inclut /tmp/cuda/cuda/lib64:/tmp/cuda/cuda/lib
* OU
*   pour les distributions Linux 32 bits, ajoutez /tmp/cuda/cuda/lib
*   pour les distributions Linux 64 bits, ajoutez /tmp/cuda/cuda/lib64 et /tmp/cuda/cuda/lib
* à /etc/ld.so.conf et exécutez ldconfig en tant que root

* Veuillez lire les notes de version dans /tmp/cuda/cuda/doc/

* Pour désinstaller CUDA, supprimez les fichiers CUDA dans /tmp/cuda/cuda
* Installation terminée

Vous pouvez passer cette étape si vous le désirez, mais vous devrez alors définir LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH plus 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 (sans les droits de 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 suit :

LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/lib32/nvidia-current:$LD_LIBRARY_PATH unProgrammeTrèsIntensifEnCalcul

Si vous n'avez pas ajouté CUDA à votre chemin de 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 unProgrammeTrèsIntensifEnCalcul

(vous pouvez supprimer les chemins 32 bits s'ils sont 64 bits).

Si le programme CUDA doit afficher quelque chose 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 de Blender

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

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

Compilation du noyau CUDA ...
nvcc avertisssement : L'option '--opencc-options (-Xopencc)' est obsolète et ignorée, lors de l'utilisation de compute_20, sm_20, ou supérieur
gcc : erreur en essayant d'exécuter 'cc1plus' : execvp : Aucun fichier ou dossier de ce type
La compilation du noyau CUDA a échoué, voir la console pour plus de détails.

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

Pour installer une version officielle de Blender, suivez simplement les instructions décrites dans cette réponse.

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

 optirun '/usr/lib/blender/blender'

2voto

Alex Falappa Points 21

Les graphiques hybrides (généralement des graphiques intégrés Intel et des graphiques discrets Nvidia) sous Linux sont actuellement un peu problématiques. Quelque chose bouge lentement dans le domaine du serveur X mais ne retenez pas votre souffle.

Comme vous l'avez deviné, Bumblebee est actuellement une bonne solution.

J'ai récemment acheté un ordinateur portable Asus N55 avec des graphiques Intel/Nvidia et j'ai pu faire fonctionner le moteur de rendu Cycles de Blender avec 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 fait :

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

Ensuite, j'ai fait (comme recommandé par les instructions d'installation) :

sudo usermod -a -G bumblebee $USER

Ensuite, j'ai redémarré.

Pour choisir le pilote à utiliser lors du lancement des 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 exécutez plutôt :

glxspheres

La chaîne du fournisseur devrait contenir le mot Intel

1voto

olmer Points 11

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

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

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