Wiss. Rechnen » MATLAB
 

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 R2019a und R2018a installiert. Der Standard ist R2019a, dieser ist ohne Laden eines Moduls bereits verfügbar. Um R2018a zu benutzen, muss module load matlab/2018a eingegeben werden.

Auf dieser Seite finden Sie Informationen, wie Sie MATLAB aufrufen, sowohl die Nutzeroberfläche als auch den Batch-Modus, außerdem 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.

Als Einführung ist das RRZN-Handbuch MATLAB/Simulink zu empfehlen. Als PDF-Dateien stehen ein Tutorium der RWTH Aachen und das Skript MATLAB-Praktikum zur Numerik der Universität Siegen im Internet.

Lizenzen

Das zwischen der Firma MathWorks und der Universität Siegen abgeschlossene Lizenzabkommen gestattet für den Cluster nur eine Nutzung wie auf einem Arbeitsplatz-PC. Das heißt, ein Nutzer darf sein MATLAB-Programm nicht gleichzeitig auf mehreren Compute-Knoten ausführen, sondern muss sich bei dieser Lizenzierung immer auf einen Knoten beschränken. Die auf dem Cluster installierte Parallel-Computing-Toolbox ermöglicht allerdings, dass eine Rechnung auf mehrere MATLAB-Prozesse (sog. Worker) auf einem Knoten verteilt werden kann.

Vom ZIMT wurde allerdings zusätzlich die MATLAB-Distributed-Computing-Server-Lizenz finanziert, die die Ausführung einer Rechnung auf mehreren Knoten erlaubt. Diese Lizenz ist für 16 Worker.

Aufrufen von MATLAB

Die MATLAB-Benutzeroberfläche wird gestartet, indem der Befehl

$ matlab

in der Konsole eingegeben wird.

Matlab kann außerdem im Batch-Modus ausgeführt werden, das heißt, das eine Kette von Befehlen (beispielsweise ein Skript) nacheinander ausgeführt werden. Dazu wird -nodisplay angehängt. Auf diese Weise können auch einzelne Matlab-Skripte ausgeführt werden, hier wird die Option -r sowie der Skriptname ohne die Endung .m angegeben:

$ matlab -nodisplay -r rechne

In diesem Beispiel wird ein Skript rechne.m ausgeführt. Es muss im aktuellen Ordner verfügbar sein.

Tipp: Durch die Einstellung vom ZIMT ist bei R2019a der MATLAB-Suchpfad am Ende um ~/.matlab erweitert. Dies bewirkt, dass eine nutzerspezifische Datei ~/.matlab/startup.m beim Programmstart von MATLAB ausgeführt wird. Hier können Sie Ihre eigenen Einstellungen platzieren.

Batchjobs mit MATLAB

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 MATLABerstellen und das MATLAB-Skript sowie das Jobskript in diesem ablegen.

Das MATLAB-Skript sin_plot.m, welches Sie hier herunterladen können, 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

Die Datei sin_batch.sh, herunterladbar hier, ist das zugehörige Job-Skript, das MATLAB im Batch-Modus aufruft:

#!/bin/bash 

#SBATCH --time=00:10:00 
#SBATCH --partition=short 
#SBATCH --ntasks-per-node=1 

matlab -singleCompThread -nodisplay -r sin_plot

Mehr Informationen zu Job-Skripten finden Sie hier.

Der Job wird wie jeder normale 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.

Achtung: MATLAB-Berechnungen sind auf dem Cluster nur auf den Compute-Knoten über SLURM auszuführen und nicht auf den Login-Knoten, um diese nicht für andere Nutzer zu blockieren. CPU-intensive Berechnungen auf dem Login-Knoten werden daher eventuell ohne Vorwarnung gestoppt.

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 HorUS-Cluster ist auch die Aufteilung einer Rechnung auf mehrere Knoten mit Hilfe des MDCS möglich, erfordert aber zusätzliche Konfiguration, siehe unten.

Nutzung des MATLAB Distributed Computing Server

Der MATLAB Distributed Computing Server (MDCS) dient dazu, eine MATLAB-Rechnung auf mehreren Knoten durchzuführen. Der MDCS ist derzeit für MATLAB R2019a und R2018a konfiguriert.

Das ZIMT hat den MDCS 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 HorUS-Cluster in MATLAB importieren.

Import des ZIMT-Clusterprofils

Der MDCS arbeitet mit sogenannten Clusterprofilen, in denen die nötigen Informationen über den Cluster vorkonfiguriert sind. Zu diesem Zweck stellt das ZIMT das Profil horus_m2019.settings zur Verfügung, welches Sie hier (R2019a), bzw. hier (R2018a) 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 nun 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('horus_m2019.settings');

Setzen des Profiles als voreingestelltes Profile:

parallel.defaultClusterProfile(profile_master);

Erstellen von MATLAB-Skripten für MDCS-Rechnungen

Bei MDCS-Skripten müssen zwei Sachen beachtet werden.

  1. Am Anfang des MATLAB-Skripts, das gerechnet werden soll, muss ein sogenannter Parallel Pool 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 richtet eine Gruppe (Pool) von Workern ein und stellt die parallele Funktionalität für die Kommandos parfor und spmd bereit. Verwenden Sie dazu das importierte Clusterprofil (dessen Name in MATLAB ist HorUS) 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('HorUS', 2, 'AttachedFiles',{'mod1.m', 'mod2.m'}) 
    Starting parallel pool (parpool) using the 'HorUS' profile ... 
    
    % Beispiel 2
    poolobj = parpool('HorUS', 3) 
    Starting parallel pool (parpool) using the 'HorUS' 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 erwähnten 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 MDCS 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 12:37 am 7. Mai 2018 von Jan Philipp Stephan