Wiss. Rechnen » MATLAB
 

Achtung: Diese Seite beschäftigt sich mit dem OMNI-Cluster! Die entsprechende Seite zum HoRUS-Cluster finden Sie hier.


MATLAB ist eine Software für mathematische Berechnungen und deren Visualisierung. Der Name MATLAB ist aus matrix laboratory zusammengesetzt und verweist auf den Ursprung des Programms, die Matrizenrechnung. MATLAB wird von der Firma MathWorks entwickelt.

Auf dem Cluster ist MATLAB in der Versionen R2020b installiert. um MATLAB zu benutzen, muss module load matlab eingegeben werden.

Auf dieser Seite finden Sie Informationen, wie Sie MATLAB aufrufen, sowohl die Nutzeroberfläche als auch den Batch-Modus. Außerdem finden Sie eine Anleitung zum Einstellen von MATLAB-Jobs sowie für die Nutzung der parallelen Features von MATLAB, sowohl für Ein-Knoten- als auch Mehr-Knoten-Jobs.

Literatur

Dokumentation zu allen Themen mit zahlreichen Beispielen befindet sich im MATLAB-Documentation-Center. Dieses Tutorium der RWTH Aachen bietet einen guten Überblick und steht als PDF zur Verfügung.

Lizenzen

Die Uni Siegen verfügt über eine Campuslizenz für MATLAB selbst, außerdem verfügt das ZIMT über eine Lizenz für den sogenannten MATLAB Parallel Server (ehemals MATLAB Distributed Computing Server). Alle Angehörigen der Uni können MATLAB auf verschiedene Arten beziehen und nutzen:

  • Für Studierende gibt es die kostenlose Campuslizenz für Studierende. Hier ist beschrieben, wie Sie sie beziehen können.
  • Für Mitarbeiterinnen und Mitarbeiter gibt es die kostenpflichtige Campuslizenz, die hier beschrieben ist. Die Kosten fallen pro Lehrstuhl an und sind gestaffelt nach der Anzahl der Personen, die MATLAB nutzen.
  • Auf den Login-Knoten des Clusters selbst ist eine MATLAB-Installation vorhanden, die Sie ohne zusätzliche Lizenzkonfiguration Ihrerseits nutzen können. Dieselbe Installation steht auch auf den HTC-Knoten zur Verfügung.
  • Für die Nutzung des Parallel Servers müssen durch den Nutzer selbst keine zusätzlichen Lizenzen beschafft werden, weil die Lizenz clusterseitig eingespielt ist. Die Nutzung des Parallel Servers benötigt nur die MATLAB Parallel Toolbox, die in beiden Campuslizenzen enthalten ist. Die Uni Siegen verfügt über eine Lizenz für 16 Worker, das heißt pro MATLAB-Job können maximal 16 Worker-Prozesse gestartet werden. Diese Worker können mit mehreren Threads gestartet werden und auf verschiedenen Knoten laufen. Der Parallel Server steht ebenfalls auf den HTC-Knoten zur Verfügung.

Keine der MATLAB-Lizenzen ist an eine bestimmte Version gebunden.

MATLAB auf dem Cluster nutzen

Die MATLAB-Benutzeroberfläche wird gestartet, indem (nach dem Laden des Moduls mit module load matlab) der Befehl

matlab

in der Konsole eingegeben wird. MATLAB wird bei eingerichteter X-Unterstützung in der Regel ein Fenster starten. Alternativ kann MATLAB auch im Kommandozeilenmodus gestartet werden, indem die Option -nodisplay angehängt wird.

Achtung: wenn Sie MATLAB so wie hier beschrieben starten, befinden Sie sich noch auf dem Login-Knoten! Benutzen Sie diese Methode nur zur Entwicklung und zum Testen, nie zum Rechnen! Wir behalten uns vor, Ihre MATLAB-Prozesse ohne Vorwarnung abzubrechen, wenn Sie den Login-Knoten über einen längeren Zeitraum oder mit hoher CPU-Last belasten!

