Verwendung von CUDA mit NVIDIA Prime

10

Ich habe ein halbes Dutzend Beiträge dazu im ganzen Web gefunden, aber keiner von ihnen beantwortet die Frage wirklich.

Ich möchte meine NVIDIA-GPU so einrichten, dass nur Berechnungen durchgeführt werden und nicht die Anzeige gesteuert wird. Wenn ich jedoch zur Verwendung der Intel-GPU in der nvidia-prime-Konfiguration wechsle, kann ich das nvidia-Modul nicht mehr laden.

modprobe: ERROR: could not insert 'nvidia_352': No such device

Ohne das Modul funktioniert CUDA offensichtlich nicht.

Was genau macht nvidia-prime, das das Laden des Moduls unmöglich macht? Es ist nicht auf der schwarzen Liste. Es gibt keine xorg.conf-Datei. Woher weiß das System, dass die Intel-GPU anstelle der diskreten verwendet wird?

Ich bin auf einem Dell 5510 Precision mit werkseitig installiertem Ubuntu 14.04 und meine GPU ist Quadro M1000M.

Einige schlagen die Verwendung von Hummeln vor, aber das sollte für reine Rechenlasten nicht erforderlich sein.

Außerdem kann Hummel anscheinend das Modul laden. Was genau macht es also?

Update: Warum scheint es immer so, als ob ich die Antwort finde, wenn ich endlich eine Frage poste, nachdem ich stundenlang versucht habe, sie herauszufinden. Dies ist eigentlich nur eine teilweise Antwort, aber ich bin auf etwas.

Bisher habe ich festgestellt, dass prime mindestens zwei Dinge tut:

  • Schalten Sie die GPU mit bbswitch aus.
  • Ändert die Alternativen für /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf.

Durch die Verwendung von bbswitch zum Wiedereinschalten der GPU kann ich jetzt das NVIDIA-Modul laden.

Die Frage bleibt jedoch weiterhin: Wie kann das System am besten so konfiguriert werden, dass die NVIDIA-Karte nur für Berechnungen verwendet wird?

Sollte ich nvidia-prime für die Verwendung der Intel-GPU einstellen und versuchen, manuell zu entschlüsseln, was dazu beigetragen hat, dass CUDA funktioniert?

Wie stelle ich sicher, dass das System weiterhin die Intel-GPU für das Display verwendet?

Wie würde ich NVIDIA prime einfach deaktivieren und alles manuell konfigurieren?

Oder sollte ich einfach nachgeben und Bumblebee und Optirun verwenden? Was sind die Nachteile davon, wenn überhaupt?

Irgendwelche Empfehlungen?

orodbhen
quelle
Können Sie die Anzeige auf der GPU in der NVIDIA X Server-Einstellungen-App deaktivieren?
Roger Dahl
Mit dem NVIDIA-Dienstprogramm können Sie nur zwischen Intel- und NVIDIA-GPU wählen. Es werden keine feinkörnigen Einstellungen bereitgestellt, z. B. welche Karte für die Anzeige verwendet werden soll.
Orodbhen

Antworten:

5

In meinem Fall stellte ich fest, dass die NVidia-Karte nicht ausgeschaltet war, und das einzige, was ich tatsächlich tun musste, um CUDA-Code auszuführen, war:

export LD_LIBRARY_PATH=/usr/lib/nvidia-352

in der Shell, in der ich es ausführen möchte (ich gehe davon aus, dass eine globale Änderung der Alternativeneinstellung compiz usw. usw. beschädigen würde)

Um an diesen Punkt zu gelangen (auf einem Dell Optiplex 7010 mit Ubuntu 14.04, CUDA 7.5 und einer GTX 980), glaube ich, waren die Schritte:

  1. Verwenden Sie die Registerkarte PRIME-Profile, um Intel auszuwählen
  2. Starten Sie neu und wählen Sie Intel als Standard im BIOS aus
  3. Den Computer herunterfahren
  4. Stecke die Monitore in das Onboard-Video :)

Bisher scheint alles gut zu funktionieren (nvidia-smi sieht die Karte, Cuda-Samples laufen, theano benutzt die Karte usw.)

David Huggins Daines
quelle
1
Ja, leider scheint es keine konsistente Lösung zu geben, weshalb ich wirklich verstehen wollte, was unter der Haube vor sich ging.
Orodbhen
2

Ich glaube, ich habe zumindest eine flüchtige Lösung dafür gefunden, wie im Update meines ursprünglichen Beitrags beschrieben. Ich habe wirklich zwei Lösungen gefunden, obwohl ich mir sicher bin, dass es noch andere gibt.

