Ce tutoriel explique comment déployer un cluster Slurm sur Compute Engine. Le gestionnaire de ressources Slurm est un gestionnaire de ressources courant utilisé dans de nombreux centres de calcul hautes performances. Pour en savoir plus sur la terminologie du calcul hautes performances et les cas d'utilisation, consultez la page Utiliser des clusters pour les calculs techniques à grande échelle dans le cloud.
Le schéma suivant illustre la configuration que vous allez créer en suivant ce tutoriel.
En tant que gestionnaire de charge de travail de cluster, Slurm assure les fonctions suivantes :
- Allocation de ressources (nœuds de calcul) aux utilisateurs
- Fourniture d'un cadre pour le démarrage, l'exécution et la surveillance des tâches sur les nœuds
- Gestion des tâches en attente dans une file d'attente
Dans ce tutoriel, nous allons déployer une architecture de cluster simplifiée qui accepte quelques utilisateurs exécutant une charge de travail dans une application unique. Vous pouvez utiliser d'autres configurations pour les déploiements de charges de travail multiples, les déploiements de production à grande échelle et les déploiements hybrides compatibles avec les clusters sur site ou multicloud. Ces configurations ne seront cependant pas traitées dans le cadre de ce tutoriel.
Dans ce tutoriel, vous allez interagir avec le système grâce au nœud de connexion (head). Une fois le cluster déployé, vous allez vous connecter en SSH au nœud de connexion, installer les applications et utiliser les outils de ligne de commande Slurm pour envoyer des tâches de calcul. Le planificateur Slurm, qui s'exécute sur le nœud de contrôleur, planifie les tâches mises en file d'attente en mettant en correspondance les ressources disponibles avec les exigences des tâches. Il gère aussi l'exécution des tâches sur les nœuds de calcul. Le serveur NFS fournit un espace partagé commun pour les fichiers.
Objectifs
- Utiliser Cloud Deployment Manager pour déployer un cluster Slurm.
- Exécuter une tâche avec Slurm.
- Demander des informations au cluster et surveiller les tâches en cours d'exécution dans Slurm.
- Procéder à un autoscaling des nœuds pour s'adapter aux paramètres et aux exigences des tâches.
Coûts
Ce tutoriel utilise les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.
Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.
Avant de commencer
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.
- Activer les API Compute Engine and Deployment Manager.
-
Dans Cloud Console, activez Cloud Shell.
En bas de la fenêtre de Cloud Console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel le SDK Cloud est déjà installé (y compris l'outil de ligne de commande
gcloud
), et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Déployer le cluster Slurm
Dans cette section, vous allez préparer la configuration du cluster, déployer le cluster Slurm sur Google Cloud à l'aide de Deployment Manager, puis vérifier que le cluster est opérationnel.
Préparer la configuration du cluster
Dans Cloud Shell, clonez le dépôt GitHub
slurm-gcp
:git clone https://github.com/SchedMD/slurm-gcp.git
Définissez les variables d'environnement suivantes :
export CLUSTER_DEPLOY_NAME="cluster-deployment-name" export CLUSTER_NAME="cluster-name" export CLUSTER_REGION="cluster-region" export CLUSTER_ZONE="cluster-zone"
Remplacez l'élément suivant :
cluster-deployment-name
: nom unique du déploiement de cluster.cluster-name
: nom unique du cluster.cluster-region
: région dans laquelle s'effectue le déploiement. Choisissez une région proche de chez vous. Pour en savoir plus, consultez la page Régions et zones.cluster-zone
: zone dans laquelle s'effectue le déploiement.
Dans le dossier
slurm-gcp
, copiez le fichierslurm-cluster.yaml
dans le fichier${CLUSTER_DEPLOY_NAME}.yaml
:cd slurm-gcp cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
Dans un éditeur de texte, modifiez le fichier
${CLUSTER_DEPLOY_NAME}.yaml
pour l'adapter à votre environnement. Utilisez les types définis dans le fichierslurm.jinja.schema
. (Il contient les valeurs par défaut et les valeurs autorisées pour toutes les propriétés de configuration, à l'exception dedefault_users
.) Au minimum, apportez au fichier les modifications suivantes :cluster_name
: indiquez le nom de votre clustercluster-name
.region
etzone
: spécifiezcluster-region
etcluster-zone
.compute_machine_type
(facultatif) : vous pouvez modifier la valeur decompute_machine_type
pour utiliser un autre type de machine. Par exemple, si vous avez besoin de plus de cœurs de processeur ou de plus de mémoire qu'il n'y en a sur le type de machine par défautn1-standard-2
, spécifiezn1-standard-4
à la place. Pour en savoir plus, reportez-vous à la page Types de machines.vpc_net
etvpc_subnet
(facultatif) : vous pouvez utiliser un réseau VPC (Virtual Private Cloud) et un sous-réseau VPC existants. La configuration requise pour le réseau et le sous-réseau est décrite dans le fichierslurm.jinja.schema
. Si vous ne spécifiez pas de valeurs, un nouveau réseau ou sous-réseau est créé pour votre cluster. Pour en savoir plus, reportez-vous à la page Réseaux VPC.
Enregistrez le fichier.
Déployer le cluster Slurm à l'aide de Deployment Manager
Dans Cloud Shell, utilisez la commande Deployment Manager suivante pour déployer votre cluster sur Google Cloud :
gcloud deployment-manager deployments \ --project="$(gcloud config get-value core/project)" \ create $CLUSTER_DEPLOY_NAME \ --config ${CLUSTER_DEPLOY_NAME}.yaml
Le résultat ressemble à ce qui suit :
The fingerprint of the deployment is VWVaIYX1mFpjv9UDhzalYQ== Waiting for create [operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545]...done. Create operation operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545 completed successfully. NAME TYPE STATE ERRORS INTENT helloworld-all-internal-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute-image compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-compute2 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-controller compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-login1 compute.v1.instance IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-router compute.v1.router IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-network compute.v1.network IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-slurm-subnet compute.v1.subnetwork IN_PREVIEW [] CREATE_OR_ACQUIRE helloworld-ssh-firewall-rule compute.v1.firewall IN_PREVIEW [] CREATE_OR_ACQUIRE
La configuration du cluster prend entre 5 et 10 minutes. Suivez la progression de la configuration à l'aide de la commande suivante :
gcloud compute ssh ${CLUSTER_NAME}-controller \ --command "sudo journalctl -fu google-startup-scripts.service" \ --zone $CLUSTER_ZONE
Une fois le script terminé, votre cluster Slurm est prêt à être utilisé. Le résultat se termine par la ligne suivante :
Started Google Compute Engine Startup Scripts.
Pour arrêter de suivre la configuration, appuyez sur Control+C.
Vérifier que le cluster est opérationnel
Dans Cloud Shell, vérifiez que le cluster est prêt en vous connectant au nœud de connexion à l'aide de la commande suivante :
export CLUSTER_LOGIN_NODE=$(gcloud compute instances list \ --zones ${CLUSTER_ZONE} \ --filter="name ~ .*login." \ --format="value(name)" | head -n1) gcloud compute ssh ${CLUSTER_LOGIN_NODE} \ --zone $CLUSTER_ZONE
Le cluster est prêt lorsque le résultat de la commande ressemble à ceci :
SSSSSSS SSSSSSSSS SSSSSSSSS SSSSSSSSS SSSS SSSSSSS SSSS SSSSSS SSSSSS SSSSSS SSSSSSS SSSSSS SSSS SSSSSSSSS SSSS SSS SSSSSSSSS SSS SSSSS SSSS SSSSSSSSS SSSS SSSSS SSS SSSSSS SSSSSSSSS SSSSSS SSS SSSSSS SSSSSSS SSSSSS SSS SSSSSS SSSSSS SSS SSSSS SSSS SSSSSSS SSSS SSSSS S SSS SSSSSSSSS SSS S SSS SSSS SSSSSSSSS SSSS SSS S SSS SSSSSS SSSSSSSSS SSSSSS SSS S SSSSS SSSSSS SSSSSSSSS SSSSSS SSSSS S SSSSS SSSS SSSSSSS SSSS SSSSS S S SSS SSS SSS SSS S S S S S SSS SSS SSS SSS SSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSS SSSSSSSSSSSSSSSSSSSS SSSSSSSSSSSSS SSS SSSS SSSS SSSSSSSSSS SSSSSSSSSSSSSSSSSSSSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSS SSS SSSS SSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSSS SSS SSSSSSSSSSSSSSS SSSS SSSS SSSS SSSS SSSSSSSSSSSS SSS SSSSSSSSSSSSS SSSS SSSS SSSS SSSS
Pour quitter le cluster, appuyez sur
Control+D
.Lorsque le cluster est prêt, planifiez une tâche pour vérifier qu'il fonctionne correctement. Cette tâche exécute la commande
hostname
sur plusieurs nœuds du cluster.gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'sbatch -N2 --wrap="srun hostname"' --zone $CLUSTER_ZONE gcloud compute ssh ${CLUSTER_NAME}-login1 \ --command 'cat slurm-*.out' --zone $CLUSTER_ZONE
Le résultat ressemble à ce qui suit :
helloworld-compute1 helloworld-compute2
Votre cluster est maintenant opérationnel.
Procéder à l'autoscaling du cluster Slurm
Lorsque vous déployez un cluster Slurm, vous spécifiez des valeurs pour les propriétés max_node_count
et static_node_count
. La valeur max_node_count
détermine le nombre maximal de nœuds de calcul que votre cluster peut exécuter.
La valeur static_node_count
indique le nombre de nœuds de calcul qui restent toujours en cours d'exécution. Par défaut, dans le fichier slurm-cluster.yaml
, max_node_count
est défini sur 10
et static_node_count
sur 2
.
La différence entre ces deux nombres, max_node_count
- static_node_count
, correspond au nombre de nœuds éphémères dans le cluster. Les nœuds éphémères sont créés à la demande en réponse aux requêtes de planification des tâches. Une fois que la tâche pour laquelle ils ont été créés se termine, ils sont détruits, sauf si le cluster peut les réutiliser pour exécuter d'autres tâches. Sur Google Cloud, le mécanisme d'économie d'énergie de Slurm procède à l'autoscaling des clusters en n'instanciant des nœuds éphémères que lorsque c'est nécessaire.
Dans Cloud Shell, affichez le nombre de nœuds à l'aide de la commande suivante :
sinfo
Le résultat ressemble à ce qui suit :
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 8 idle~ demo-compute[3-10] debug* up infinite 2 idle demo-compute[1-2]
Sur la première ligne, le suffixe
~
de la valeuridle
dans la colonneSTATE
indique que les huit nœuds éphémères sont en mode économie d'énergie.Pour procéder à l'autoscaling du cluster, créez trois nœuds éphémères à l'aide de la commande suivante :
sbatch -N5 --wrap="srun hostname"
Le résultat ressemble à ce qui suit :
Submitted batch job JOB_ID
Affichez à nouveau le nombre de nœuds à l'aide de la commande suivante :
sinfo
Le résultat ressemble à ce qui suit :
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 3 alloc# demo-compute[3-5] debug* up infinite 5 idle~ demo-compute[6-10] debug* up infinite 2 idle demo-compute[1-2]
Sur la première ligne, le suffixe
#
de la valeuralloc
dans la colonneSTATE
indique que trois nœuds éphémères ont été créés. Une fois que ces nœuds supplémentaires ont été créés et configurés, ils exécutent la tâche, puis sont détruits après un court délai.
Nettoyer
Le moyen le plus simple d'éviter la facturation consiste à supprimer le projet Cloud que vous avez créé pour le tutoriel. Vous pouvez également supprimer les différentes ressources.Supprimer le projet
- Dans Cloud Console, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer le cluster Slurm
Supprimez le cluster à l'aide de la commande suivante :
gcloud deployment-manager deployments delete slurm
Étape suivante
- Testez d'autres fonctionnalités de Google Cloud. Découvrez nos tutoriels.