Dies ist aber nur der einfachste Weg, um MATLAB zu starten. MATLAB kann auf den Login- sowie den Compute-Knoten auf mehrere Arten genutzt werden.

Tipps:

  • Manchmal startet MATLAB von sich aus im Kommandozeilenmodus, ohne dass Sie -nodisplay angeben. Dann reicht es in der Regel, die SSH-Verbindung zum Cluster zu trennen und sich neu zu verbinden.
  • Durch die Einstellung vom ZIMT ist der MATLAB-Suchpfad am Ende um ~/.matlab erweitert. Dies bewirkt, dass eine nutzerspezifische Datei ~/.matlab/startup.m beim Programmstart von MATLAB ausgeführt wird. In dieser Datei können Sie Ihre eigenen Einstellungen platzieren.

Batch-Jobs mit Matlab

Matlab kann im Batch-Modus ausgeführt werden, das heißt, dass eine Kette von Befehlen (typischerweise in Form eines M-Skripts) nacheinander ausgeführt wird.

Um ein M-Skript im Batch-Modus auszuführen, wird die Option -r sowie der Skriptname ohne die Endung .m angegeben. In folgendem Beispiel wird ein Skript rechne.m ausgeführt:

matlab -nodisplay -r rechne

Die Skriptdatei muss im aktuellen Ordner verfügbar sein. Die Option -nodisplay stellt sicher, dass MATLAB nicht versucht, ein Fenster zu öffnen.

Ein Jobskript für MATLAB erstellen

Folgendes Beispiel zeigt, wie Sie MATLAB-Programme über den Scheduler SLURM ausführen. Um das Beispiel selbst auszuführen, müssen Sie in Ihrem Home-Verzeichnis einen Unterordner MATLAB erstellen und das MATLAB-Skript sowie das Jobskript in diesem ablegen.

Zunächst benötigen Sie das M-Skript, das Sie ausführen wollen. Als Beispiel können Sie das MATLAB-Skript sin_plot.m verwenden, welches Sie hier herunterladen können. Es berechnet eine Sinuskurve, erstellt ein Schaubild mit dem Ergebnis und speichert es als PNG-Datei ab:

A=sin([1:1024]*2*pi/1024)
h=figure; plot(A)
print(h, '-dpng', '~/MATLAB/sin.png')
exit

Um dieses M-Skript auszuführen, müssen Sie ein Jobskript erstellen, in dem MATLAB im Batchmodus mit dem M-Skript als Argument aufgerufen wird:

#!/bin/bash
#SBATCH --time=00:10:00
#SBATCH --partition=short
#SBATCH --ntasks-per-node=1

matlab -nodisplay -r sin_plot

Dieses Beispielskript ist herunterladbar als sin_batch.sh hier. Mehr Informationen zu Job-Skripten finden Sie hier.

Um den Job auszuführen, wechseln Sie in das entsprechende Verzeichnis ( ~/MATLAB im Beispiel). Der Job wird wie jeder normale SLURM-Job eingestellt mit dem Befehl:

sbatch sin_batch.sh

Wenn der Job erfolgreich abgeschlossen ist, existieren die Dateien ~/MATLAB/my.output und ~/MATLAB/sin.png.

Parallele Rechnungen mit der Parallel Toolbox

Die Parallel Toolbox ermöglicht es, eine MATLAB-Rechnung auf mehrere Prozesse, sogenannte Worker, aufzuteilen. Dabei müssen normalerweise alle Worker auf einem Knoten laufen (Shared-Memory-Parallelisierung). Auf dem OMNI-Cluster ist auch die Aufteilung einer Rechnung auf mehrere Knoten möglich, erfordert aber zusätzliche Konfiguration, siehe unten.

Nutzung des MATLAB Parallel Server

Der MATLAB Parallel Server (MPS), ehemals Distributed Computing Server (MDCS), dient dazu, eine MATLAB-Rechnung auf mehreren Knoten durchzuführen. Der Server steht auf dem OMNI-Cluster zur Verfügung.

