Für die meisten Python-Projekte empfiehlt es sich, ein Virtual Environment zu benutzen, um sie auszuführen. Ein Virtual Environment ist quasi eine lokale Python-Installation in einem Ordner, so dass dort nur die Pakete verfügbar sind, die für das Projekt gebraucht werden. Dies ist insbesondere dann nötig, wenn verschiedene Projekte unterschiedliche Versionen des selben Pakets benötigen.

Eine Shell auf einem Compute-Node nutzen

Der Server slurmmaster-ls6 hat absichtlich wenig Ressourcen, um zu verhindern, dass Rechenjobs an Slurm vorbei gestartet werden. Es gibt jedoch Pakete (pytorch), welche bereits zum Installieren größere Ressourcenmengen benötigen.

Um ein Virtualenv einzurichten, ohne jeden Befehl separat mit srun oder sbatch auf einem Compute Node auszuführen, kann man auch eine interaktive Shell auf einem Compute Node starten. Hierzu muss srun mit dem Parameter --pty aufgerufen werden, um interaktive Prozesse zu erlauben. Wird ein Virtualenv für GPU-Jobs erstellt, ist es außerdem empfehlenswert mit -w einen GPU-Node explizit anzugeben:

srun --pty -w tithanos bash

Virtualenvs erstellen

Zum Erstellen eines Virtualenvs kann das in Python integrierte Modul venv genutzt werden. Dabei sollte auch gleich pip auf den neuesten Stand gebracht werden:

python3.8 -mvenv myNewVenv
source myNewVenv/bin/activate
pip install -U pip

Dies erstellt ein neues Virtualenv im Ordner myNewVenv. Dieses nutzt die Python-Version, welche zum Erstellen benutzt wird, d.h. in diesem Beispiel wird innerhalb des Virtualenv der Befehl python auf python3.8 verweisen.

Es können beliebig viele Virtualenvs angelegt werden, hierzu einfach verschiedene Ordnernamen nutzen

Virtualenv aktivieren und nutzen

Um ein Virtualenv zu nutzen, muss man es “aktivieren”, was in der laufenden Shell den PATH anpasst, so dass python die Installation aus dem Virtualenv nutzt. Hierzu folgenden Befehl aufrufen (myNewVenv durch den Pfad zum Virtualenv-Ordner ersetzen):

source myNewVenv/bin/activate

Je nach benutzter Shell sollte dann das Prompt (venv) o.ä. enthalten. Nun können Pakete mit pip in das Virtualenv installiert werden.

# Installiere tensorflow
pip install tensorflow

# Installiere Pakete aus einer requirements.txt
pip install -r myProject/requirements.txt

# Installiere eigenes Projekt z.B. aus Gitlab.
# -e bewirkt, dass der Ordner zum PYTHONPATH hinzugefügt wird, d.h. Änderungen am Projekt wirken sich direkt ohne neue
# Installation aus

git clone https://gitlab2.informatik.uni-wuerzburg.de/example/exampleProject
pip install -e ./exampleProject

Jobs mit Virtualenv starten

Wenn ein Job mit Slurm gestartet wird, nutzt der die beim Aufruf von srun/sbatch gültigen Environment-Variablen, d.h. falls man sein Virtualenv wie oben aktiviert hat, wird dies auch beim Job übernommen.

Alternativ kann man, falls der Job aus einem Shellscript besteht, die Zeile source ${PFAD_ZUM_VENV}/bin/activate oben im Script einfügen (${PFAD_ZUM_VENV} dabei natürlich entsprechend ersetzen).