GPUs WordPress

wall < "GPUs in Servern ohne Monitor nutzen"

Broadcast message from spillerm@unixe.de (pts/1) (Do Mai 31 13:28:56 2012):
4
Diesen Beitrag schrieb ich vor 7 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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

## /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« macht 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, einigermassen klar; natürlich kann (und sollte) das Setup noch eingehend verfeinert und erweitert werden — die Möglichkeiten sind vielfältig.

4