Interfaz de biblioteca y línea de comandos para admitir interactuar con múltiples clústeres de HPC
Proporciona la capacidad de interactuar con los sistemas de programación de trabajo HPC más populares utilizando una sola interfaz y permite la creación de scripts de envío de trabajo.
Probado con SGE, LSF y SLURM (soporte de PBS/torque en desarrollo)
MyCluster se puede instalar desde PYPI.
pip install mycluster
MyCluster escribirá su dirección de correo electrónico en cualquier archivo de envío para que pueda recibir actualizaciones de los programadores. Puede suministrar esto en la línea de comando o almacenarlo en un archivo de configuración. Para almacenar su correo electrónico en el archivo de configuración ejecutado:
mycluster configure
Por defecto, MyCluster intentará detectar el programador subyacente, pero esto se puede anular configurando la variable de entorno myCluster_Sched. Esto debe establecerse en un nombre de cadena de una clase de Python que implementa la clase mycluster.schedulers.base.Scheduler .
En algunos casos, es posible que desee anular las plantillas de envío, por ejemplo, si desea incluir parámetros adicionales o comandos de programador. Para hacer esto, establezca la variable de entorno myCluster_Template en la plantilla Jinja que desea usar. Consulte MyCluster/Schedulers/Plantillas para las plantillas base.
MyClusyter instala el comando CLI "MyCluster" para interactuar con el planificador local a través de la línea de comandos.
Ayuda del comando de impresión
mycluster <command> --help
Enumere todas las colas
mycluster queues
Lista de trabajos
mycluster list
Cree un nuevo archivo de envío, consulte --help para obtener más opciones de envío.
mycluster create JOBFILE QUEUE RUNSCRIPT
Enviar un archivo de trabajo
mycluster submit JOBFILE
Cancelar un trabajo
mycluster cancel JOBID
El RunScript para ser ejecutado por el Job_script puede hacer uso de las siguientes variables de entorno predefinidas
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 se puede usar programáticamente utilizando el módulo MyCluster. Todos los programadores implementan la clase base 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 )