Frage Wie kann ich nVidia CUDA oder OpenCL auf einem Laptop mit nVidia diskrete Karte / Intel Integrated Graphics arbeiten?


Hintergrund: Ich bin ein 3D-Künstler (als Hobby) und habe kürzlich begonnen, Ubuntu 12.04 LTS als Dual-Boot mit Windows 7 zu benutzen. Es läuft auf meinem ziemlich neuen 64-Bit Toshiba Laptop mit einer nVidia GeForce GT 540M GPU ( Grafikkarte). Es hat aber auch Intel Integrated Graphics (die ich vermute, Ubuntu verwendet).

Wenn ich also meine 3D-Szenen in Bilder unter Windows rende, kann ich zwischen der Verwendung meiner CPU oder meiner nVidia-GPU (schneller) wählen. Aus der 3D-Anwendung kann ich die GPU entweder CUDA oder OpenCL festlegen. In Ubuntu gibt es keine GPU-Option.

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

Mir ist die Optimus-Technologie egal, 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? Brauche ich nVidia Treiber? (Ich habe gehört, dass sie mit Optimus-Setups unter Linux nicht gut funktionieren.) Gibt es zumindest eine Möglichkeit, OpenCL auf meiner GPU in Ubuntu zu verwenden?


25
2018-05-04 15:22


Ursprung




Antworten:


Ich habe gerade etwas experimentiert und kann Eric Applemans Aussagen bestätigen, dass Bumblebee für CUDA nicht notwendig ist. (mehr über Hummel: Wird eine NVIDIA GeForce mit Optimus Technologie von Ubuntu unterstützt?)

Wenn Sie jedoch grafische Beispiele mit OpenGL anzeigen möchten, müssen Sie machen brauche etwas wie Bumblebee für Optimus Systeme, sonst siehst du entweder nichts auf deinem Display oder erhalte 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-downloadsBitte lesen Sie die folgenden Anweisungen, bevor Sie Ihren Optimus-Laptop verwenden.

Installieren von CUDA

Treiber

Ich empfehle, den nvidia-Treiber aus Ubuntus Paketmanager zu installieren. Wenn Sie Bumblebee installieren, müssen Sie sich keine Gedanken über den Treiber machen. Ansonsten, nach der Installation, deaktivieren die nvidia-Bibliotheken wie beschrieben https://askubuntu.com/a/107746/6969. Wenn du das nicht tust, verlierst du 3D-Beschleunigung und bleibst möglicherweise mit einer niedrigen Auflösung stecken.

Werkzeugkasten

Grundsätzlich müssen Sie das Installationsprogramm herunterladen, ausführbar machen und ausführen.  - Laden Sie das Installationsprogramm herunter. Zu diesem Schreiben ist 4.2.9 der neueste Treiber. Da ich ein 64-Bit-Betriebssystem habe, verwende ich das 64-Bit 11.04 Ubuntu-Paket (obwohl ich 12.04 benutze)  - Machen Sie es ausführbar und erlauben Sie die 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

Wenn die Installationsmeldung erscheint und Sie fragt, wo CUDA installiert werden soll, drücken Sie einfach die Eingabetaste, um den Standard zu akzeptieren /usr/local/cuda:

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

Nach der Installation werden einige Nachrichten gedruckt, die vorschlagen, das cuda-Bibliotheksverzeichnis in den Bibliothekssuchpfad einzufügen:

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

* 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 dann müssen Sie einstellen LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH später beim Ausführen eines Programms.

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, z. B. ohne sudo!). Bei der Zusammenstellung von Teilen musste ich einige Änderungen vornehmen NVIDIA_GPU_Computing_SDK/C/common/common.mk obwohl:

  • nach ungefähr der Linie 189, OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu, hinzufügen:

    OPENGLLIB += -L/usr/lib/nvidia-current -L/usr/lib32/nvidia-current
    
  • Nach ungefähr Linie 271, tauschen ${RENDERCHECKGLLIB} mit ${OPENGLLIB} so dass es so aussieht:

    LIB += $(RENDERCHECKGLLIB) ${OPENGLLIB} $(PARAMGLLIB) ${LIB} -ldl -rdynamic
    
  • ein paar (5) Zeilen weiter, mach dasselbe, aber entferne es -lcuda auch.
  • ein paar (7) Zeilen weiter, machen Sie das gleiche wie in Zeile 271.

