Visualisierung

Translations: en

Zur Visualisierung arbeiten wir mit Paraview. Dieses können Sie sich lokal installieren und die Daten auf Ihrem Computer verarbeiten. Dazu müssen jedoch die Ergebnisdaten vom Cluster kopiert werden. Auf Produktivsystemen erfolgt die Visualisierung in der Regel direkt auf dem System. Leider ist dies auf dem Trainingscluster momentan nur sehr eingeschränkt möglich. Für die Visualisierung am HLRS benötigen wir das TurboVNC. Details finden sich für das Produktivsystem auch im Wiki des HLRS. Siehe die Beschreibung zur Visualisierung mit VNC weiter unten.

Ein alternatives Vorgehen um das kopieren der Daten auf das lokale System zu vermeiden, ist durch das Verbinden einer lokalen Installation von Paraview mit einem paraview server auf dem Cluster ohne VNC gegeben.

Insgesamt ergeben sich also drei Optionen für die Visualisierung:

Lokale Visualisierung

Für die lokale Visualisierung müssen die Dateien über die SSH Verbindung auf den lokalen Rechner kopiert werden. Dann die Visualisierungsdateien in Paraview öffnen.

Eine weitere Möglichkeit besteht in der Nutzung von sshfs, mit dem sich entfernte Verzeichnisse über SSH in das lokale System einbinden lassen.

Visualisierung mit VNC: Einmalige Vorbereitung

Zur Vorbereitung für die Verwendung von VNC müssen wir zunächst ein Passwort für die VNC Sitzungen festlegen und dazu ein .vnc Verzeichnis im eigenen Home anlegen:

$ mkdir $HOME/.vnc
$ vncpasswd

vncpasswd fragt dann nach einem Passwort, dass Sie für Ihre VNC Sitzungen verwenden möchten, und einer Bestätigung desselben. Sie können auch ein Passwort für Read-Only Zugriff vergeben, so dass andere ihrer Sitzung zuschauend beitreten könnten. Das benötigen wir hier nicht.

Eine Visualisierungssitzung starten

Für die VNC Sitzungen verwenden wir den gemeinsam genutzten vis Knoten.

Um dort eine VNC Sitzung zu starten, submittieren wir entsprechend einen Job:

qsub -l select=1:node_type=vis:ncpus=1:mem=16gb,walltime=02:00:00 -I -q vis

Nachdem dieser mit einer interaktiven Shell losgelaufen ist, laden wir die benötigten Module und starten den VNC server:

module load vis/VirtualGL
turbovncserver

Von diesem merken wir uns den Knoten und das Display (z.Bsp.: n002701:1). Dadurch sollte auch ein Startup-Skript .vnc/xstartup.turbovnc erstellt werden, dass etwa folgenden Inhalt haben sollte:

#!/bin/sh
#
#HLRS_291018rs xstartup.turbovnc
#

gnome-terminal &

icewmbg -i /opt/hlrs/non-spack/vis/VirtualGL/bg_images/HLRS_icewm_bg.png &
icewm

Falls es anders ist und die Session nicht funktioniert, bitte die startup Datei entsprechend ersetzen.

Auf dem eigenen Rechner brauchen wir nun einen VNC client, beispielsweise den TurboVNC oder TigerVNC. Dann verbinden wir uns mit der VNC session über den vncviewer:

vncviewer -via username@training.hlrs.de n002701:1

Falls der vncviewer kein -via unterstützt, müssen wir einen separaten SSH Tunnel für die Verbindung in einer weiteren Shell starten als Port verwenden wir dabei 5900 + display number (für obiges Beispiel):

ssh -N -L 5901:n002701:5901 <user>@training.hlrs.de

Mit diesem Tunnel, sollte es dann möglich sein den vncviewer zu starten mit:

vncviewer localhost:1

In dieser session dann ein Terminal öffnen und:

module load vis/paraview
vglrun paraview

Alternative mit lokalem Paraview und Paraview-Server

Anstatt die Visualisierung in einer VNC Session auf dem Cluster durchzuführen, können wir auch einen lokalen Paraview Client verwenden und diesen mit einem pvserver auf dem Visualisierungsknoten verbinden.

Dazu brauchen wir eine Paraview Installation in Version 5.9.1 auf dem lokalen Computer. Die Version ist dabei wichtig, da der Server sonst die Verbindung verweigert. Dieses Vorgehen ist tendenziell langsamer als die Verwendung der VNC Session, braucht aber weniger Schritte.

Zunächst starten wir einen Job, der einen pvserver zur Verfügung stellt:

qsub -I -l select=1:node_type=vis:ncpus=1:mem=16gb,walltime=02:00:00 -q smp

