Wie kann ich nVidia CUDA oder OpenCL auf einem Laptop mit diskreter nVidia-Karte / Intel Integrated Graphics zum Laufen bringen?

28

Hintergrund: Ich bin ein 3D-Künstler (als Hobby) und habe vor kurzem begonnen, Ubuntu 12.04 LTS als Dual-Boot unter Windows 7 zu verwenden. Es läuft auf meinem neuen 64-Bit-Toshiba-Laptop mit einer nVidia GeForce GT 540M-GPU ( Grafikkarte). Es hat jedoch auch Intel Integrated Graphics (von dem ich vermute, dass Ubuntu es verwendet).

Wenn ich meine 3D-Szenen unter Windows zu Bildern rendere, kann ich zwischen der Verwendung meiner CPU oder meiner nVidia-GPU (schneller) wählen. In der 3D-Anwendung kann ich die GPU so einstellen, dass sie entweder CUDA oder OpenCL verwendet. In Ubuntu gibt es keine GPU-Option.

Nachdem ich (zu viel?) Über die Probleme mit Linux und der nVidia Optimus-Technologie recherchiert habe, bin ich etwas aufgeklärter, aber viel verwirrter.

Die Optimus-Technologie interessiert mich überhaupt nicht, da die Akkulaufzeit für mich kein Problem darstellt.

Hier ist meine Frage: Was kann ich tun, um CUDA-nutzende Programme (wie Blender) auf meiner nVidia-GPU in Ubuntu verwenden zu können? Benötige ich nVidia-Treiber? (Ich habe gehört, dass sie unter Linux nicht gut mit Optimus-Setups funktionieren.) Gibt es mindestens eine Möglichkeit, OpenCL auf meiner GPU in Ubuntu zu verwenden?

Peter Cassetta
quelle

Antworten:

27

Ich habe gerade ein wenig experimentiert und kann Eric Applemans Aussagen bestätigen, dass Bumblebee für CUDA nicht notwendig ist. (Weitere Informationen zu Bumblebee : Wird eine NVIDIA GeForce mit Optimus-Technologie von Ubuntu unterstützt? )

Wenn Sie jedoch grafische Beispiele mit Hilfe von OpenGL zeigen müssen, Sie tun müssen so etwas wie Bumblebee für Optimus Systeme, sonst entweder Sie nichts auf dem Display sehen oder den Fehler:

ERROR: Support for necessary OpenGL extensions missing.

Wenn Sie ein CUDA-Programm ausführen, müssen Sie das CUDA-Toolkit und einen NVIDIA-Treiber installieren. Wenn Sie Programme kompilieren möchten, benötigen Sie auch das SDK. Die Installationsprogramme finden Sie unter http://developer.nvidia.com/cuda-downloads . Lesen Sie bitte die folgenden Anweisungen, bevor Sie Ihren Optimus-Laptop borken.

CUDA installieren

Treiber

Ich empfehle, den nvidia-Treiber vom Paketmanager von Ubuntu zu installieren. Wenn Sie Bumblebee installieren, müssen Sie sich keine Sorgen um den Treiber machen. Deaktivieren Sie andernfalls nach der Installation die nvidia-Bibliotheken wie unter https://askubuntu.com/a/107746/6969 beschrieben . Wenn Sie dies nicht tun, verlieren Sie die 3D-Beschleunigung und bleiben möglicherweise bei einer niedrigen Auflösung hängen.

Toolkit

Grundsätzlich müssen Sie das Installationsprogramm herunterladen, ausführbar machen und ausführen. - Laden Sie das Installationsprogramm herunter. Zum jetzigen Zeitpunkt ist 4.2.9 der neueste Treiber. Da ich ein 64-Bit-Betriebssystem habe, verwende ich das 64-Bit-Ubuntu-Paket 11.04 (obwohl ich 12.04 verwende). Machen Sie es ausführbar und erlauben Sie die Installation für /usr/local/cuda:

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

Wenn Sie in der Installationsmeldung gefragt werden, wo CUDA installiert werden soll, drücken Sie einfach die Eingabetaste, um die Standardeinstellung zu akzeptieren /usr/local/cuda:

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

