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 den Versionen R2020b und R2022b installiert. Um MATLAB zu benutzen, muss das MATLAB-Modul geladen werden (module load matlab).

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. Schließlich bieten wir unser Hilfsskript, das viele Schritte für sie automatisieren kann, zum Download an.

Achtung: Seit einiger Zeit wird die MATLAB-Nutzung auf dem Cluster und auf Ihrem PC getrennt abgerechnet! Sie müssen bei der Abrechnung die Nutzung von MATLAB auf dem Cluster separat angeben. Damit ist die MATLAB-Nutzung auf dem Cluster für Mitarbeiter (inkl. SHKs) nicht kostenlos.

Literatur

Dokumentation zu allen Themen mit zahlreichen Beispielen befindet sich im MATLAB-Documentation-Center.

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. Diese MATLAB-Installation unterliegt denselben Bestimmungen wie jede MATLAB-Instanz an der Uni, das heißt sie ist nur kostenlos, wenn sie von den Studierenden zum Zweck der eigenen Ausbildung genutzt wird. Dazu zählen BSc.- und MSc.-Arbeiten, aber nicht SHK-Tätigkeiten. In allen anderen Fällen fallen zusätzliche Kosten an. Es ist keine zusätzliche Konfiguration der Lizenzdaten Ihrerseits nötig, aber die MATLAB-Nutzung wird einmal jährlich durch die Fakultät 4 festgehalten und die Kosten abgerechnet.

    Dieselbe Installation steht auch auf den HTC-Knoten zur Verfügung.

  • Der MATLAB Parallel Server steht auf allen Knoten des Clusters zur Verfügung. Er ermöglicht die Erstellung von Workerpools über mehrere Knoten des Clusters hinweg. Es können beliebig viele Worker gestartet werden (die Beschränkung auf 16 Worker ist entfallen). MATLAB-Workerprozesse können mit mehreren Threads gestartet werden und mit entsprechenden SLURM-Einstellungen (siehe unten) über mehrere Knoten verteilt werden. Der Parallel Server steht ebenfalls auf den HTC-Knoten zur Verfügung.

    Hinweis: Die Worker selbst sind keine zusätzlichen MATLAB-Instanzen im Rahmen der oben beschriebenen Campuslizenzen.

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, 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 Parallel Server 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.

Hinweis: Wenn Sie mit dem MATLAB Parallel Server rechnen, benötigen Sie in Ihren Job-Einstellungen immer die Angabe --licenses=matlab:X wobei X die Anzahl Ihrer Worker ist. Wenn Sie, wie in folgendem Abschnitt beschrieben, das ZIMT-Profil nutzen, ist dies bereits voreingestellt. Falls Sie Ihre Jobs auf andere Art einstellen, müssen Sie selbst dafür Sorge tragen, dass Ihre SLURM-Einstellungen diesen Parameter enthalten.

Import des ZIMT-Clusterprofils

Der Parallel Server 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 parallele Rechnungen

Bei Skripten, die den Parallel Server nutzen, 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 MATLAB Parallel Server 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.

Hilfsskript für Cluster-Rechnungen

Das ZIMT hat für Sie ein MATLAB-Skript entwickelt, dass Ihnen die Arbeit mit MATLAB auf dem OMNI-Cluster erleichtert. Es erlaubt Ihnen, von der MATLAB-Instanz auf Ihrem eigenen PC aus einen Job auf dem Cluster einzustellen (auf einem Knoten, d.h. mit maximal 64 Workern).

Das Skript kann folgendes für Sie tun:

  • Ihre Dateien zum Cluster kopieren
  • Ein SLURM-Jobskript für Sie generieren
  • Ihren Job einstellen
  • Und Ihre Daten nach Abschluss der Rechnung wieder vom Cluster zu ihrem PC kopieren. Sie erhalten eine Email, wenn Ihr Job durchgelaufen ist.

Sie können dieses Skript (omni.m) hier herunterladen. Sie müssen es nur in den Ordner kopieren, der die MATLAB-Skripte und sonstigen Inputdateien für Ihre Rechnungen enthält, und anschließend ein paar Einstellungen im Skript vornehmen (z.B. Ihren Usernamen).

Genaue Anweisungen zur Bedienung finden Sie im Kopf des Skripts sowie wenn Sie in der MATLAB-Konsole help('omni') eingeben (vorausgesetzt, das Skript omni.m befindet sich in Ihrem MATLAB-Pfad).

Aktualisiert um 15:10 am 8. Februar 2021 von Gerd Pokorra