• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] Leap 42.2 & Optimus/NVidia & CUDA - Erfahrungen?

sme

Member
Hallo allerseits,

hat hier jemand Erfahrung, wie man openSUSE Leap 42.2 auf einem System mit Optimus und NVidia-Karte aufsetzt, so dass am Ende CUDA (7.5 oder 8.0) tatsächlich funktioniert?

Die meisten Anleitungen zu Bumblebee, die ich gefunden habe, scheinen etwas veraltet zu sein. Selbst der folgende Artikel, speziell für openSUSE und angeblich mit Leap 42.2 getestet, provoziert bei mir haufenweise Abhängigkeitskonflikte und empfiehlt beispielsweise, total unpassende Kernel-Module zu installieren: https://de.opensuse.org/SDB:NVIDIA_Bumblebee

Ich arbeite mit einem Thinkpad W530 mit einer "NVidia Quadro K1000M"-Karte. Die Karte unterstützt Compute Capability 3. Ich habe einige Erfahrung mit CUDA auf openSUSE Leap mit anderen Computern ohne Optimus. Auch Abhängigkeitskonflikte zwischen CUDA-Paketen aus NVidias CUDA-Repository und Treiber-Paketen aus NVidias Treiber-Repository sind mir nicht neu - bis jetzt habe ich das durch gezieltes ignorieren einiger Abhängigkeiten in den Griff bekommen. Beim betreffenden Thinkpad schaffe ich es entweder, (1) das System nicht mehr bootbar zu bekommen (hängt sich irgendwo beim Hochfahren von Leap auf) beim Versuch, per Bios-Einstellung den NVidia-Chip exklusiv zu nutzen, (2) das Interface mit dem in der CPU integrierten Chip rendern zu lassen, während zwar das nvidia-Modul geladen ist und per "nvidia-smi" auch korrekt identifiziert wird, aber CUDA-Anwendungen es nicht schaffen, auf den NVidia-Chip zuzugreifen, (3) Bumblebee zu installieren, wobei ich das nvidia-bumblebee-Paket ignoriere, um Konflikten vorzubeugen, wobei ich so ganz und gar nicht auf die NVidia-GPU zugreifen kann oder (4) durch irgendeinen wirren mir nicht so ganz verständlichen Zufall den X-Server tatsächlich direkt auf dem NVidia-Treiber zu starten ("nvidia-smi" sagt mir dann, dass er 86 MByte Graphik-Speicher belegt), wobei ich aber nach wie vor keinen CUDA-Kernel starten kann und die Frame-Raten bei openGL-Anwendungen wie Google Earth schlicht in den Keller gehen und weit unter denen der Intel-Graphik liegen. Ich bin zugegeben etwas verwirrt.

Zur Information: Ich habe openSUSE installiert, während im Bios Optimus sowie "automatische Detektion des Betriebssystems" aktiviert waren. Meine nächste beste schlechte Idee ist, eine Neuinstallation vorzunehmen, nachdem ich im Bios exklusiv auf die dedizierte Graphik geschaltet und die Detektion deaktiviert habe, um Konfigurationsfehler durch den openSUSE-Installer auszuschließen ...

Mir ist es im Endeffekt egal, welcher Chip sich um die Graphik kümmert - die Laufzeit auf Batterie ist sekundär für mich. Ich würde den NVidia-Chip allerdings etwas vorziehen. Optimus ... muss nicht sein. Wichtig für mich ist, dass CUDA läuft. Hat jemand hier damit in der beschriebenen oder einer ähnlichen Konstellation Erfahrung und kann mir helfen, mein System zu debuggen?

Grüße,
Sebastian
 

Sauerland

Ultimate Guru
Selbst der folgende Artikel, speziell für openSUSE und angeblich mit Leap 42.2 getestet, provoziert bei mir haufenweise Abhängigkeitskonflikte und empfiehlt beispielsweise, total unpassende Kernel-Module zu installieren:
Und welche ??
 

josef-wien

Ultimate Guru
sme schrieb:
wobei ich das nvidia-bumblebee-Paket ignoriere
Bumblebee kannst Du nicht "halb" installieren, und natürlich müssen die Module zum verwendeten Kernel passen (Bumblebee gibt es sowohl für den Distributions-Kernel als auch für den jeweils aktuellen Kernel aus "kernel stable").

Wenn Dein UEFI die Möglichkeit bietet, die Intel-Grafik zu deaktivieren und alles direkt über die Nvidia-Grafik zu leiten, scheint mir das in Deinem Fall die sinnvollste Möglichkeit zu sein. Dann gibt kein Optimus und keinen Einsatz von Bumblebee, sondern Du kannst den normalen Nvidia-Treiber verwenden.

Im übrigen solltest Du eher eine Suchmaschine mit den Begriffen "cuda optimus linux" füttern, ein allgemeines Forum wird in diesem Spezialfall wohl nicht die notwendige Hilfe bieten können.
 
OP
sme

sme

Member
@Sauerland

Ich sollte sowas nicht des Nächtens schreiben - der Artikel empfiehlt dies nicht direkt. Yast tut das, wenn ich dem Artikel folge.

Bei mir sind das CUDA-Repository mit Priorität 99 und das NVidia-Treiber-Repository mit Priorität 80 eingetragen. Das Bumblebee-Repository hat Priorität 99, so wie der Rest des Systems. Einer anderen Anleitung für die Installation der proprietären NVidia-Treiber folgend habe ich in Yast, Menu "Extras", "Alle passenden empfohlenen Pakete installieren" Yast entscheiden lassen, welche der drei Versionen/Generationen an NVidia-Treibern (G02, G03, G04) die richtige für mich ist - Yast hat daraufhin G04 *aus dem NVidia-Treiber-Repository* installiert, also die Pakete nvidia-computeG04, nvidia-gfxG04-kmp-default, nvidia-glG04 und x11-video-nvidiaG04. Das Paket "nvidia-gfxG04-kmp-default" wurde dabei in der Version 375.39_k4.4.27_2-21.1 installiert, bezieht sich also grob auf den in Leap 42.2 verwendeten Kernel. Das Prozedere kenne ich - es hat auf anderen Maschinen bei mir schon oft genug funktioniert. Yast wählt immer die richtige Generation aus (außer vielleicht in diesem Fall?).

Um das, was ich gemacht habe, weiter zu reproduzieren, versuchst Du als nächstes CUDA zu installieren. Wähle dazu das CUDA-Meta-Paket von NVidia (oder alternativ die Meta-Pakete für CUDA 7.5 oder 8.0). Diese ziehen unter anderem ein weiteres Meta-Paket in ihren Abhängigkeiten mit sich: cuda-drivers. Dieses wiederum versucht, alle vorher erwähnten G04-Pakete krampfhaft durch entsprechende Pakete aus dem CUDA-Repository zu ersetzen. Der Witz ist, dass diese für Kernel 3.16.6 gedacht sind, also für openSUSE 13.2, wenn mich nicht alles täuscht. Diese Abhängigkeit habe ich auf anderen Maschinen gezielt ignoriert, in dem ich explizit cuda-drivers (und nur dieses eine Paket) durch die Verletzung von Abhängigkeiten installiert habe. Bis hier her ... bin ich auch auf dem Thinkpad gekommen. Nur das nach halt nicht alles lief, wie es soll, wie in meinem ersten Post beschrieben.

Um die Sache "lustig" zu machen, kommt jetzt Bumblebee ins Spiel. Beim Versuch, "nvidia-bumblebee" zu installieren, warnt mich Yast, dass folgende Pakete deinstalliert werden müssen: x11-video-nvidiaG04, nvidia-computeG04, cuda-runtime, cuda-demo, cuda, nvidia-gfxG04-kmp-default (für Kernel 4.4.27) und nvidia-glG04. Cuda-drivers und cuda sollen in einer älteren Version installiert werden (Downgrade von 8 zu 7.5 in meinem Fall). Sagen wir einfach mal ja. Dann markiert Yast, um die gerissene Lücke zu schließen, bespielsweise das Paket "nvidia-gfxG03-kmp-desktop" (G03!? Für einen Desktop-Kernel?!?) für Kernel 3.16.6 (!) zur Installation. Achtung: Yast würde tatsächlich ohne Fehler dieses Kernel Modul installieren - das System wäre danach mit einem blacklisted Nouveau-Treiber nur nicht mehr bootbar (leidige Erfahrung, weil ich einmal nicht alles bei einer Installation geprüft habe).

Ich hoffe, Deine Frage genau beantwortet zu habe. Falls nicht, frag bitte weiter :)

@josef-wien

