Interface de biblioteca e linha de comando para apoiar a interação com vários clusters de HPC
Fornece a capacidade de interagir com os sistemas de agendamento de tarefas mais populares do HPC usando uma única interface e permite a criação de scripts de envio de empregos.
Testado com SGE, LSF e SLURM (suporte PBS/Torque em desenvolvimento)
O MyCluster pode ser instalado a partir do Pypi.
pip install mycluster
O MyCluster escreverá seu endereço de e -mail em qualquer arquivo de envio para que você possa receber atualizações dos agendadores. Você pode fornecer isso na linha de comando ou armazená -lo em um arquivo de configuração. Para armazenar seu e -mail no arquivo de configuração Executar:
mycluster configure
Por padrão, o MyCluster tentará detectar o agendador subjacente, mas isso pode ser substituído definindo a variável de ambiente mycluster_sched. Isso deve ser definido como um nome de string de uma classe python que implementa a classe mycluster.schedulers.base.Scheduler .
Em alguns casos, você pode substituir os modelos de envio, por exemplo, se deseja incluir parâmetros adicionais ou comandos de agendadores. Para fazer isso, defina a variável de ambiente mycluster_template no modelo Jinja que você deseja usar. Consulte MyCluster/Schedulers/Modelos para os modelos básicos.
O MyClusyter instala o comando "mycluster" da CLI para interagir com o agendador local através da linha de comando.
Imprima ajuda do comando
mycluster <command> --help
Liste todas as filas
mycluster queues
Listar trabalhos
mycluster list
Crie um novo arquivo de envio, consulte -Help para obter mais opções de envio.
mycluster create JOBFILE QUEUE RUNSCRIPT
Envie um arquivo de emprego
mycluster submit JOBFILE
Cancelar um emprego
mycluster cancel JOBID
O RunScript a ser executado pelo Job_script pode usar as seguintes variáveis de ambiente predefinido
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 " O MyCluster pode ser usado programaticamente usando o módulo MyCluster. Todos os agendadores implementam a 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 )