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

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 bemessen fallen pro Lehrstuhl an und sind gestaffelt nach der Anzahl der Personen, die MATLAB nutzen.

  • Auf den Loginknoten 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 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.

Aufrufen von MATLAB

Die MATLAB-Benutzeroberfläche wird gestartet, indem 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 wie hier beschrieben starten, befinden Sie sich noch auf dem Loginknoten! 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 Loginknoten ü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, obwohl die SSH-Verbindung mit X-Unterstützung hergestellt wurde. Dann reicht es in der Regel, die SSH-Verbindung zum Cluster zu trennen und sich neu zu verbinden.

  • Durch die Einstellung vom ZIMT ist bei R2018a 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.

<a name=”batchjobs”></a>Batchjobs mit Matlab

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.

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

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

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 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 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 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