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.