1 - Aktivieren Sie bei Prime im Intel-Modus die NVIDIA-Karte über bbswitch erneut und führen Sie sie aus modprobe nvidia, um das Modul zu laden und die Geräteknoten zu erstellen.

2 - Verwenden Sie Bumblebee optirun, um eine Bash-Sitzung zu starten, in der Sie alle Ihre CUDA-Aufgaben erledigen können.

Mit beiden Lösungen können Sie die integrierten Grafiken für Ihr Display verwenden, während Sie die NVIDIA-Karte zum Berechnen von Lasten verwenden. Die Optirun-Lösung scheint vielseitiger zu sein, aber ich bevorzuge die erste wegen ihres Minimalismus.

Ich hoffe, dass jemand mit mehr Verständnis diese Antwort verbessern wird.

orodbhen
quelle
Können Sie die erste Option klarer erläutern? Wie Sie die Karte mit bbswitch ein- und ausschalten?
Abonec
Ich habe tatsächlich herausgefunden, wie ich Hummeln zum Laufen bringen kann, und ich werde meine Antwort aktualisieren, wenn ich Zeit habe. Ich folgte im Grunde diese . Es ist frustrierend, dass dieses Zeug so schlecht dokumentiert ist, weil es wirklich ganz einfach ist.
Orodbhen
2

Ich verwende die NVIDIA-Karte nur für CUDA-Ausführungen und finde diesen Ansatz heraus:

Die ganze Zeit benutze ich Intel Card und es wird durch Befehl bestätigt lspci | grep -E "VGA|3D":

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)

In der entsprechenden Zeile für die NVIDIA-Karte sollte angezeigt werden, (rev ff)dass sie ausgeschaltet ist.

Um die Karte einzuschalten und für CUDA-Berechnungen zu verwenden, verwende ich zwei folgende Befehle:

sudo prime-select nvidia
sudo prime-switch

Nach diesem Befehlsbericht lspci | grep -E "VGA|3D":

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

Beachten Sie (rev a2), nicht (rev ff)in der entsprechenden Zeile. Jetzt Karte bereit zur Berechnung.

Nach Berechnungen verwende ich Rückwärtsaktionen:

sudo prime-select intel
sudo prime-switch

Und lspci | grep -E "VGA|3D"berichtet:

00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
01:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev ff)
Abonec
quelle
Grundsätzlich müssen Sie sich also erst nach dem Umschalten mit prime wieder anmelden, wenn Sie umschalten möchten, auf welcher GPU das Display ausgeführt wird? Ich hatte nicht daran gedacht, aber es macht Sinn. Natürlich müssen Sie sicherstellen, dass Sie zurückschalten, bevor Sie sich abmelden oder neu starten.
Orodbhen
Ich benutze diesen Ansatz. Ich melde mich mit aktivem Intel-Profil an, damit Xorg und Firefox die GPU nicht verwenden. Dann wechsle ich zum NVIDIA-Profil und meine gesamte CUDA-Arbeit geht dann auf die GPU und muss nicht mit Firefox und Xorg um Speicher konkurrieren :)!
John
0

Falls nach dem Befolgen der Schritte in der akzeptierten Antwort immer noch Probleme auftreten, versuchen Sie Folgendes:

echo "install bbswitch /bin/true" > /etc/modprobe.d/blacklist-bbswitch.conf
update-initramfs -u

Dadurch wird bbswitch vollständig deaktiviert. Der Nachteil ist, dass Sie die NVIDIA-Karte nicht zum Energiesparen ausschalten können (Xorg verwendet weiterhin integrierte Grafiken, solange prime-select intel).

Huazuo Gao
quelle
0

Ich verwende einen 1070 ti mit einem Thinkpad T420 in einer Egpu, die für meine Kryptowährung eingerichtet ist, während ich arbeite. Die GPU macht sich theoretisch nach ein paar Monaten auf diese Weise bezahlt.

Ich fand heraus, dass mit nvidia 387 export LD_LIBRARY_PATH = / usr / lib / nvidia-387 mit ethminer unter Verwendung von cuda funktioniert.

Die einzige Möglichkeit, das System nach einer "Prime-Select-Information" zum Laufen zu bringen, bestand darin, dass ich bei der Auswahl einen zweiten Monitor an die Karte angeschlossen und abgemeldet hatte. Andernfalls würde der Fehler "Das System läuft im Low-Graphics-Modus" oder ein durchgehend leerer Bildschirm angezeigt. Wenn ich mich mit Intel-Grafiken anmelde, zeigt der an die GPU angeschlossene Monitor natürlich nichts an. Daher muss ich ihn von der GPU trennen und wieder an das System anschließen (DVI-Dock-Ausgang), um mein Duell-Monitor-Setup auszuführen .