Oder auf einem der SKL Knoten:

qsub -I -l select=1:node_type=skl:ncpus=1:mem=16gb,walltime=02:00:00 -q smp

In der interaktiven Shell führen wir dann den pvserver aus:

module load vis/paraview
pvserver

Der pvserver gibt uns dann die Info, wie wir uns mit ihm verbinden können, etwa so:

Connection URL: cs://n002701:11111
Accepting connection(s): n002701:11111

Um ein lokales Paraview mit dem pvserver zu verbinden, muss zunächst ein SSH Tunnel angelegt werden dies funktioniert nach folgendem Schema:

ssh -N -L 11111:n002701:11111 <user>@training.hlrs.de

Diese Shell muss nun im Hintergrund offen bestehen bleiben, während das Paraview ausgeführt wird.

Dann können wir das Paraview auf dem eigenen Computer starten und mit dem pvserver über den Tunnel verbinden. Auf der Kommandozeile funktioniert das mit:

paraview -url=cs://localhost:11111

pvserver auf dem Frontend

Statt den pvserver auf einem Rechenknoten laufen zu lassen, ist es auch möglich ihn auf dem Frontends selbst auszuführen. Allerdings können damit keine Rechenressourcen des Clusters genutzt werden und das Rendering muss auf dem lokalen PC berechnet werden.

In diesem Fall können wir den pvserver direkt mit dem SSH tunnel Befehl starten, wozu wir aber einen einzigartigen, noch nicht genutzten Port verwenden müssen. Bitte nutzt dafür die Nummer aus dem Benutzernamen. Der Befehl auf dem lokalen System ist dann entsprechend:

ssh -L XXXXX:localhost:XXXXX <user>@training.hlrs.de /opt/hlrs/non-spack/vis/paraview/ParaView-5.9.1-MPI-Linux-Python3.8-64bit/bin/pvserver --server-port=XXXXX --disable-xdisplay-test

Nun können wir uns wie oben mit dem Paraview server verbinden:

paraview -url=cs://localhost:XXXXX

(Die server verbindung kann auch in der "connect server" Option des Paraview Interfaces eingestellt werden).

Mit dieser Option ist es zudem möglich Paraview selbst das Startup für den pvserver machen zu lassen, indem wir eine "reverse connection" mit einem reverse SSH Tunnel nutzen. Dazu konfigurieren wir eine "Client / Server (reverse connection)", geben die Portnummer XXXXX wie oben an und ändern den Startup Type zu "Command" mit dem folgenden Kommando:

ssh -R XXXXX:localhost:XXXXX <user>@training.hlrs.de /opt/hlrs/non-spack/vis/paraview/ParaView-5.9.1-MPI-Linux-Python3.8-64bit/bin/pvserver --reverse-connection --client-host=localhost --server-port=XXXXX --disable-xdisplay-test

Unglücklicherweise hat ParaView 5.9.1 einen Bug der dazu führt dass das Programm mit einem segfault abstürzt, wenn wir versuchen diese Konfiguration abzuspeichern. Stattdessen können wir die Konfigurationsdatei "servers.pvsc" anlegen:

<Servers>
  <Server name="training.hlrs.de" configuration="" resource="csrc://localhost:XXXXX" timeout="-1">
    <CommandStartup>
      <Command process_wait="0" delay="5" exec="ssh">
        <Arguments>
          <Argument value="-R"/>
          <Argument value="XXXXX:localhost:XXXXX"/>
          <Argument value="scaXXXXX@training.hlrs.de"/>
          <Argument value="/opt/hlrs/non-spack/vis/paraview/ParaView-5.9.1-MPI-Linux-Python3.8-64bit/bin/pvserver"/>
          <Argument value="--reverse-connection"/>
          <Argument value="--client-host=localhost"/>
          <Argument value="--server-port=XXXXX"/>
          <Argument value="--disable-xdisplay-test"/>
        </Arguments>
      </Command>
    </CommandStartup>
  </Server>
</Servers>

(Denke daran die XXXXX mit der Nummer aus der Benutzernamen zu ersetzen.) Auf Linuxsystemen muss diese Datei in "~/.config/ParaView/servers.pvsc" hinterlegt werden. Auf Windows muss sie in "$USERAppDataRoamingParaviewservers.pvsc" gespeichert werden.

Dies funktioniert nur, wenn der SSH Befehl ohne Passwort durch Paraview ausgeführt werden kann.

Falls Probleme mit der OpenGL Visualisierung auftreten, kann es sein, dass die Option "--mesa" sowohl für ParaView und pvserver Abhilfe schafft.

links

social