Die Anaconda-Distribution ist eine Kollektion von Software für wissenschaftliche Zwecke. Sie enthält eine Python-Installation, eine R-Installation, sowie den Paketmanager Conda, der zur Installation von Anaconda-Paketen benutzt werden kann. Da die komplette Anaconda-Distribution mit allen Paketen sehr viel Speicherplatz verbraucht, gibt es außerdem die Variante Miniconda, die nur Python, Conda sowie ein paar grundlegende Pakete enthält. Beide Varianten sind vollständig kostenlos und Open-Source.

Auf dem OMNI-Cluster steht Miniconda zur Verfügung. Es basiert auf Python 3.8.5 und Conda 4.9.2. Um Miniconda zu verwenden, muss das Modul miniconda3 geladen werden:

module load miniconda3

Die Dokumentation von Conda finden Sie hier. Eine vollständige Übersicht über verfügbare Pakete der Anaconda-Distribution gibt es hier. Beachten Sie, dass Conda auch Pakete von Drittanbietern installieren kann und mehrere Quellen (in Conda “Channels” genannt) verwalten kann. Der wichtigste Community-Channel ist conda-forge.

Hinweis für Tensorflow- und Pytorch-Nutzer: Es gibt auf dem Cluster bereits vorinstallierte Software mit GPU-Unterstützung in unserem GPU-Stack.

Einrichtung von Conda

Sie verwenden Conda im wesentlichen mit dem Befehl conda. Beispielsweise können Sie sich mit:

conda help

eine Übersicht der möglichen Conda-Befehle anzeigen lassen. Ein vollständige Liste finden Sie in der Dokumentation zu Conda hier.

Wenn Sie Conda zum ersten Mal verwenden, müssen Sie es mit dem Befehl conda init initialisieren, und dann die Shell schließen und neu öffnen (zum Beispiel indem Sie die SSH-Verbindung zum Cluster beenden und sich neu verbinden). Hier ist der Befehl mit einem Beispieloutput:

[demo_user@hpc-login01 ~]$ conda init
no change     /cm/shared/omni/apps/miniconda3/condabin/conda
no change     /cm/shared/omni/apps/miniconda3/bin/conda
no change     /cm/shared/omni/apps/miniconda3/bin/conda-env
no change     /cm/shared/omni/apps/miniconda3/bin/activate
no change     /cm/shared/omni/apps/miniconda3/bin/deactivate
no change     /cm/shared/omni/apps/miniconda3/etc/profile.d/conda.sh
no change     /cm/shared/omni/apps/miniconda3/etc/fish/conf.d/conda.fish
no change     /cm/shared/omni/apps/miniconda3/shell/condabin/Conda.psm1
no change     /cm/shared/omni/apps/miniconda3/shell/condabin/conda-hook.ps1
no change     /cm/shared/omni/apps/miniconda3/lib/python3.8/site-packages/xontrib/conda.xsh
no change     /cm/shared/omni/apps/miniconda3/etc/profile.d/conda.csh
modified      /home/js056352/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

(Nach Logout und erneutem Login...)

(base) [demo_user@hpc-login01 ~]$

Es sind zwei Sachen zu erkennen: Erstens hat conda init die .bashrcDatei des Users modifiziert (wenn Sie in der Datei nachschauen, können Sie sehen, dass die PATH-Variable modifiziert wurde). Zweitens zeigt die Kommandozeile nun links (base) an. Dies ist das aktive Conda-Environment. Conda-Environments werden im nächsten Abschnitt erklärt.

Achtung: Es besteht die Gefahr von unbeabsichtigten Seiteneffekten, wenn Sie das Modul miniconda3 laden oder entladen, insbesondere nach einem conda init, da dann die Reihenfolge der Verzeichnisse in der PATH-Variable verändert wird. Wir empfehlen, wenn Sie Miniconda verwenden, das Modul miniconda3 permanent aktiv zu haben, z.B. indem Sie module load miniconda3 vor dem conda initzu Ihrer .bashrc-Datei hinzufügen (siehe auch Linux-Grundlagen).

Bitte beachten Sie auch, dass die Befehle python sowie python3 auf ein conda-eigenes Python zeigen, sobald Conda aktiv ist. Diese Python-Installation unterscheidet sich von dem regulären System-Python auf dem Cluster. Außerdem wird für jedes Conda-Environment, das Sie erstellen (siehe nächster Abschnitt), eine eigene Python-Instanz erstellt.

Sie haben noch weitere Möglichkeiten der Konfiguration von Conda, die hier erklärt sind.