Ich glaube, das liegt daran, dass gpu-manager erkennt, dass bbswitch nicht funktioniert, und dann die xorg-Konfiguration löscht.

Ich poste dies, um eine Problemumgehung für die wenigen zu zeigen, die sich möglicherweise in einer ähnlichen Situation befinden, aber auch um zu sehen, ob jemand eine Idee hat, dies zu verhindern, da es ein bisschen schwierig ist, das Kabel bei jedem Neustart zu verschieben Unbequemlichkeit.

log_file: /var/log/gpu-manager.log

last_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot new_boot_file: / var / lib / ubuntu-drivers-common / last_gfx_boot kann nicht auf / run / udc-fglrx-was-load-Datei zugreifen. Suche nach fglrx-Modulen in / lib /modules/4.4.0-104-generic/updates/dkms Suchen Sie nach nvidia-Modulen in /lib/modules/4.4.0-104-generic/updates/dkms. Gefundenes nvidia-Modul: nvidia_387_drm.ko Ist nvidia geladen? ja Wurde nvidia entladen? nein Ist nvidia auf der schwarzen Liste? ja Ist fglrx geladen? nein Wurde fglrx entladen? nein Ist fglrx auf der schwarzen Liste? nein Ist Intel geladen? ja Ist Radeon geladen? Nein Ist Radeon auf der schwarzen Liste? nein Ist amdgpu geladen? nein Ist amdgpu auf der schwarzen Liste? nein Ist der Jugendstil geladen? nein Ist der Jugendstil auf der schwarzen Liste? ja Ist das fglrx-Kernelmodul verfügbar? nein Ist das NVIDIA-Kernelmodul verfügbar? ja Hersteller- / Geräte-ID: 8086: 126 BusID "PCI: 0 @ 0: 2: 0" Ist boot vga? ja Hersteller- / Geräte-ID: 10de: 1b82 BusID "PCI: conf Aktuelle Kernalternative: (null) Aktuelle egl-Alternative: /usr/lib/nvidia-387-prime/ld.so.conf Ist nvidia aktiviert? nein Ist nvidia egl aktiviert? nein Ist fglrx aktiviert? nein Ist Mesa aktiviert? nein Ist mesa egl aktiviert? nein Ist pxpress aktiviert? nein Ist Prime aktiviert? ja Ist prime egl aktiviert? ja Ist nvidia verfügbar? ja Ist nvidia egl verfügbar? nein Ist fglrx verfügbar? nein Ist fglrx-core verfügbar? nein Ist Mesa verfügbar? ja Ist mesa egl verfügbar? ja Ist pxpress verfügbar? nein Ist prime verfügbar? ja Ist prime egl verfügbar? Kein Intel IGP erkannt Intel Hybridsystem Nvidia Treiber Version 387.34 erkannt / sys / class / dmi / id / product_version = "ThinkPad T420" / sys / class / dmi / id / product_name = "4236L23" 1. Versuch: bbswitch ohne Macken Laden von bbswitch mit Parameter "load_state = -1 unload_state = 1" Fehler: can ' t open / proc / acpi / bbswitch Entfernen von xorg.conf. Pfad: /etc/X11/xorg.conf kann nicht auf /usr/share/gpu-manager.d/hybrid-power-saving zugreifen. Der aktuelle bbswitch-Status muss nicht geändert werden

Wenn ich danach nano xorg.conf nano ist es leer. Ich poste dies, nachdem ich den Monitorwechsel-Trick ausgeführt habe, wobei das Mining im Hintergrund stattfindet und meine xorg.conf noch leer ist. Ich vermute also, dass es aus irgendeinem Grund keine Rolle spielt, dass meine xorg.conf gelöscht wird, wenn ich den Monitor beim Neustart von lightdm an die GPU angeschlossen halte. Irgendwelche Ideen?

Morgen
quelle
Außerdem ... habe ich bbswitch wie oben vorgeschlagen auf die schwarze Liste gesetzt, da beim Booten ein ständiger Fehler auftreten würde. Ich konnte ein- oder zweimal mit nvidia-384 in den Intel-Modus booten, hatte aber Probleme damit, das Mining durchzuführen, und dachte, dies könnte daran liegen, dass mit nvidia-387 1070 ti-Unterstützung hinzugefügt wurde.
Morgen