OpenPBS

OpenPBS peut facilement être activé sur un cluster CycleCloud en modifiant le « run_list » dans la section de configuration de votre définition de cluster. Les deux composants de base d’un cluster PBS Professional sont le nœud « maître » qui fournit un système de fichiers partagé sur lequel le logiciel PBS Professionnel s’exécute, et les nœuds « execute » qui sont les hôtes qui montent le système de fichiers partagé et exécutent les travaux envoyés. Par exemple, un extrait de modèle de cluster simple peut ressembler à ceci :

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

L’importation et le démarrage d’un cluster avec une définition dans CycleCloud génère un nœud « maître » unique. Les nœuds d’exécution peuvent être ajoutés au cluster via la cyclecloud add_node commande. Par exemple, pour ajouter 10 nœuds d’exécution supplémentaires :

cyclecloud add_node my-pbspro -t execute -c 10

Mise à l’échelle automatique basée sur les ressources PBS

Cyclecloud gère deux ressources pour développer la fonctionnalité d’approvisionnement dynamique. Ces ressources sont nodearray et machinetype.

Si vous envoyez un travail et spécifiez une ressource nodearray, qsub -l nodearray=highmem -- /bin/hostname CycleCloud ajoute des nœuds au nœud nommé « highmem ». S’il n’existe aucun nœud de ce type, le travail reste inactif.

De même, si une ressource machinetype est spécifiée à laquelle une soumission de travail, par exemple qsub -l machinetype:Standard_L32s_v2 my-job.sh, CycleCloud met à l’échelle automatiquement le « Standard_L32s_v2 » dans le nœud « execute » (par défaut). Si ce type d’ordinateur n’est pas disponible dans le tableau de nœuds « execute », le travail reste inactif.

Ces ressources peuvent être utilisées en combinaison comme suit :

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

qui sera automatiquement mis à l’échelle uniquement si les machines « Standard_HB60rs » sont spécifiées dans un tableau de nœuds « hpc ».

Ajout de files d’attente supplémentaires affectées à nodearrays

Sur les clusters avec plusieurs nodearrays, il est courant de créer des files d’attente distinctes pour acheminer automatiquement les travaux vers le type de machine virtuelle approprié. Dans cet exemple, nous allons supposer que le nœud « gpu » suivant a été défini dans votre modèle de cluster :

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Après avoir importé le modèle de cluster et démarré le cluster, les commandes suivantes peuvent être exécutées sur le nœud du serveur pour créer la file d’attente « gpu » :

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Notes

La définition de file d’attente ci-dessus empaquetera toutes les machines virtuelles de la file d’attente dans un seul groupe de machines virtuelles identiques pour prendre en charge les travaux MPI. Pour définir la file d’attente pour les travaux série et autoriser plusieurs groupes de machines virtuelles identiques, définissez ungrouped = true à la fois pour les deux resources_default et default_chunk. Vous pouvez également définir resources_default.place = pack si vous souhaitez que le planificateur puisse empaqueter des travaux sur des machines virtuelles au lieu d’une allocation de tourniquet (round robin) des travaux. Pour plus d’informations sur la compression des travaux PBS, consultez la documentation officielle de PBS Professional OSS.

Informations de référence sur la configuration professionnelle PBS

Voici les options de configuration spécifiques de PBS Professional que vous pouvez basculer pour personnaliser les fonctionnalités :

PBS Pro Options Description
pbspro.slots Nombre d’emplacements pour un nœud donné à signaler à PBS Pro. Le nombre d’emplacements correspond au nombre de travaux simultanés qu’un nœud peut exécuter, cette valeur correspond par défaut au nombre de processeurs sur un ordinateur donné. Vous pouvez remplacer cette valeur dans les cas où vous n’exécutez pas de travaux basés sur l’UC, mais sur la mémoire, les GPU, etc.
pbspro.slot_type Nom du type « emplacement » fourni par un nœud. La valeur par défaut est « execute ». Lorsqu’un travail est étiqueté avec la ressource slot_type=<type>matérielle, ce travail s’exécute uniquement sur un ordinateur du même type d’emplacement. Cela vous permet de créer différentes configurations logicielles et matérielles par nœud et de vous assurer qu’un travail approprié est toujours planifié sur le type de nœud approprié.
pbspro.version Valeur par défaut : « 18.1.3-0 ». Il s’agit de la version PBS Professional à installer et à exécuter. Il s’agit actuellement de l’option par défaut et uniquement . Dans les prochaines versions supplémentaires du logiciel PBS Professional peuvent être prises en charge.