Conda-Environments

Conda-Environments dienen, ähnlich wie die Virtual Environments von Python, dazu, Softwareinstallationen für verschiedene Projekte voneinander zu trennen. Conda Environments haben allerdings den Vorteil, dass sie nicht Python-intern sind. Achtung: Sie müssen mindestens ein eigenes Conda-Environment einrichten, da Sie in das Standard-Environment (base) keine Pakete installieren können. Sie können mit dem Befehl conda env list die verfügbaren Environments auflisten:

$ conda env list

# conda environments:
#
base                  *  /cm/shared/omni/apps/miniconda3
test                     /home/demo_user/.conda/envs/test
                         /home/demo_user/miniconda3

Wie Sie an diesem Beispieloutput erkennen können, befindet sich das base-Environment im Installationsverzeichnis, in dem normale Nutzer keine Schreibrechte haben, während selbst eingerichtete Environments in Ihrem Home-Verzeichnis stehen.

Ein Environment erstellen

Sie erstellen ein eigenes Environment mit dem Befehl:

conda create --name <Envname>

Sie können auch an dieser Stelle bereits Pakete installieren. Insbesondere, wenn Sie eine bestimmte Python-Version verwenden möchten (Python wird von Conda wie jedes andere Paket behandelt), können Sie diese direkt spezifizieren:

conda create --name <Envname> python=3.8

Diese Syntax (<Paketname>=<Version>) funktioniert übrigens bei allen Conda-Paketen, wenn Sie eine bestimmte Version benötigen. Wir empfehlen allerdings, nur eine bestimmte Version anzugeben, wenn es absolut notwendig ist.

Ein Environment verwenden

Sie müssen ein Environment aktivieren, bevor Sie es verwenden können. Es empfiehlt sich außerdem, das Environment nach Benutzung wieder zu deaktivieren. Die Befehle dafür sind:

conda activate <Envname>

sowie

conda deactivate

Das aktive Environment wird Ihnen an der linken Seite der Kommandozeile in Klammern angezeigt. Wenn Sie überhaupt kein Environment aktiviert haben möchten, können Sie nochmals conda deactivate eingeben.

Mehr Informationen zu Conda-Environments finden Sie in der Conda-Dokumentation hier.

Installation von Paketen

Sie installieren Conda-Pakete mit dem Befehl:

conda install <Paketname>

Wie schon erwähnt, werden Conda-Pakete in einem Unterordner Ihres Homeverzeichnisses installiert. Wenn Sie eine Fehlermeldung über fehlende Schreibrechte bekommen, überprüfen Sie, dass Sie nicht versehentlich im base-Environment sind.

Achtung: Wenn Sie Python-Pakete installieren möchten, sollten Sie sie, soweit möglich, mit conda install und nicht mit pip install installieren, da letzteres zu Konflikten führen kann.

Es sei außerdem nochmal darauf verwiesen, dass nicht nur Pakete aus dem offiziellen Conda-Repository installiert werden können. Conda hat, wie die meisten Paketmanager, die Möglichkeit, zusätzliche Channels hinzuzufügen. Ein wichtiger nicht-offizieller Channel ist beispielsweise conda-forge, der Community-Packages enthält. Die Installation von inoffiziellen Paketen erfolgt auf eigene Gefahr und sollte, soweit möglich, vermieden werden.

Detaillierte Informationen zu Conda-Paketen finden Sie in der Conda-Dokumentation hier, mehr zu Conda-Channels finden Sie hier. Eine vollständige Übersicht über verfügbare Pakete der Anaconda-Distribution gibt es hier.

Conda und Slurm-Jobs

Unsere Nutzer haben teilweise von Problemen berichtet, die aus dem komplexen Zusammenspiel der folgenden Faktoren entstehen:

  • Dem Laden des Conda-Moduls
  • Dem Aktivieren des Conda-Environments
  • Der Ausführung der Befehle in der .bashrc-Datei des Nutzers
  • Den Einstellungsmöglichkeiten von Slurm-Skripten (#SBATCH ...) bezüglich der Frage, welche Umgebungsvariablen an den Job übergeben werden.

Es gibt keine allgemeine Lösung für dieses Problem, weil viel von den verwendeten Modulen und der Reihenfolge der oben benannten Schritte abhängt.

Ein Jobskript der folgenden Form hat sich bei mehreren Problemen als Lösung erwiesen:

#!/bin/bash
#SBATCH (...)

source ~/.bashrc
conda deactivate
conda activate <Ihr Env-Name>

<Ihre sonstigen Befehle>

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