Das "nvidia-bumblebee"-Paket wirkte letzte Nacht ein bisschen wie ein Meta-Paket auf mich - aber irgendwie sind da tatsächlich Kernel-Module drin (und zwar für G02 und G03, nicht aber für G04?!?). Hat Yast für meine Karte die falsche Treiber-Generation, also G04 statt G03, gewählt? Dann würde das das Problem eingrenzen ... Die Abhängigkeitskonflikte würden dann wahrscheinlich einzig und allein durch das CUDA-Repository bedingt.
 
OP
sme

sme

Member
Ok, etwas Recherche: Für die Quadro K1000M empfiehlt NVidia auf seiner Website diesen Treiber: "Linux x64 (AMD64/EM64T) Display Driver, Version: 375.39, Freigabedatum: 2017.2.14". Interessant: Version 375.39. Ein Blick ins SuSE-NVidia-Repository zeigt, dass G04 in Version 375.39 vorliegt (passt), G03 in Version 340.102 vorliegt(im CUDA-Repo liegt die 352.99) und die G02 in Version 304.135. Das legt den Schluss nah, das ich mit G04 richtig liege, oder?
 

Sauerland

Ultimate Guru
Das Nvidia Repo kannst du nur benutzen, wenn die Intel Karte im Bios/UEFI ausgeschaltet ist.

Deswegen auch die Konflikte mit bumblebee und nvidia...........
 
OP
sme

sme

Member
@Sauerland

Das scheint es tatsächlich zu sein. Für zukünftige Leser: ERST AUF DISKRETE GRAPHIK SCHALTEN, DANN NVIDIA-TREIBER INSTALLIEREN!

Ich habe sämtliche NVidia-, CUDA- und Bumblebee-Pakete entfernt, sichergestellt. dass Nouveau installiert ist, es von der Blacklist genommen, neu gestartet, im Bios/Uefi auf "dedizierte Graphik" geschaltet (und die Detektierung des Betriebssystems deaktiviert), neu gestartet (mit Nouveau - beeindruckend viele Artefakte und Bildfehler), wieder die NVidia-Treiber aus dem NVidia-Treiber-Repository installiert (G04!), neu gestartet und getestet. Jetzt laufen openGL-Anwendungen tatsächlich schnell ...

Für CUDA folgen jetzt die folgenden Schritte: Ich sperre die Pakete nvidia-computeG04, nvidia-gfxG04-kmp-default, nvidia-glG04 und x11-video-nvidiaG04, so dass sie nicht mehr verändert werden können, aktiviere wieder das CUDA-Repository, wähle zuerst cuda-drivers, installiere es unter Ignorierung seiner Abhängigkeiten, wähle jetzt das cuda-Meta-Paket, was seine restlichen Abhängigkeiten nach sich zieht und ... geschafft. "nvidia-smi" spuckt mir eine erstaunlich detaillierte Liste an Prozessen aus, die auf die Karte zugreifen. Meine CUDA-Kernel laufen.

Vielen Dank!
 

josef-wien

Ultimate Guru
Noch etwas für die Nachwelt.


sme schrieb:
Beim Versuch, "nvidia-bumblebee" zu installieren, warnt mich Yast, dass folgende Pakete deinstalliert werden müssen: x11-video-nvidiaG04, nvidia-computeG04, cuda-runtime, cuda-demo, cuda, nvidia-gfxG04-kmp-default (für Kernel 4.4.27) und nvidia-glG04.
Bei einer Optimus-Konfiguration (die Ausgabe der Nvidia-Karte wird an die Intel-Karte und von der Intel-Karte an den Bildschirm geleitet) muß das so sein, denn hier funktionieren die normalen Nvidia-Treiber nicht, sondern es müssen die von Bumblebee bereitgestellten Nvidia-Treiber verwendet werden.

Es gibt zumindest derzeit ziemlich wenige UEFI, die es bei einer Optimus-Konstellation ermöglichen, die Intel-Grafik zu deaktivieren, d. h. das UEFI kümmert sich darum, daß die Ausgabe der Nvidia-Karte nicht an die Intel-Karte, sondern direkt an den Bildschirm geleitet wird. Hier im Forum bist Du der Zweite, bei dem das möglich ist.

P. S.
sme schrieb:
"nvidia-gfxG03-kmp-desktop" (G03!? Für einen Desktop-Kernel?!?) für Kernel 3.16.6 (!)
Waren da ein paar Repos zu viel aktiviert?
 
OP
sme

sme

