Bibliothèque et interface de ligne de commande pour prendre en charge l'interaction avec plusieurs clusters HPC
Fournit la possibilité d'interagir avec les systèmes de planification de travail HPC les plus populaires en utilisant une seule interface et permet la création de scripts de soumission de travail.
Testé avec SGE, LSF et Slurm (PBS / Support de couple en cours de développement)
MyCluster peut être installé à partir de PYPI.
pip install mycluster
MyCluster écrira votre adresse e-mail dans tous les fichiers de soumission afin que vous puissiez recevoir des mises à jour des planificateurs. Vous pouvez le fournir sur la ligne de commande ou le stocker dans un fichier de configuration. Pour stocker votre e-mail dans le fichier de configuration Exécuter:
mycluster configure
Par défaut, MyCluster essaiera de détecter le planificateur sous-jacent, mais cela peut être remplacé en définissant la variable d'environnement MyCluster_Sched. Cela devrait être défini sur un nom de chaîne d'une classe Python qui implémente la classe mycluster.schedulers.base.Scheduler .
Dans certains cas, vous souhaiterez peut-être remplacer les modèles de soumission, par exemple si vous souhaitez inclure des paramètres ou des commandes de planificateur supplémentaires. Pour ce faire, définissez la variable d'environnement MyCluster_Template sur le modèle Jinja que vous souhaitez utiliser. Voir MyCluster / Schedulers / Modèles pour les modèles de base.
MyClusyter installe la commande CLI "myCluster" pour interagir avec le planificateur local via la ligne de commande.
Aide à la commande d'impression
mycluster <command> --help
Énumérez toutes les files d'attente
mycluster queues
Lister des emplois
mycluster list
Créez un nouveau fichier de soumission, voir --help pour plus d'options de soumission.
mycluster create JOBFILE QUEUE RUNSCRIPT
Soumettre un dossier d'emploi
mycluster submit JOBFILE
Annuler un emploi
mycluster cancel JOBID
Le runscript à exécuter par le travail_script peut utiliser les variables d'environnement prédéfinies suivantes
export NUM_TASKS=
export TASKS_PER_NODE=
export THREADS_PER_TASK=
export NUM_NODES=
# OpenMP configuration
export OMP_NUM_THREADS= $THREADS_PER_TASK
# Default mpiexec commnads for each flavour of mpi
export OMPI_CMD= " mpiexec -n $NUM_TASKS -npernode $TASKS_PER_NODE -bysocket -bind-to-socket "
export MVAPICH_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE -bind-to-socket "
export IMPI_CMD= " mpiexec -n $NUM_TASKS -ppn $TASKS_PER_NODE " MyCluster peut être utilisé par programmation à l'aide du module MyCluster. Tous les planificateurs implémentent la classe mycluster.schedulers.base.Scheduler .
import mycluster
# Detect the local scheduler
scheduler = mycluster . detect_scheduling_sys ()
print ( f"Scheduler loaded: { scheduler . scheduler_type () } " )
# Create a batch script to submit a 48 task run of script.sh to the skylake queue
script = scheduler . create ( "skylake" , 48 , "my_job" , "script.sh" , "01:00:00" , tasks_per_node = 24 )
# Write to a file
with open ( "mysub.job" , "w" ) as f :
f . write ( script )
# Submit the batch script
job_id = scheduler . submit ( "mysub.job" )
# Check the status of the job
print ( scheduler . get_job_details ( job_id ))
# Cancel the job
scheduler . delete ( job_id )