Verwenden von CUDA

CUDA benötigt keinen Nvidia-gesteuerten X-Server, um zu funktionieren. In diesem Fall können Sie Ihr zufälliges Testprogramm wie folgt ausführen:

LD_LIBRARY_PATH = / usr / lib / nvidia-aktuell: / 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-aktuell: / usr / lib32 / nvidia-current: / usr / lokal / cuda / lib64: / usr / lokal / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

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

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

 optirun blender

Oder wenn CUDA Ihrem Standardpfad nicht hinzugefügt wurde:

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


25
2018-05-08 14:49



Danke, ich werde dir das Kopfgeld geben (aber ich akzeptiere meine Community Wiki Antwort). - Peter Cassetta
Auch 100 Rep und eine Upvote drücken nicht genau aus, wie sehr ich Ihre Arbeit am Bumblebee Project schätze. Sie und Ihre Kollegen haben es zum großen Teil der Software gemacht, die es ist. Also vielen Dank. :) - Peter Cassetta
Gern geschehen, jetzt hoffe ich, dass uns diese Zeit eine endgültige Lösung in Form von PRIME mit einem aktualisierten xorg + mesa (oder Wayland?) Stack geben wird :) - Lekensteyn
PRIME, Xorg ist der Display-Server, der dafür zuständig ist, dir Grafiken zu zeigen, Mesa ist für OpenGL, Wayland ist ein möglicher Nachfolger von Xorg. - Lekensteyn
Man sollte beachten, dass CUDA einen minimalen NVIDIA-Treiber benötigt. Zum Beispiel benötigt CUDA 6.5 mindestens NVIDIA 340.21. - Yamaneko


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

Es ist in der Tat möglich, nVidia Optimus-GPUs zu veranlassen, CUDA auf Ubuntu auszuführen.

Bumblebee ist für CUDA nicht notwendig. (mehr über Hummel: Wird eine NVIDIA GeForce mit Optimus Technologie von Ubuntu unterstützt?)

Wenn Sie jedoch grafische Beispiele mit OpenGL anzeigen möchten, müssen Sie machen brauche etwas wie Bumblebee für Optimus Systeme, sonst siehst du entweder nichts auf deinem Display oder erhalte 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.

Überspringen zu Installieren von CUDA wenn Sie Bumblebee nicht installieren möchten (d. h. 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 aktuell 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 Sie beim Starten von Programmen verwenden möchten optirun Programm.
Beispielsweise:

optirun blender

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

optirun glxspheres

Sie werden ein Programm mit bunten Kugeln sehen, wenn alles korrekt funktioniert.

Stellen Sie sicher, dass die GL-Anbieterzeichenfolge im Terminal das Wort enthält Nvidia.
Wenn Sie nur laufen glxspheresSie sehen, 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-downloadsBitte lesen Sie die folgenden Anweisungen, bevor Sie Ihren Optimus-Laptop verwenden.

Installieren von CUDA

Treiber

Ich empfehle, den nvidia-Treiber aus Ubuntus Paketmanager zu installieren. Wenn Sie Bumblebee installieren, müssen Sie sich keine Gedanken über den Treiber machen. Ansonsten, nach der Installation, deaktivieren die nvidia-Bibliotheken wie beschrieben https://askubuntu.com/a/107746/6969. Wenn Sie dies nicht tun, werden Sie 3D-Beschleunigung verlieren und möglicherweise mit einer niedrigen Auflösung stecken bleiben.

Werkzeugkasten

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 aktuellste Treiber. Da ich ein 64-Bit-Betriebssystem habe, verwende ich das 64-Bit 11.10 Ubuntu-Paket (obwohl ich 12.10 laufen lasse)  - Machen Sie es ausführbar und erlauben Sie 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 die Installationsmeldung erscheint und Sie fragt, wo CUDA installiert werden soll, drücken Sie einfach die Eingabetaste, um den Standard zu akzeptieren /usr/local/cuda:

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

Nach der Installation werden einige Nachrichten gedruckt, die vorschlagen, das cuda-Bibliotheksverzeichnis in den Bibliothekssuchpfad einzufügen:

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

* 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 dann müssen Sie einstellen LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH später beim Ausführen eines Programms.

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, z. B. ohne sudo!).

Verwenden von CUDA

CUDA benötigt keinen Nvidia-gesteuerten X-Server, um zu funktionieren. In diesem Fall können Sie Ihr zufälliges Testprogramm wie folgt ausführen:

