Ce document explique comment créer des images Docker personnalisées pour vos clusters Slurm sur Google Kubernetes Engine (GKE). Vous pouvez étendre les images Slurm de base fournies par GKE pour inclure des outils, des bibliothèques ou des configurations supplémentaires requis pour vos charges de travail de calcul hautes performances (HPC).
Avant de lire ce document, assurez-vous de connaître le module complémentaire Slurm Operator pour GKE.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser la Google Cloud CLI pour cette tâche, installez et initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Prérequis
Ce document suppose que vous disposez déjà d'un cluster Slurm exécuté sur GKE avec le module complémentaire Slurm Operator pour GKE installé. Suivez les procédures décrites sur les pages suivantes :
- Suivez le guide de démarrage rapide : déployer un cluster Slurm sur GKE.
- Configurez un dépôt Artifact Registry dans votre projet pour stocker vos images personnalisées.
Images de base Slurm
GKE fournit des images Slurm de base dans le dépôt Artifact Registry gcr.io/gke-release/. GKE met fréquemment à jour ces images pour des raisons de sécurité et de performances. Ces images sont disponibles dans des variantes qui incluent les dernières versions de Slurm et deux distributions Linux, Ubuntu et Rocky Linux.
Vous pouvez personnaliser les images de base suivantes :
gcr.io/gke-release/slinky/slurmd: utilisé pour les nœuds de calcul Slurm.gcr.io/gke-release/slinky/login: utilisé pour les nœuds de connexion.
Créer une image personnalisée
L'exemple suivant montre comment créer une image de calcul Slurm personnalisée qui inclut un environnement virtuel Python avec JAX installé. Vous créez également une image de connexion correspondante qui reflète la variable d'environnement PATH de l'image de calcul sans installer réellement les bibliothèques JAX.
Sélectionnez la version de l'image.
Lorsque vous sélectionnez une image de base, assurez-vous qu'elle remplit les conditions suivantes :
- La version correspond à la version de Slurm utilisée par les autres composants de votre cluster Slurm.
- Pour une version spécifique de Slurm, choisissez le tag de l'image la plus récente disponible, qui inclut les dernières mises à jour de sécurité et corrections de bugs.
Par exemple, si la version Slurm par défaut de votre cluster est 25.11, vous devez choisir un tag qui commence par 25.11-, par exemple 25.11-ubuntu24.04-gke.6.
Créer un fichier Dockerfile
Sélectionnez un tag d'image
slurmdbasé sur Ubuntu :Dans la console Google Cloud , accédez à la page du dépôt Artifact Registry qui inclut le package
slinky/slurmd.Recherchez une image avec un tag qui inclut
ubuntuet correspond à votre version de Slurm, par exemple25.11-ubuntu24.04-gke.6.Copiez le tag. Vous utilisez cette balise pour remplacer l'espace réservé
VERSION_TAGdans le fichier de configuration suivant.
Créez un fichier nommé
Dockerfileavec le contenu suivant :# --- 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}/binRemplacez
VERSION_TAGpar le tag de version Slurm qui correspond à la version Slurm par défaut de votre cluster.Créez les images à l'aide de la commande
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 .Remplacez les éléments suivants :
AR_PATH: chemin d'accès à votre dépôt Artifact Registry, par exemplegcr.io/my-project.CUSTOM_SLURMD_TAG: nom de tagslurmd-customde votre choix.CUSTOM_LOGIN_TAG: nom de taglogin-customde votre choix.
Transférez les images personnalisées vers votre dépôt :
docker push AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker push AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
Utiliser les images personnalisées dans GKE
Pour utiliser vos images personnalisées, procédez comme suit :
Comme indiqué dans l'exemple suivant, mettez à jour le dépôt et le tag d'image pour le nodeset
slurmdet le loginsetloginen modifiant le fichiervalues.yaml: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_TAGMettez à niveau le déploiement existant :
helm upgrade slurm oci://ghcr.io/slinkyproject/charts/slurm \ --namespace slurm \ --version=1.0.2 \ -f values.yamlTestez les nouvelles fonctionnalités de votre nœud de calcul en vous connectant au nœud de connexion et en exécutant la commande
srunsuivante :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}') "Le résultat ressemble à ce qui suit :
Python Executable: /opt/custom_venv/bin/python3 Using JAX backend: cpu Matrix multiplication successful. Shape: (5000, 5000)Ce résultat confirme que Slurm exécute le script sur les pods de nœuds de calcul exécutant votre image personnalisée, et que l'image contient les fonctionnalités Python et JAX requises.
Effectuer un nettoyage
Pour nettoyer les ressources que vous avez utilisées dans ce tutoriel, procédez comme suit :
Désinstallez le déploiement Helm :
sh helm uninstall slurm --namespace slurmCette commande supprime toutes les ressources Kubernetes déployées par le chart Helm.
Supprimez l'espace de noms Slurm :
kubectl delete namespace slurmSupprimez le cluster GKE :
gcloud container clusters delete CLUSTER_NAMERemplacez
CLUSTER_NAMEpar le nom de votre cluster.Supprimez les images personnalisées d'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-tagsSupprimez les images personnalisées de votre environnement Docker local :
docker rmi AR_PATH/slinky/slurmd:CUSTOM_SLURMD_TAG docker rmi AR_PATH/slinky/login:CUSTOM_LOGIN_TAG
Étapes suivantes
- Explorez le projet Slurm sur GitHub.
- Découvrez comment activer le module complémentaire Slurm Operator pour GKE.