我搜索过谷歌并阅读文档.
我的本地群集正在使用SLURM.我想检查以下内容:每个节点有多少个核心?保留队列中的每个作业有多少个核心?
任何建议将不胜感激!
我正在使用 Slurm 作业调度程序在集群上运行我的作业。使用 Apache Airflow 提交 Slurm 作业并检查其状态的最有效方法是什么?
我能够使用 SSHOperator 远程提交我的工作并每分钟检查一次他们的状态,直到完成,但我想知道是否有人知道更好的方法。下面是我写的SSHOperator。
sshHook = SSHHook(ssh_conn_id='my_conn_id',keepalive_interval=240)
task_ssh_bash = """
cd ~/projects &&
JID=$(sbatch myjob.sh)
echo $JID
sleep 10s # needed
ST="PENDING"
while [ "$ST" != "COMPLETED" ] ; do
ST=$(sacct -j ${JID##* } -o State | awk 'FNR == 3 {print $1}')
sleep 1m
if [ "$ST" == "FAILED" ]; then
echo 'Job final status:' $ST, exiting...
exit 122
fi
echo $ST
"""
task_ssh = SSHOperator(
task_id='test_ssh_operator',
ssh_hook=sshHook,
do_xcom_push=True,
command=task_ssh_bash,
dag=dag)
Run Code Online (Sandbox Code Playgroud) 您好,当我在 slurm 中运行工作时收到此消息,这是什么意思?tensorflow/core/platform/default/subprocess.cc:304]启动无法生成子进程:没有这样的文件或目录
我注意到seq我的一台计算机上出现了一个奇怪的行为(Ubuntu LTS 14.04):它不使用点作为小数分隔符,而是使用逗号:
seq 0. 0.1 0.2
0,0
0,1
0,2
Run Code Online (Sandbox Code Playgroud)
我的另一台PC上相同版本的seq(8.21)给出了正常点(也是相同的Ubuntu版本).最奇怪的是,当我从第一台机器进入ssh时,我在远程机器上观察到同样的不良行为.即使是从冲突机器提交到远程机器上的作业调度程序(slurm)的bash脚本也存在这个问题.我很迷茫.为什么(以及如何!)发生这种情况?
我正在尝试使用批处理脚本启动大量作业步骤.不同的步骤可以是完全不同的程序,并且每个步骤只需要一个CPU.首先,我尝试使用--multi-prog参数来执行此操作srun.不幸的是,当以这种方式使用分配给我的作业的所有CPU时,性能会大幅降低.运行时间几乎增加到序列化值.通过订阅我可以改善这一点.我在网上找不到关于这个问题的任何内容,所以我认为它是我正在使用的集群的配置问题.
所以我试着走另一条路.我实现了以下脚本(通过启动sbatch my_script.slurm):
#!/bin/bash
#SBATCH -o $HOME/slurm/slurm_out/%j.%N.out
#SBATCH --error=$HOME/slurm/slurm_out/%j.%N.err_out
#SBATCH --get-user-env
#SBATCH -J test
#SBATCH -D $HOME/slurm
#SBATCH --export=NONE
#SBATCH --ntasks=48
NR_PROCS=$(($SLURM_NTASKS))
for PROC in $(seq 0 $(($NR_PROCS-1)));
do
#My call looks like this:
#srun --exclusive -n1 bash $PROJECT/call_shells/call_"$PROC".sh &
srun --exclusive -n1 hostname &
pids[${PROC}]=$! #Save PID of this background process
done
for pid in ${pids[*]};
do
wait ${pid} #Wait on all PIDs, this returns 0 if ANY process fails
done
Run Code Online (Sandbox Code Playgroud)
我知道,--exclusive …
bsub与 LSF 一起使用时,该-o选项提供了许多详细信息,例如作业何时开始和结束以及作业占用了多少内存和 CPU 时间。使用 SLURM,我得到的只是在没有 LSF 的情况下运行脚本时得到的相同标准输出。
例如,给定这个 Perl 6 脚本:
warn "standard error stream";
say "standard output stream";
Run Code Online (Sandbox Code Playgroud)
提交如下:
sbatch -o test.o%j -e test.e%j -J test_warn --wrap 'perl6 test.p6'
Run Code Online (Sandbox Code Playgroud)
结果在文件中test.o34380:
Testing standard output
Run Code Online (Sandbox Code Playgroud)
和文件test.e34380:
Testing standard Error in block <unit> at test.p6:2
Run Code Online (Sandbox Code Playgroud)
使用 LSF,我会在标准输出文件中获得各种详细信息,例如:
Sender: LSF System <lsfadmin@my_node>
Subject: Job 347511: <test> Done
Job <test> was submitted from host <my_cluster> by user <username> in cluster <my_cluster_act>.
Job was executed on host(s) …Run Code Online (Sandbox Code Playgroud) 我有以下脚本用slurm提交作业:
#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name
#SBATCH -n 1 #Number of processors
#SBATCH -p CA
nwchem $1 > $2
Run Code Online (Sandbox Code Playgroud)
第一个参数($ 1)是我的输入,第二个($ 2)我的输出,我想第三个($ 3)确实是我的工作名称.如果我喜欢这样,那么工作名称是'$ 3'.我怎样才能将作业名称作为脚本的参数?
谢谢
我slurm在群集上使用来运行作业并提交如下所示的脚本sbatch:
#!/usr/bin/env bash
#SBATCH -o slurm.sh.out
#SBATCH -p defq
#SBATCH --mail-type=ALL
#SBATCH --mail-user=my.email@something.com
echo "hello"
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式注释掉#SBATCH一行,例如#SBATCH --mail-user=my.email@something.com在这个脚本中吗?由于slurm指令是bash注释本身,我不知道如何实现这一点.
在sbatch脚本中,您可以直接启动程序或脚本(例如,可执行文件myapp),但是在许多教程中,人们会使用它们srun myapp。
尽管阅读了有关该主题的一些文档,但我不了解它们的区别以及何时使用这些语法。
我希望这个问题足够精确(关于SO的第一个问题),在此先感谢您的回答。
Unable to setup slurmdbd plugin.
The SLURM installation works fine
Set AccountingStorageType=accounting_storage/slurmdbd in the /etc/slurm/slurm.conf
When I do sacctmgr list cluster it gives:
sacctmgr: error: slurm_persist_conn_open_without_init: failed to open persistent connection to localhost:6819: Connection refused
sacctmgr: error: slurmdbd: Sending PersistInit msg: Connection refused
sacctmgr: error: Problem talking to the database: Connection refused
Run Code Online (Sandbox Code Playgroud)