Member
es müssen die von Bumblebee bereitgestellten Nvidia-Treiber verwendet werden
Das macht irgendwie keinen Sinn. Die Treiber von Bumblebee sind winzig im Vergleich zu ihren NVidia-Pendants. Ich verstehe das irgendwie so, dass die Bumblebee-Treiber eine Zwischenschicht bilden und mit den weiterhin vorhanden NVidia-Treibern Daten austauschen, um eben das, was Du erwähnt hast, zu erreichen: Die Ausgabe über den Intel-Chip. Der Clou scheint zu sein, dass Bumblebee schon eine Weile nicht mehr aktiv entwickelt wird, was auch entsprechend aktuelle Dokumentation so rar macht. Schau mal in das "nvidia-bumblebee"-Paket rein. Dort findet Du diese relativ keinen Zwischenschichten für G02 und G03. G04 ist scheinbar zu neu und wird von Bumblebee (bloße Vermutung) entweder nicht mehr unterstützt oder ist beim Paketieren im OBS hinten runter gefallen. Kennt sich einer von euch damit näher aus?

Waren da ein paar Repos zu viel aktiviert?
Klick Dich hierdurch ...
https://developer.nvidia.com/cuda-downloads
... bis zu openSUSE, und Du siehst, dass NVidia im Kontext von CUDA vorgebaute RPMs nur für 13.2 anbietet, also Kernel 3.16.6. In diesem Respository liegen entsprechende veraltete NVidia-Treiber ...

die Ausgabe der Nvidia-Karte wird an die Intel-Karte und von der Intel-Karte an den Bildschirm geleitet
Ich meine gelesen zu haben, dass das bei Thinkpads *30 andersherum gelöst ist, was sie ein bisschen speziell macht (?). Beispielsweise kann ich den VGA-Port dieser Kiste grundsätzlich nur mit der NVidia-Karte ansteuern.
 

Sauerland

Ultimate Guru
sme schrieb:
es müssen die von Bumblebee bereitgestellten Nvidia-Treiber verwendet werden
Das macht irgendwie keinen Sinn. Die Treiber von Bumblebee sind winzig im Vergleich zu ihren NVidia-Pendants. Ich verstehe das irgendwie so, dass die Bumblebee-Treiber eine Zwischenschicht bilden und mit den weiterhin vorhanden NVidia-Treibern Daten austauschen, um eben das, was Du erwähnt hast, zu erreichen: Die Ausgabe über den Intel-Chip. Der Clou scheint zu sein, dass Bumblebee schon eine Weile nicht mehr aktiv entwickelt wird, was auch entsprechend aktuelle Dokumentation so rar macht. Schau mal in das "nvidia-bumblebee"-Paket rein. Dort findet Du diese relativ keinen Zwischenschichten für G02 und G03. G04 ist scheinbar zu neu und wird von Bumblebee (bloße Vermutung) entweder nicht mehr unterstützt oder ist beim Paketieren im OBS hinten runter gefallen. Kennt sich einer von euch damit näher aus?
Das es so nicht funktioniert, hast du doch gerade festgestellt.

Und übrigens gibt es im Bumblebee Repo auch ein Paket mit Namen nvidia-bumblebee.

Und cuda für bumblebee:
https://software.opensuse.org/package/cuda-8.0
Ich hab jetzt einmal Version 8 ausgewählt........
 

josef-wien

Ultimate Guru
sme schrieb:
Die Treiber von Bumblebee sind winzig im Vergleich zu ihren NVidia-Pendants. ... Schau mal in das "nvidia-bumblebee"-Paket rein.
Ich weiß nicht, was Du dort siehst, ich erblicke nichts von G02 oder G03, sondern drei Dateien (darunter der notwendige patch, der sogar zusätzlich die Adaptionen für den Kernel 4.10 enthält) und unter anderem ein Installationsskript, das den Nvidia-Treiber in der Version 375.39 herunterlädt, den patch anwendet und die notwendigen Module erstellt. Die Installationsskripte kannst Du Dir nach dem Herunterladen des Pakets übrigens mit
Code:
rpm -qp --scripts --triggers nvidia-bumblebee-375.39-1.1.x86_64.rpm
zu Gemüte führen (bei einem installierten Paket läßt Du den Parameter p weg, und gibst den Paketnamen an).



sme schrieb:
Klick Dich hierdurch
Darauf werde ich verzichten, aber Deine Erlebnisse lassen den Verdacht aufkommen, daß man dort auf Optimus nicht eingerichtet ist.



sme schrieb:
Ich meine gelesen zu haben, dass das bei Thinkpads *30 andersherum gelöst ist
Dann würde es sich aber nicht mehr um Optimus handeln.
 
Oben