Connecter PBS avec CycleCloud

CycleCloud gère les clusters OpenPBS via un agent installable appelé azpbs. Cet agent se connecte à CycleCloud pour lire les configurations de cluster et de machine virtuelle et s’intègre également à OpenPBS pour traiter efficacement les informations du travail et de l’hôte. Toutes les azpbs configurations sont trouvées dans le autoscale.json fichier, normalement /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Fichiers importants

L’agent azpbs analyse la configuration PBS chaque fois qu’il est appelé : travaux, files d’attente, ressources. Les informations sont fournies dans stderr et stdout de la commande, ainsi qu’à un fichier journal, à des niveaux configurables. Toutes les commandes de gestion PBS (qcmd) avec des arguments sont également journalisées dans le fichier.

Tous ces fichiers se trouvent dans le répertoire /opt/cycle/pbspro/ où l’agent est installé.

Fichier Emplacement Description
Configuration de mise à l’échelle automatique autoscale.json Configuration de la mise à l’échelle automatique, de la carte des ressources, des informations d’accès CycleCloud
Journal de mise à l’échelle automatique autoscale.log Journalisation des threads principaux de l’agent, y compris la gestion des hôtes CycleCloud
Journal de la demande demand.log Journal détaillé pour la correspondance des ressources
qcmd Trace Log qcmd.log Journalisation des appels de l’agent qcmd
Configuration de journalisation logging.conf Configurations pour la journalisation des masques et des emplacements de fichiers

Définition des ressources OpenPBS

Ce projet permet une association générale de ressources OpenPBS avec des ressources de machine virtuelle Azure via le projet cyclecloud-pbspro (azpbs). Cette relation de ressource définie dans autoscale.json.

Les ressources par défaut définies avec le modèle de cluster que nous fournissons sont

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

La ressource OpenPBS nommée mem est équivalente à un attribut de nœud nommé node.memory, qui est la mémoire totale de n’importe quelle machine virtuelle. Cette configuration permet azpbs de traiter une demande de ressource, par -l mem=4gb exemple en comparant la valeur des besoins en ressources de travail aux ressources de nœud.

Notez que le disque est actuellement codé en size::20gdur sur . Voici un exemple de gestion de la taille de disque spécifique à la taille de disque de machine virtuelle

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Mise à l’échelle automatique et groupes identiques

CycleCloud traite les travaux de répartition et de série différemment dans les clusters OpenPBS. L’étendue des travaux atterrit sur les nœuds qui font partie du même groupe de placement. Le groupe de placement a une signification particulière (VirtualMachineScaleSet avec SinglePlacementGroup=true) et CC gère un groupe de placement nommé pour chaque ensemble de nœuds étendus. Utilisez la ressource group_id PBS pour ce nom de groupe de placement.

La hpc file d’attente ajoute l’équivalent en -l place=scatter:group=group_id utilisant les valeurs par défaut de la file d’attente native.

Installation de l’agent CycleCloud OpenPBS azpbs

Le cluster OpenPBS CycleCloud gère l’installation et la configuration de l’agent sur le nœud du serveur. La préparation comprend la définition des ressources PBS, des files d’attente et des hooks. Une installation scriptée peut également être effectuée en dehors de CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

CycleCloud prend en charge un ensemble standard d’attributs autostop parmi les planificateurs :

Attribut Description
cyclecloud.cluster.autoscale.stop_enabled L’arrêt automatique est-il activé sur ce nœud ? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Durée (en secondes) pendant laquelle un nœud doit rester inactif après avoir terminé les travaux avant qu’il ne soit réduit.
cyclecloud.cluster.autoscale.idle_time_before_jobs Durée (en secondes) pendant laquelle un nœud doit rester inactif avant d’effectuer des travaux avant qu’il ne soit réduit.

Notes

CycleCloud ne prend pas en charge la configuration de rafale avec Open PBS.

Notes

Même si Windows est une plateforme Open PBS officiellement prise en charge, CycleCloud ne prend pas en charge l’exécution d’Open PBS sur Windows à ce stade.