Nach der Installation werden einige Meldungen ausgegeben, in denen vorgeschlagen wird, das cuda-Bibliotheksverzeichnis in Ihren Bibliothekssuchpfad aufzunehmen:

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

* 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

Sie können diesen Schritt überspringen, wenn Sie möchten, aber Sie müssen ihn LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHspäter festlegen, wenn Sie ein Programm ausführen.

SDK

Wenn Sie CUDA-Anwendungen kompilieren möchten, können Sie das SDK auf ähnliche Weise wie oben beschrieben installieren. Laden Sie es herunter, machen Sie es ausführbar und führen Sie es aus (nicht als root, zB ohne sudo!). Beim Kompilieren von Teilen musste ich allerdings einige Änderungen vornehmen NVIDIA_GPU_Computing_SDK/C/common/common.mk:

  • Nach ungefähr Zeile 189 OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu, fügen Sie hinzu:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • nach ca. Linie 271, Swap ${RENDERCHECKGLLIB}mit , ${OPENGLLIB}so dass es wie folgt aussieht:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • Ein paar (5) Zeilen weiter machen Sie dasselbe, aber entfernen Sie -lcudaauch.
  • Machen Sie ein paar (7) Zeilen weiter dasselbe wie in Zeile 271.

CUDA verwenden

CUDA benötigt keinen NVIDIA-gesteuerten X-Server. In diesem Fall können Sie Ihr Zufallstestprogramm wie folgt ausführen:

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

Wenn Sie CUDA nicht zu Ihrem Bibliothekspfad hinzugefügt haben, benötigen Sie:

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

(Sie können die 32-Bit-Pfade entfernen, wenn Ihr Programm 64-Bit ist).

Wenn das CUDA-Programm mit OpenGL etwas anzuzeigen hat, müssen Sie optirun verwenden:

 optirun blender

Oder, wenn Sie CUDA nicht zu Ihrem Standardpfad hinzugefügt haben:

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

Lekensteyn
quelle
Danke, ich werde das Kopfgeld an dich vergeben (aber ich akzeptiere meine Community-Wiki-Antwort).
Peter Cassetta
Außerdem drücken 100 Wiederholungen und eine positive Bewertung nicht genau aus, wie sehr ich Ihre Arbeit am Bumblebee-Projekt schätze. Sie und Ihre Kollegen haben es zu der großartigen Software gemacht, die es ist. Also vielen Dank. :)
Peter Cassetta
2
Gern geschehen, jetzt hoffe ich, dass uns die Zeit eine endgültige Lösung in Form von PRIME mit einem aktualisierten xorg + mesa (oder Wayland?) Stack
beschert
1
PRIME , Xorg ist der Display-Server, der für die Darstellung der Grafiken zuständig ist, Mesa ist für OpenGL, Wayland ist ein möglicher Nachfolger von Xorg.
Lekensteyn,
1
Man sollte beachten, dass CUDA einen minimalen NVIDIA-Treiber benötigt. Beispielsweise benötigt CUDA 6.5 mindestens NVIDIA 340.21.
Yamaneko,
15

Hier ist die vollständige Antwort (basierend auf den Antworten von Alex Falappa und Lekensteyn ):

Es ist in der Tat möglich, dass nVidia Optimus-GPUs CUDA unter Ubuntu ausführen.

Hummel ist für CUDA nicht erforderlich. (Weitere Informationen zu Bumblebee : Wird eine NVIDIA GeForce mit Optimus-Technologie von Ubuntu unterstützt? )

Wenn Sie jedoch grafische Beispiele mit Hilfe von OpenGL zeigen müssen, Sie tun müssen so etwas wie Bumblebee für Optimus Systeme, sonst entweder Sie nichts auf dem Display sehen oder den Fehler:

ERROR: Support for necessary OpenGL extensions missing. 

Wenn Sie ein grafikintensives Programm wie Blender verwenden müssen, ist Bumblebee derzeit ein guter Weg.

Fahren Sie mit Installieren von CUDA fort, wenn Sie Bumblebee nicht installieren möchten (dh wenn Sie OpenGL nicht benötigen).
Ansonsten lesen Sie weiter.

