Déployer un cluster Slurm sur Compute Engine

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.

Schéma montrant l'architecture d'un cluster Slurm installé sur Compute Engine.

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

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activer les API Compute Engine and Deployment Manager.

    Activer les API

  5. Dans Cloud Console, activez Cloud Shell.

    Activer 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

  1. Dans Cloud Shell, clonez le dépôt GitHub slurm-gcp :

    git clone https://github.com/SchedMD/slurm-gcp.git
    
  2. 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.
  3. Dans le dossier slurm-gcp, copiez le fichier slurm-cluster.yaml dans le fichier ${CLUSTER_DEPLOY_NAME}.yaml :

    cd slurm-gcp
    cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
    
  4. Dans un éditeur de texte, modifiez le fichier ${CLUSTER_DEPLOY_NAME}.yaml pour l'adapter à votre environnement. Utilisez les types définis dans le fichier slurm.jinja.schema. (Il contient les valeurs par défaut et les valeurs autorisées pour toutes les propriétés de configuration, à l'exception de default_users.) Au minimum, apportez au fichier les modifications suivantes :

    • cluster_name : indiquez le nom de votre cluster cluster-name.
    • region et zone : spécifiez cluster-region et cluster-zone.
    • compute_machine_type (facultatif) : vous pouvez modifier la valeur de compute_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éfaut n1-standard-2, spécifiez n1-standard-4 à la place. Pour en savoir plus, reportez-vous à la page Types de machines.
    • vpc_net et vpc_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 fichier slurm.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.
  5. Enregistrez le fichier.

Déployer le cluster Slurm à l'aide de Deployment Manager

  1. 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
    
  2. 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.
    
  3. Pour arrêter de suivre la configuration, appuyez sur Control+C.

Vérifier que le cluster est opérationnel

  1. 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
    
  2. Pour quitter le cluster, appuyez sur Control+D.

  3. 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.

  1. 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 valeur idle dans la colonne STATE indique que les huit nœuds éphémères sont en mode économie d'énergie.

  2. 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
    
  3. 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 valeur alloc dans la colonne STATE 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

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. 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.