我们的节点在我们的集群中被命名为node001...。node0xx我想知道,是否可以使用 Slurm 的sbatch命令将作业提交到特定节点?如果是这样,有人可以为此发布示例代码吗?
使用 运行 SLURM 作业时sbatch,slurm 会生成一个标准输出文件,看起来像 slurm-102432.out (slurm-jobid.out)。我想将此自定义为 (yyyymmddhhmmss-jobid-jobname.txt)。我该怎么做?
或者更一般地说,我如何在sbatch参数中包含计算变量-o?
我在我的 script.sh 中尝试了以下内容
#SBATCH -p core
#SBATCH -n 6
#SBATCH -t 1:00:00
#SBATCH -J indexing
#SBATCH -o "/home/user/slurm/$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt"
Run Code Online (Sandbox Code Playgroud)
但这没有用。文件在新目录中的位置是正确的,但文件名只是文字 line $(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt。
所以,我正在寻找一种方法来将标准输出文件保存在/home/user/slurm/一个文件名如下的目录中:20160526093322-10453-indexing.txt
我提交了很多带有调试时间限制的 SLURM 作业脚本(我忘记更改实际运行的时间)。现在它们都是同时提交的,所以它们都以作业 ID 197xxxxx 开头。现在,我可以
squeue -u $USER | grep 197 | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
打印我要删除的作业 ID。但是我如何在所有这些 ID 上使用 scancel 命令。上面 shell 命令的输出看起来像
19726664
19726663
19726662
19726661
19726660
19726659
19726658
19726657
19726656
19726655
19726654
19726653
19726652
19726651
19726650
Run Code Online (Sandbox Code Playgroud) 我已经在 Slurm 上提交了 800 个工作。我想取消那些作业 ID/编号大于数字的作业(因为它们有错误)。我不想取消我所有的作业,因为有些正在运行,有些在队列中是正确的。
我正在尝试在使用 Slurm 工作负载管理器的 HPC 上使用 GNU Parallel 分发独立运行的进程。简而言之,这是数据分析的设置:
脚本#1:myCommands
./myscript --input infile.txt --setting 1 --output out1
./myscript --input infile.txt --setting 2 --output out2
./myscript --input infile.txt --setting 3 --output out3
./myscript --input infile.txt --setting 4 --output out4
Run Code Online (Sandbox Code Playgroud)
脚本#2:run.sh
#SBATCH --time=00:02:00
#SBATCH --nodes=2
#SBATCH --cpus-per-task=2
cat myCommands | parallel -j 4
Run Code Online (Sandbox Code Playgroud)
这是可行的,但它只使用一个节点。该节点上的两个核心被分为 4 个线程,以便根据并行请求为 4 个作业腾出空间。这是不可取的。
我的搜索表明我需要 anodefile和 asshloginfile来完成此操作,但我在网上没有看到与 一起使用的示例Slurm,仅与PBSsystem.
如何使脚本 (1) 使用两个节点,并且 (2) 不将核心拆分为线程?
如何以编程方式访问 SLURM 环境变量,例如MaxArraySize或MaxJobCount?我想将我的作业数组划分为允许的最大大小的块。可以使用 SLURM 的任何命令查询此信息吗?到目前为止,我还没有在网上找到这方面的相关信息。slurm.conf在每台机器上查找并从中提取相关行并不是一个非常可靠的解决方案。
我正在一台服务器上安装 slurm,用于一小群人之间的调度目的。现在没有,也永远不会有扩展到这个单一节点之外的意图。
在这种情况下,munge 仍然是安全性的要求吗?还是 slurm 管理的多节点集群特别需要 munge?
我想继续监视像集群这样的 slurm 工作负载上的特定作业。我尝试使用watch命令和grep特定的id. 如果工作 id 是4138,我试过
$> watch squeue -u mnyber004 | grep 4138
$> squeue -u mnyber004 | watch grep 4138
Run Code Online (Sandbox Code Playgroud)
但它们不起作用。第二个命令在前几秒钟有效,但在watch刷新时停止工作。
请有更好的主意吗?
我是使用 .sh 脚本的初学者,所以请原谅我的无知。这是我的问题:
要将我的作业提交到我们的集群,相应的提交文件必须包含一个“slurm header”,看起来像这样。
#!/bin/sh
#
########## Begin Slurm header ##########
#
#SBATCH --job-name=blabla
#
########### End Slurm header ##########
# Load module
module load math/matlab/R2020a
# Start a Matlab program
matlab -nodesktop -r "program $1 $2"
exit
Run Code Online (Sandbox Code Playgroud)
请注意,我将两个参数传递给该 .sh 文件,然后将其传递给 matlab 程序。如何根据输入参数使 Slurm 标头中的作业名称动态化?
简单地写出#SBATCH --job-name=blabla$1$2可预测的内容是行不通的。
Slurm 是工作负载管理器。有两种运行作业的模式,交互(srun)和批处理模式(sbatch)。
使用交互模式时,需要让终端保持打开状态,这可能会给远程终端(笔记本电脑)带来额外的负担。
但是sbatch模式只需要提交bash脚本(*.sh)就可以关闭远程终端。以下所有步骤均由计算节点处理。
当我运行可执行程序时,它提示“所有文件名都正确吗?” 并期待“是”。我想要的是脚本在运行 *.sh 文件时自动为这个提示输入“是”,以便程序可以在没有交互的情况下继续。
如果您需要任何进一步的说明,请告诉我。
slurm ×10
bash ×3
cluster ×3
command-line ×2
gnu-parallel ×1
linux ×1
pipe ×1
shell ×1
shell-script ×1
user-input ×1
watch ×1