In diesem Dokument wird erläutert, wie Sie benutzerdefinierte Docker-Images für Ihre Slurm-Cluster in Google Kubernetes Engine (GKE) erstellen. Sie können die von GKE bereitgestellten Slurm-Basis-Images um zusätzliche Tools, Bibliotheken oder Konfigurationen erweitern, die für Ihre Hochleistungs-Computing-Arbeitslasten (HPC) erforderlich sind.
Machen Sie sich vor dem Lesen dieses Dokuments mit dem Slurm Operator-Add-on für GKE vertraut.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten,
installieren und dann
initialisieren Sie die
gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste
Version mit dem
gcloud components updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
Vorbereitung
In diesem Dokument wird davon ausgegangen, dass Sie bereits einen Slurm-Cluster in GKE mit installiertem Slurm Operator-Add-on für GKE haben. Führen Sie die Schritte auf den folgenden Seiten aus:
- Führen Sie die Kurzanleitung: Slurm-Cluster in GKE bereitstellen aus.
- Konfigurieren Sie ein Artifact Registry-Repository in Ihrem Projekt, um Ihre benutzerdefinierten Images zu speichern.
Slurm-Basis-Images
GKE bietet Slurm-Basis-Images im gcr.io/gke-release/ Artifact Registry-Repository an. GKE aktualisiert diese Images häufig aus Sicherheits- und Leistungsgründen. Diese Images sind in Varianten mit den neuesten Slurm-Versionen und zwei Linux-Distributionen verfügbar: Ubuntu und Rocky Linux.
Sie können die folgenden Basis-Images anpassen:
gcr.io/gke-release/slinky/slurmd: wird für Slurm-Rechenknoten verwendet.gcr.io/gke-release/slinky/login: wird für Anmeldeknoten verwendet.
Benutzerdefiniertes Image erstellen
Im folgenden Beispiel wird gezeigt, wie Sie ein benutzerdefiniertes Slurm-Rechen-Image erstellen, das eine virtuelle Python-Umgebung mit installierter JAX-Bibliothek enthält. Außerdem erstellen Sie ein entsprechendes Anmelde-Image, das die Umgebungsvariable PATH des Rechen-Images widerspiegelt, ohne die JAX-Bibliotheken tatsächlich zu installieren.
Image-Version auswählen
Wenn Sie ein Basis-Image auswählen, muss es die folgenden Bedingungen erfüllen:
- Die Version entspricht der Slurm-Version, die von anderen Komponenten in Ihrem Slurm-Cluster verwendet wird.
- Wählen Sie für eine bestimmte Slurm-Version das Tag des neuesten verfügbaren Images aus, das die neuesten Sicherheitsupdates und Fehlerkorrekturen enthält.
Wenn die Standard-Slurm-Version in Ihrem Cluster beispielsweise 25.11 ist, sollten Sie
ein Tag auswählen, das mit 25.11- beginnt, z. B. 25.11-ubuntu24.04-gke.6.
Dockerfile erstellen
Wählen Sie ein Ubuntu-basiertes
slurmd-Image-Tag aus:Rufen Sie in der Google Cloud Console die Seite Artifact Registry-Repository auf, die das Paket
slinky/slurmdenthält.Suchen Sie nach einem Image mit einem Tag, das
ubuntuenthält und Ihrer Slurm Version entspricht, z. B.25.11-ubuntu24.04-gke.6.Kopieren Sie das Tag. Mit diesem Tag ersetzen Sie den Platzhalter
VERSION_TAGin der folgenden Konfigurationsdatei.
Erstellen Sie eine Datei mit dem Namen
Dockerfileund dem folgenden Inhalt:# --- Target 1: The Worker Node (slurmd) --- FROM gcr.io/gke-release/slinky/slurmd:VERSION_TAG AS slurmd-custom USER root # Install minimal requirements for venv RUN apt-get update && apt-get install -y --no-install-recommends \ python3-pip \ python3-venv \ && rm -rf /var/lib/apt/lists/* # Create and populate the virtual environment ENV VIRTUAL_ENV=/opt/custom_venv RUN python3 -m venv ${VIRTUAL_ENV} ENV PATH="${VIRTUAL_ENV}/bin:$PATH" # Install JAX (CPU version for general compatibility) and dependencies RUN pip install --no-cache-dir jax[cpu] numpy # --- Target 2: The Login Node --- FROM gcr.io/gke-release/slinky/login:VERSION_TAG AS login-custom USER root # Mirror the PATH exactly so that the srun command captures it. # Note: You don't need to install the JAX libs here, # but the binary path must exist for the shell to recognize it. ENV VIRTUAL_ENV=/opt/custom_venv ENV PATH="${VIRTUAL_ENV}/bin:$PATH" # Create the directory structure so the PATH is valid on the login node RUN mkdir -p ${VIRTUAL_ENV}/binErsetzen Sie
VERSION_TAGdurch das Slurm-Versionstag, das der Standard-Slurm-Version Ihres Clusters entspricht.Erstellen Sie die Images mit dem Befehl
docker build:docker build --target=slurmd-custom \ -t AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG \ -f Dockerfile . docker build --target=login-custom \ -t AR_PATH/slinky/login:CUSTOM_LOGIN_TAG \ -f Dockerfile .Ersetzen Sie Folgendes:
AR_PATH: der Pfad zu Ihrem Artifact Registry-Repository, z. B.gcr.io/my-project.CUSTOM_SLURMD_TAG: einslurmd-custom-Tag-Name Ihrer Wahl.CUSTOM_LOGIN_TAG: einlogin-custom-Tag-Name Ihrer Wahl.
Übertragen Sie die benutzerdefinierten Images in Ihr Repository:
docker push AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker push AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
Benutzerdefinierte Images in GKE verwenden
So verwenden Sie Ihre benutzerdefinierten Images:
Aktualisieren Sie wie im folgenden Beispiel gezeigt das Image-Repository und das Tag für das
slurmd-Knotenset und daslogin-Anmeldeset, indem Sie die Dateivalues.yamländern:nodesets: slinky: replicas: 1 slurmd: image: repository: AR_PATH/slinky/slurmd tag: CUSTOM_SLURMD_TAG loginsets: slinky: enabled: true replicas: 1 login: image: repository: AR_PATH/slinky/login tag: CUSTOM_LOGIN_TAGAktualisieren Sie die vorhandene Bereitstellung:
helm upgrade slurm oci://ghcr.io/slinkyproject/charts/slurm \ --namespace slurm \ --version=1.0.2 \ -f values.yamlTesten Sie die neuen Funktionen Ihres Rechenknotens, indem Sie sich im Anmeldeknoten anmelden und den folgenden
srun-Befehl ausführen:srun python3 -c " import sys import jax import jax.numpy as jnp print(f'Python Executable: {sys.executable}') print(f'Using JAX backend: {jax.devices()[0].platform}') key = jax.random.PRNGKey(42) x = jax.random.normal(key, (5000, 5000)) result = jnp.dot(x, x) print(f'Matrix multiplication successful. Shape: {result.shape}') "Die Ausgabe sieht etwa so aus:
Python Executable: /opt/custom_venv/bin/python3 Using JAX backend: cpu Matrix multiplication successful. Shape: (5000, 5000)Diese Ausgabe bestätigt, dass Slurm das Skript auf Worker-Pods ausführt, auf denen Ihr benutzerdefiniertes Image ausgeführt wird, und dass das Image die erforderlichen Python- und JAX-Funktionen enthält.
Bereinigen
So bereinigen Sie die in dieser Anleitung verwendeten Ressourcen:
Deinstallieren Sie die Helm-Bereitstellung:
sh helm uninstall slurm --namespace slurmMit diesem Befehl werden alle Kubernetes-Ressourcen entfernt, die vom Helm-Diagramm bereitgestellt wurden.
Löschen Sie den Slurm-Namespace:
kubectl delete namespace slurmLöschen Sie den GKE-Cluster:
gcloud container clusters delete CLUSTER_NAMEErsetzen Sie
CLUSTER_NAMEdurch den Clusternamen.Löschen Sie die benutzerdefinierten Images aus Artifact Registry:
gcloud container images delete AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG --force-delete-tags gcloud container images delete AR_PATH/slinky/login:CUSTOM_LOGIN_TAG --force-delete-tagsEntfernen Sie die benutzerdefinierten Images aus Ihrer lokalen Docker-Umgebung:
docker rmi AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker rmi AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
Nächste Schritte
- Sehen Sie sich das Slurm-Projekt auf GitHub an.
- Informationen zum Aktivieren des Slurm Operator-Add-ons für GKE.