Auf dem Cluster ist das sogenannte Module Environment System LMod in der Version 8.2.4 installiert. Module dienen dazu, die Umgebung (siehe Linux-Grundlagen) auf einfache Weise austauschen zu können. Beispielsweise wäre, wenn eine Software in mehreren Versionen installiert ist, der Befehl zum Aufrufen der Software mehrdeutig. Sie als Nutzer können in solchen Fällen auswählen, welche Version Sie verwenden wollen.

Beim Einloggen sind einige Module automatisch geladen, andere müssen Sie von Hand laden, damit die Befehle überhaupt erst zur Verfügung stehen. Wieder andere Module werden automatisch mitgeladen, wenn Sie ein Modul laden, dass ein anderes benötigt.

Die einzelnen Module sind in jeweils einer Moduldatei definiert.

Benutzung des Modulsystems

LMod verwendet einige Befehle, die alle mit dem Wort module anfangen.

Zum Anzeigen der verfügbaren Module dient der Befehl module avail:

$ module avail
---------------------------- /opt/ohpc/pub/moduledeps/gnu9 -----------------------------
   R/3.6.3                                    mpich/3.3.2-ofi
   gsl/2.6                                    mvapich2/2.3.2
   hdf5/1.10.6                                openblas/0.3.7
   impi/2019.5                                openmpi4/4.0.4   (L)
   impi/2019.5.100010_cm9.0_6a80743563        pdtoolkit/3.25.1
   impi/2020.1                                plasma/2.8.0
   impi/2020.1.100005_cm9.0_8629b716ff (D)
----------------------------- /cm/shared/ohpc/modulefiles ------------------------------
   cmake/3.16.2                                os
   gnu9/9.3.0                           (L)    papi/5.7.0
   intel/19.0.5_2019                           paraver/4.8.2
   intel/19.0.5.100010_cm9.0_6a80743563        prun/2.0
   intel/19.1.1_2020                           singularity/3.4.2
   intel/19.1.1.100005_cm9.0_8629b716ff (D)    ucx/1.8.0         (L)
   libfabric/1.10.1                     (L)    valgrind/3.15.0

Geladene Module werden mit (L) gekennzeichnet, Standardmodule mit (D) (für “Default”). Wie Sie im obigen (gekürzten) Besipiel erkennen können, gibt es eine Hierarchie der Namen, die Ebenen sind wie bei Dateipaden durch Schrägstriche getrennt. Beispielsweise würde mit module load impi/2019.5 eine bestimmte Version der Software Intel MPI geladen. Es kann aber auch nur module load impi angegeben werden, dann wird das entsprechende Standardmodul geladen (impi/impi/2020.1.100005_cm9.0_8629b716ff in diesem Fall).

Beachten Sie auch, dass es eine Unterteilung nach Pfaden im MODULEPATH gibt. Der MODULEPATH bestimmt, wo Kollektionen von Moduldateien stehen.

Suchfunktion

Mit module avail werden nicht immer alle installierten Module angezeigt, weil Module teilweise von anderen abhängen. Mit dem Befehl

module spider <Modulname>

können Sie nach einem bestimmten Modul suchen.

Weitere Befehle

Der wichtigste Befehl ist das Laden oder Entladen eines Moduls:

module load <Modulname>
module unload <Modulname>

Geladene Module können angezeigt werden mit

module list

Alle Module können entladen werden mit dem folgenden Befehl (dies kann oft beim Debugging helfen):

module purge

Es gibt noch einige weitere Befehle, die mit module help angezeigt werden können. Außerdem zeigt

module help

Informationen zu einem bestimmten Modul.

Eigene Module definieren

Obwohl Sie üblicherweise vor allem die vom ZIMT bereitgestellten Module verwenden werden, existiert theoretisch die Möglichkeit, eigene Module zu schreiben. Dazu müssen zwei Sachen getan werden: Erstens muss eine entsprechende Moduldatei geschrieben werden und zweitens muss der Pfad, indem die Moduldatei steht, zur Umgebungsvariable MODULEPATH hinzugefügt werden.

Moduldateien

Eine Moduldatei in LMod ist ein in der Sprache Lua geschriebenes Skript. Es muss die Endung .lua haben. Dort werden bestimmte Aktionen definiert, die beim Laden des Moduls ausgeführt werden sollen. Dafür gibt es vorgefertigte Lua-Funktionen.

Hier ist als einfaches Beispiel die Moduldatei des Moduls dot gezeigt. Dies ist ein tatsächlich auf dem Cluster existierendes Modul, das das aktuelle Verzeichnis (.) zum PATH hinzufügt (siehe auch Linux-Grundlagen):

whatis("adds `.' to your PATH environment variable ")
append_path("PATH",".")
help([[ Adds `.' to your PATH environment variable

        This makes it easy to add the current working directory
        to your PATH environment variable.  This allows you to
        run executables in your current working directory
        without prepending ./ to the excutable name

        Version 3.2.10

]])

Die Funktion append_path() bewirkt das eigentliche Hinzufügen, die Funktionen help() und whatis() dienen dazu, Nutzern Informationen über das Modul zur Verfügung zu stellen. Zum Beispiel definiert help(), was angezeigt wird, wenn ein Nutzer module help <Modulname> eingibt. Hier ist eine Liste mit möglichen Funktionen in LMod.

Sie können mit module show <Modulname> den Inhalt von bestehenden Moduldateien anzeigen lassen.

Hinzufügen zu MODULEPATH

Um einen Pfad zu einer Umgebungsvariable hinzuzufügen, wird die Variable neu exportiert:

export MODULEPATH=$MODULEPATH:/home/demo_user/exampledir

Mehr dazu auf der Seite Linux-Grundlagen. Dort ist auch beschrieben, wie diese Einstellung permanent gemacht wird, indem sie in der Datei .bashrc hinzugefügt wird.

Achtung: Das Ändern von Umgebungsvariablen, insbesondere das permanente Ändern, kann unter Umständen dazu führen, dass bestimmte Befehle in Linux nicht mehr funktionieren. Es sollte nur mit äußerster Vorsicht geschehen. Sie können Änderungen an Umgebungsvariablen testen, indem Sie sie manuell in der Konsole eingeben. Mit einem Logout und einem erneuten Login kann dann die vorherige Einstellung wiederhergestellt werden.

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