GPUs in Servern ohne Monitor nutzen
- 1. Schritt: auf allen 20 Maschinen den X-Server ans Laufen bringen
- 2. Schritt: /etc/X11/XF86Config überarbeiten
- 3. Schritt: Konfiguration testen
- 4. Schritt: User „window“ anlegen
- 5. Schritt: User „window“ soll automatisch eingeloggt werden
Hier ist mal wieder ein alter Artikel, den ich jetzt erst zu Ende schreiben konnte…
Zur Problemstellung: es handelt sich um ein Cluster aus 20 Maschinen und 40 GPUs (2 Nvidia GTX 470 pro Maschine); die onBoard-Grafik ist mit der Konsole verbunden, an den GTXen hängt gar nichts, also kein Monitor. Die GPU-Power soll aber voll genutzt werden – was über SSH nicht möglich ist… Um sie zu nutzen sind wir den folgenden Umweg gegangen:
1. Schritt: auf allen 20 Maschinen den X-Server ans Laufen bringen
- die aktuellen Nvidia-Treiber herunterladen und installieren (zu jenem Zeitpunkt 260.19.44) → initiale Konfig wird erstellt (
/etc/X11/XF86Config
) - Abhängigkeiten installieren:
xserver-xorg x11-xserver-utils gdm
- Nun die BusID der Grafikkarten herausfinden:
$ lspci | grep VGA
01:00.0 VGA compatible controller: ASPEED Technology, Inc. ASPEED Graphics Family (rev 10)
08:00.0 VGA compatible controller: nVidia Corporation Device 06cd (rev a3)
82:00.0 VGA compatible controller: nVidia Corporation Device 06cd (rev a3)
2. Schritt: /etc/X11/XF86Config überarbeiten
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
Section "Files"
EndSection
Section "Module"
Load "dbe"
Load "extmod"
Load "type1"
Load "freetype"
Load "glx"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "keyboard"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "ConnectedMonitor" "CRT"
BusID "8:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
Option "ConnectedMonitor" "CRT"
BusID "82:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
DefaultDepth 24
SubSection "Display"
Depth 24
EndSubSection
EndSection
3. Schritt: Konfiguration testen
$ X -config /etc/X11/XF86Config
Hier Output und Logfiles gucken, eventuelle Fehler beheben; „no screen found“ darf jetzt nicht mehr kommen!
4. Schritt: User „window“ anlegen
$ useradd -m window
5. Schritt: User „window“ soll automatisch eingeloggt werden
## file: "/etc/gdm/custom.conf"
[daemon]
TimedLoginEnable=false
AutomaticLoginEnable=true
TimedLogin=window
AutomaticLogin=window
TimedLoginDelay=30
DefaultSession=gnome
Das lässt sich dann auch prüfen, nach Reboot:
$ w
13:17:26 up 32 min, 3 users, load average: 0.76, 0.73, 0.52
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
window tty7 :0 12:45 31:57 3.79s 0.05s gnome-session
Nächster Schritt: der window
-User macht xhost +
– somit erlaubt er allen Hosts, sich zu verbinden. Im Anschluss daran macht User meh
ein export DISPLAY=:0.0
und startet dann seine X-Programme → diese Programme werden im X-Kontext des User window
ausgeführt
Beispiel: glxgears
aufrufen, und zwar am besten einmal ohne die eben erklärte Konfiguration und einmal mit. Anhand der unterschiedlichen Zahlen ist sehr deutlich zu sehen, wann die GPU wirklich genutzt wird und wann nicht. .xprofile
anlegen (wird beim Automatischen EInloggen des Users in Gnome dann ausgewertet):
#!/bin/sh
#
# ~/.xprofile
#
# Executed by gdm at login
#
export DISPLAY=:0.0
xhost +
Die Grundidee ist nun, denke ich, einigermaßen klar; natürlich kann (und sollte) das Setup noch eingehend verfeinert und erweitert werden – die Möglichkeiten sind vielfältig.
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten