Skip to content
Snippets Groups Projects
Select Git revision
  • b09fd4f8961b9b29f5753463b8dea40506be5468
  • main default protected
2 results

makefile

Name Last commit Last update
..
README.md
basic.mk

Makefile

Voraussetzungen

Server-Admin kontaktieren

  • Server: Public SSH-Key
  • Client: Private SSH-Key
  • Client: SSH-Config konfiguriert
Details anzeigen

Dieses Projekt sieht eine Kommunikation zwischen Client und Server mittels SSH vor. Aufgrund der höheren Sicherheit und einfacheren Bedienbarkeit sind SSH-Keys für den Authentifizierungsprozess zu verwenden.

Das Schlüsselpaar aus Private-Key und Public-Key muss zuvor gemeinsam mit dem Server-Admin eingerichtet werden. Je nach Server-Konfiguration kann es erforderlich sein, die SSH-Config anzupassen.

Empfehlung

Die Verwendung des Terminal-Multiplexers Byobu wird empfohlen.

# Debian / Ubuntu
sudo apt install byobu

Download & Installation: https://www.byobu.org/downloads

Details anzeigen

Vorteile von Byobu:

  • Sitzungen beibehalten: Byobu ermöglicht das Starten von Sitzungen, die im Hintergrund weiterlaufen, selbst wenn das Terminal geschlossen oder die Verbindung getrennt wird.
  • Einfache Wiederherstellung: Es ist jederzeit möglich, zu einer bestehenden Sitzung zurückzukehren, um den Status von Prozessen zu überprüfen oder die Arbeit fortzusetzen.

Installation

  1. Makefile herunterladen
  2. Makefile in Projektordner speichern
  3. Makefile in Makefile oder makefile umbenennen (ohne .mk)
  4. Makefile konfigurieren
  5. make install
Details anzeigen

Die Makefile dient in diesem Projekt zur Vereinfachung von Prozessen, die sonst in vielen Einzelschritten manuell über die bash-Konsole durchgeführt werden müssten.

Im Abschnitt Projektstruktur ist ein beispielhafter Aufbau eines Projekts skizziert.

Hilfen zur Konfiguration der Makefile und Bedeutung der verwendeten Variablen sind im Abschnitt Konfiguration zu finden.

Bedienung

siehe Befehle

  1. make upload Projektdateien hochladen
  2. make run Python-Script ausführen
  3. make log Fortschritt überprüfen
  4. make download Output-Dateien herunterladen
Details anzeigen

Die Makefile ist so konfiguriert, dass sie mit Erhalt einfacher Befehlen komplexe oder aufwendige Prozesse ausführt.

Im Abschnitt Befehle sind diese sogenannten Targets und deren Aufgabe näher beschrieben.

Projektstruktur

Beispiel

/home/max/akis/my_project/
├── data
│   ├── one.pkl
│   ├── three.pkl
│   └── two.pkl
├── main.py
├── makefile
├── output
│   └── empty
└── scripts
    ├── script-1.py
    ├── script-2.py
    └── script-3.py
Details anzeigen

Diese Projektstruktur ist nur ein Beispiel. Sie soll jedoch verdeutlichen, dass auch verschachtelte Projekte mit der Makefile bedienbar sind.

Wichtig ist jedoch, dass in der Makefile das MAIN_SCRIPT konfiguriert ist. Dieses Python-Script wird durch die Makefile ausgeführt; hier: main.py.

Wie das MAIN_SCRIPT aufgebaut ist, ist dabei nicht relevant. Es könnte ein alleinstehendes Script sein, welches ohne andere Python-Scripts auskommt. Oder es führt andere Python-Scripts aus; wie im obigen Beispiel scripts/script-1.py, scripts/script-2.py und scripts/script-3.py.

Importierte Datasets liegen oft nicht innerhalb des Projektordners, sondern werden von extern importiert. Es ist darauf zu achten, dass auch der Server Zugriff auf den Pfad der Datasets hat. Symbolische Links können hier hilfreich sein.

Output-Dateien, die nach Abschluss des Scripts wieder auf den Client heruntergeladen werden sollen, können mit REMOTE_OUTPUT_FILES definiert werden. Sie werden durch den Aufruf von make download im zuvor definierten Ordner LOCAL_OUTPUT_DIR abgespeichert.

Konfiguration

Server

Variable Verwendung Beispiel
SERVER_USER Server: User Name mmustermann
SERVER_HOST Server: Host Name hyrican-1-extern

Python Environment

Variable Verwendung Beispiel
SERVER_CONDA_PATH Server: Conda-Installations-Pfad /opt/conda
SERVER_CONDA_ENV Server: Conda-Environment-Pfad ~/envs/ml
PYTHON_VERSION Python: Gewünschte Version 3.10
PYTHON_PACKAGES Python: Benötigte Pakete tensorflow-cpu matplotlib optuna

Project Paths

Variable Verwendung Beispiel
LOCAL_PROJECT_DIR Client: Projektordner 1 .
REMOTE_PROJECT_DIR Server: Projektordner 2 ~s/akis/my_project

Project Files

Variable Verwendung Beispiel
MAIN_SCRIPT Auszuführendes Python-Script 1 main.py
LOG_FILE Log-Datei (optional) 1 progress.log

File Transfer

Variable Verwendung Beispiel
LOCAL_UPLOAD_FILES Client: Upload-Dateien 1 main.py scripts data/*.pkl
LOCAL_DOWNLOAD_DIR Client: Download-Ordner 1 output
REMOTE_DOWNLOAD_FILES Server: Download-Dateien 1 output/*.svg output/*.pkl

Misc

Variable Verwendung Beispiel
COPY_LINKS_AS_FILES Server: Kopiert Symlinks als Datei false

Befehle

make <target>

Target Aktion Ort
install Installiert Python Environment und Pakete Server
upload Läd veränderte Projektdateien hoch Client → Server
run Führt Python Script aus Server
kill Bricht Python Script ab Server
log Zeigt Log-Datei (optional) an Client
download Läd Outputdateien herunter Server → Client
delete Löscht Projektdateien Server

TODOs

  • Bedienung über Byobu
  • Datasets über NFS
  • Benachrichtigung bei Abbruch/Erfolg
    • Slack
    • Matrix
  • parallele Ausführung mehrerer Scripts
  • docs: get local python packages; append to PYTHON_PACKAGES

Fragen & Anregungen

Fragen, Unklarheiten, Anregungen und Wünsche können gerne über folgende Kommunikationswege an mich herangetragen werden:

Es ist durchaus im Sinne des Projekts, auch individualisierte Makefiles für einzelne Projekte anzupassen und umzuschreiben. Die hier beschriebene Makefile ist nur die Basis, auf der zukünftige Maßanfertigungen aufbauen können.

  1. Relativer Pfad zum Projektordner 2 3 4 5 6

  2. Absoluter Pfad