Bumblebee installieren

Befolgen Sie die Anweisungen unter Wie gut funktionieren Laptops mit Nvidia Optimus?

Diese werden derzeit von einem Bumblebee-Entwickler auf dem neuesten Stand gehalten.

Sobald Sie Bumblebee installiert und neu gestartet haben, können Sie die Grafikkarte auswählen, die beim Starten von Programmen mithilfe des optirunProgramms verwendet werden soll.
Beispielsweise:

optirun blender

Um schnell zu testen, ob alles richtig funktioniert, verwenden Sie:

optirun glxspheres

Sie sehen ein Programm mit bunten sich drehenden Kugeln, wenn alles richtig funktioniert.

Stellen Sie sicher, dass die GL-Lieferantenzeichenfolge im Terminal das Wort nvidia enthält .
Wenn Sie nur ausführen glxspheres, wird angezeigt, dass die Herstellerzeichenfolge stattdessen die Intel-Karte enthält.

Wenn Sie ein CUDA-Programm ausführen, müssen Sie das CUDA-Toolkit und einen NVIDIA-Treiber installieren. Wenn Sie Programme kompilieren möchten, benötigen Sie auch das SDK. Die Installationsprogramme finden Sie unter http://developer.nvidia.com/cuda-downloads . Lesen Sie bitte die folgenden Anweisungen, bevor Sie Ihren Optimus-Laptop borken.

CUDA installieren

Treiber

Ich empfehle, den nvidia-Treiber vom Paketmanager von Ubuntu zu installieren. Wenn Sie Bumblebee installieren, müssen Sie sich keine Sorgen um den Treiber machen. Deaktivieren Sie andernfalls nach der Installation die nvidia-Bibliotheken wie unter https://askubuntu.com/a/107746/6969 beschrieben . Wenn Sie dies nicht tun, verlieren Sie die 3D-Beschleunigung und bleiben möglicherweise bei einer niedrigen Auflösung hängen.

Toolkit

Grundsätzlich müssen Sie das Installationsprogramm herunterladen, ausführbar machen und ausführen. - Laden Sie das Installationsprogramm herunter. Ab dem 9. Januar 2013 ist 5.0.35 der neueste Treiber. Wie ich eine 64-Bit - Betriebssystem haben, verwende ich die 64-Bit - 11.10 Ubuntu - Paket (obwohl ich 12.10 renne) - Machen Sie es ausführbar und erlauben die 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

Wenn Sie in der Installationsmeldung gefragt werden, wo CUDA installiert werden soll, drücken Sie einfach die Eingabetaste, um die Standardeinstellung zu akzeptieren /usr/local/cuda:

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

Nach der Installation werden einige Meldungen ausgegeben, in denen vorgeschlagen wird, das cuda-Bibliotheksverzeichnis in Ihren Bibliothekssuchpfad aufzunehmen:

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

* 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

Sie können diesen Schritt überspringen, wenn Sie möchten, aber Sie müssen ihn LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATHspäter festlegen, wenn Sie ein Programm ausführen.

SDK

Wenn Sie CUDA-Anwendungen kompilieren möchten, können Sie das SDK auf ähnliche Weise wie oben beschrieben installieren. Laden Sie es herunter, machen Sie es ausführbar und führen Sie es aus (nicht als root, zB ohne sudo!).

CUDA verwenden

CUDA benötigt keinen NVIDIA-gesteuerten X-Server. In diesem Fall können Sie Ihr Zufallstestprogramm wie folgt ausführen:

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

Wenn Sie CUDA nicht zu Ihrem Bibliothekspfad hinzugefügt haben, benötigen Sie:

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

(Sie können die 32-Bit-Pfade entfernen, wenn Ihr Programm 64-Bit ist).

Wenn das CUDA-Programm mit OpenGL etwas anzuzeigen hat, müssen Sie optirun verwenden:

 optirun blender

Oder, wenn Sie CUDA nicht zu Ihrem Standardpfad hinzugefügt haben:

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

Blender Build installieren

(Mit vorkompilierten CUDA-Kerneln)