LD_LIBRARY_PATH = / usr / lib / nvidia-aktuell: / 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-aktuell: / usr / lib32 / nvidia-current: / usr / lokal / cuda / lib64: / usr / lokal / cuda / lib: $ LD_LIBRARY_PATH someComputallyIntensiveProgram

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

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

 optirun blender

Oder wenn CUDA Ihrem Standardpfad nicht hinzugefügt wurde:

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

Installieren eines Blender Build

(Mit vorkompilierten CUDA-Kernel)

Wenn du rennst optirun blenderMöglicherweise erhalten Sie eine Meldung von Blender, dass die CUDA Kernel-Kompilierung fehlgeschlagen ist, und eine Nachricht 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 Blenders GPU-Rendering-Funktion verwenden möchten, benötigen Sie möglicherweise einen Blender-Build mit vorkompilierten CUDA-Kernel. Erstellt von Blender.org Alle haben vorkompilierte CUDA-Kernel; der ppa: cheleb / blender-svn baut (Mehr Informationen zu dieser Frage) unterlassen Sie.

Um einen offiziellen Blender Build zu installieren, folgen Sie einfach den Anweisungen in diese Antwort.

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

 optirun '/usr/lib/blender/blender'

13
2018-05-08 07:45



Aktuelle Versionen von Bumblebee (installiert von der Bumblebee / Stable PPA) brauchen das nicht usermodBefehl. Ich werde die Installationsanweisungen beibehalten askubuntu.com/a/36936/6969 aktualisiert, also verlinken Sie bitte zu diesem Post, anstatt diese Installationsanweisungen zu kopieren. - Lekensteyn
@Lekensteyn Okay, fertig! - Peter Cassetta


Hybrid-Grafik (normalerweise Intel integrierte Grafik und Nvidia diskrete Grafik) Unterstützung unter Linux ist derzeit ein bisschen mühsam. Irgendetwas bewegt sich langsam im X-Server-Feld, aber halte nicht den Atem an.

Wie Sie sich vorstellen können, ist Bumblebee derzeit ein guter Weg.

Ich kaufte vor kurzem ein Asus N55 Laptop mit Intel / Nvidia Grafiken Ich konnte den Blender Cycles Renderer CUDA verwenden.

Als ich Ubuntu 12.04 installierte, benutzte ich die integrierte Grafik standardmäßig über den Intel Grafiktreiber. Der Noveau-Grafiktreiber sollte nicht installiert werden.

Dann habe ich ein Terminal geöffnet und habe:

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

Danach habe ich (wie von der Installationsanleitung empfohlen):

sudo usermod -a -G bumblebee $USER

Dann habe ich neu gestartet.

Um den Treiber zum Starten von Programmen auszuwählen, verwenden Sie das optirun-Programm, zum Beispiel:

optirun blender

Um zu testen, ob alles korrekt funktioniert:

optirun glxspheres

Und vergewissern Sie sich, dass der GL-Anbieter-String das Wort Nvidia enthält. Wenn Sie stattdessen ausführen:

glxspheres

Die Vendor-Zeichenfolge sollte das Intel-Wort enthalten


2
2017-08-28 14:28



Muss ich nVidia-Treiber installieren, bevor ich Bumblebee installiere? Ich vermute nicht, basierend darauf, wie du deine Antwort formuliert hast. Außerdem ist es gut zu sehen, dass jemand CUDA auf Ubuntu mit einer Optimus-Karte verwenden konnte! Ich stimme das ab, sobald ich 15 Wiederholungen bekomme. :) - Peter Cassetta
Okay, ich habe Bumblebee installiert. ich benutzte optirun und ich kann überprüfen, dass Blender meine nVidia-GPU verwendet hat, um das 3D-Ansichtsfenster zu rendern. Es gibt jedoch keine "GPU" -Option im Dropdown-Menü in den Benutzereinstellungen des Blenders. Es listet nur "CPU" auf. Sehen dieser Screenshot. Muss ich zusätzliche Treiber installieren, um CUDA verwenden zu können? - Peter Cassetta


Ich finde, dass, um alle Beispiele von CUDA mit Bumblebee auszuführen, Sie die Treiber 295.40 von installieren müssen Hier und während der Installation Wählen Sie, dass Sie nicht überschreiben möchten das config x11.

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


1