Das ZIMT hat den MPS so konfiguriert, dass SLURM als Scheduler fungiert. Damit kann aus MATLAB heraus ein Job eingestellt werden, der wie jeder andere Job auf den Compute-Knoten läuft. Allerdings müssen Sie zunächst die Einstellungen des Clusterprofils für den OMNI-Cluster in MATLAB importieren.

Import des ZIMT-Clusterprofils

Der MPS arbeitet mit sogenannten Clusterprofilen, in denen die nötigen Informationen über den Cluster vorkonfiguriert sind. Zu diesem Zweck stellt das ZIMT das Profil omni_m2020.mlsettings zur Verfügung, welches Sie hier herunterladen können und anschließend in MATLAB importieren müssen. Die Schritte zum Importieren über die grafische Oberfläche sind wie folgt:

  1. Klicken Sie in der MATLAB-Oberfläche im Menü Home auf Parallel und wählen Sie den Punkt Manage Cluster Profiles

  2. Es öffnet sich der Cluster Profile Manager. Um die heruntergeladene Settings-Datei zu importieren, klicken Sie nun auf Add -> Import

Alternativ`können Sie auch ein Cluster Profile innerhalb der MATLAB-Kommandozeile importieren. Nachfolgendes Beispiel zeigt das Kommando dazu:

profile_master = parallel.importProfile('omni_m2020.mlsettings');

Setzen des Profiles als voreingestelltes Profile:

parallel.defaultClusterProfile(profile_master);

Erstellen von MATLAB-Skripten für MPS-Rechnungen

Bei MPS-Skripten müssen zwei Sachen beachtet werden:

  1. Am Anfang des MATLAB-Skripts, das gerechnet werden soll, muss ein sogenannter Parallel Pool, das heißt eine Gruppe von Workern, mit dem korrekten Profil erzeugt werden. Dies kann auf zwei Arten geschehen. Entweder der Pool wird wie hier beschrieben explizit erzeugt, oder er wird von MATLAB automatisch mit den Standardeinstellungen gestartet, sobald eine parallele Operation aufgerufen wird (siehe unten). Das Kommando parpool startet einen Pool und stellt die parallele Funktionalität für die Kommandos parfor und spmd bereit. Verwenden Sie dazu das soeben importierte Cluster-Profil (dessen Name in Matlab ist omni) für den Scheduler SLURM. parpool können Sie auch dazu nutzen, um interaktiv Jobs und MATLAB-Kommandos über die Worker zu verarbeiten.

    Zwei Beispiele zum Anlegen eines Arbeitsbereichs:

    % Beispiel 1
    poolobj = parpool('omni', 2, 'AttachedFiles',{'mod1.m', 'mod2.m'})
    Starting parallel pool (parpool) using the 'omni' profile ...
    
    % Beispiel 2
    poolobj = parpool('omni', 3)
    Starting parallel pool (parpool) using the 'omni' profile ...

    Beenden der Verarbeitung (Löschen des Pools):

    delete(poolobj)
  2. Bei der eigentlichen MATLAB-Rechnung müssen tatsächlich parallele Operationen ausgeführt werden. Dies sind insbesondere die beiden schon beschriebenen Befehle parfor und spmd.

Um mit einem solchen MATLAB-Skript zu rechnen, müssen Sie es in MATLAB wie jedes andere Skript ausführen. Entweder Sie starten es aus der MATLAB-Oberfläche mittels Editor -> Run oder Sie führen MATLAB im Batch-Modus mit Ihrem Skript aus.

Hinweis: Sie müssen kein eigenes Job-Skript erstellen, da der MPS den Job für Sie einstellt.

Derart eingestellte Jobs unterliegen denselben Gesetzmäßigkeiten wie alle anderen auch. Das heißt, dass Sie sie mittels squeue überwachen können, dass Sie unter Umständen warten müssen, bis der Job anläuft, und dass Sie den Job mit scancel abbrechen können.

Aktualisiert um 15:10 am 8. Februar 2021 von Jan Steiner