Während der Ausführung erhalten optirun blenderSie möglicherweise eine Meldung von Blender, dass die Kompilierung des CUDA-Kernels fehlgeschlagen ist, sowie eine Meldung im Terminal, die der folgenden ähnelt:

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.

Wenn Sie die GPU-Rendering-Funktion von Blender verwenden möchten, benötigen Sie möglicherweise einen Blender-Build mit vorkompilierten CUDA-Kerneln. Builds von Blender.org haben alle CUDA-Kernel vorkompiliert. das ppa: cheleb / blender-svn baut ( mehr informationen zu dieser frage ) nicht.

Befolgen Sie einfach die Anweisungen in dieser Antwort, um ein offizielles Blender-Build zu installieren .

Wenn Sie Blender auf installiert haben /usr/lib/blender, sollten Sie in der Lage sein, Blender vom Terminal aus auszuführen und GPU-Rendering zu verwenden mit:

 optirun '/usr/lib/blender/blender'
Peter Cassetta
quelle
Neuere Versionen von Bumblebee (von Bumblebee / Stable PPA installiert) benötigen den usermodBefehl nicht. Ich halte die Installationsanweisungen auf askubuntu.com/a/36936/6969 auf dem neuesten Stand. Verlinken Sie also bitte auf diesen Beitrag, anstatt diese Installationsanweisungen zu kopieren.
Lekensteyn,
@Lekensteyn Okay, fertig!
Peter Cassetta
2

Die Unterstützung von Hybridgrafiken (normalerweise integrierte Intel-Grafik und diskrete Nvidia-Grafik) unter Linux ist derzeit etwas problematisch. Im X-Server-Bereich bewegt sich langsam etwas, aber halten Sie nicht den Atem an.

Wie Sie bereits vermutet haben, ist Bumblebee derzeit ein guter Weg.

Ich habe kürzlich ein Asus N55-Notebook mit Intel / Nvidia-Grafik gekauft. Ich konnte den Blender Cycles-Renderer für die Verwendung von CUDA nutzen.

Bei der Installation von Ubuntu 12.04 wurden standardmäßig die integrierten Grafiken über den Intel-Grafiktreiber verwendet. Der Noveau-Grafiktreiber sollte nicht installiert werden.

Dann öffnete ich ein Terminal und tat:

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

Danach tat ich (wie in der Installationsanleitung empfohlen):

sudo usermod -a -G bumblebee $USER

Dann habe ich neu gestartet.

Um den Treiber auszuwählen, der beim Starten von Programmen verwendet werden soll, verwenden Sie das optirun-Programm, zum Beispiel:

optirun blender

Um zu testen, ob alles richtig funktioniert, verwenden Sie:

optirun glxspheres

Vergewissern Sie sich, dass die GL-Lieferantenzeichenfolge das Wort Nvidia enthält. Wenn Sie stattdessen ausführen:

glxspheres

Der Hersteller-String sollte das Intel-Wort enthalten

Alex Falappa
quelle
Muss ich nVidia-Treiber installieren, bevor ich Bumblebee installiere? Ich schätze nicht, basierend darauf, wie Sie Ihre Antwort formuliert haben. Es ist auch gut zu sehen, dass jemand CUDA unter Ubuntu mit einer Optimus-Karte verwenden konnte! Ich stimme ab, sobald ich 15 Wiederholungen habe. :)
Peter Cassetta
Okay, ich habe Bumblebee installiert. Ich habe verwendet optirunund kann überprüfen, ob Blender meine nVidia-GPU zum Rendern des 3D-Ansichtsfensters verwendet hat. Es gibt jedoch keine "GPU" -Option in der Dropdown-Liste in den Blender-Benutzereinstellungen. Es wird nur "CPU" aufgelistet. Siehe diesen Screenshot . Muss ich zusätzliche Treiber installieren, um CUDA nutzen zu können?
Peter Cassetta
1

Ich finde , dass alle Beispiele von CUDA laufen, mit Bumblebee, die Treiber 295,40 aus installieren müssen hier und während der Installation entscheiden , nicht außer Kraft setzen die config x11.

Dann müssen Sie denselben Treiber verwenden, um die Beispiele zu kompilieren und das Programm auszuführen.

olmer
quelle