Slurm 作业,知道它在哪个节点上
Slurm job, knowing what node it is on
在 bash/slurm 中有没有办法让脚本知道它 运行 在哪个节点上?
所以我批处理了一个名为 wrapCode.sh 的 bash 脚本,我正在监视脚本时间以及它 运行 在哪个节点上。我知道如何监控脚本时间,但有没有办法在最后回显我在哪个节点上?
sstat 执行此操作,但我需要知道我的工作 ID 是什么,脚本似乎也不知道(或者至少我没能找到它)。
当您向网格提交作业时,您总是会收到一条消息,告诉您 JobID。如果您以交互方式执行此操作,您将看到类似这样的内容:
$ sbatch wrapCode.sh
Submitted batch job 106
因此,您可以编写一个简单的包装器 bash 脚本来完成作业提交并为您获取 JobID。之后,您可以使用 scontrol
命令获取有关作业(包括节点)的详细信息,如下所示:
#!/bin/bash
Command="sbatch wrapCode.sh"
Submit_Output="$($Command 2>&1)"
JobId=`echo $Submit_Output | grep 'Submitted batch job' | awk '{print }'`
echo $JobId
# --> Sleep here for a few seconds to wait until the job is actually launched
Host=`scontrol show job $JobId | grep ' NodeList' | awk -F'=' '{print }'`
echo $Host
一种简单但有效且经常使用的方法,用于在作业输出中写入 运行 要在哪个节点上添加
srun hostname
给它。作业 ID 也可以通过环境变量 SLURM_JOB_ID 从作业脚本中获得;所以你可以使用
sstat -j $SLURM_JOB_ID
在你的 slurm 脚本中获取你想要的信息。
您的作业的 jobid 可以在环境变量 SLURM_JOBID 中找到。
此变量在您提交作业时由 SLURM 自动设置。
至于查找节点的名称 运行ning 你的工作,这可以在环境变量 SLURMD_NODENAME 中找到。
变量SLURM_NODELIST会给你一个分配给作业的节点列表(除非你运行跨多个节点的作业,这将只包含一个名称)。
有很多变量包含您的工作信息,请参阅https://slurm.schedmd.com/sbatch.html#lbAH
从之前的答案中知道作业 ID,您还可以在终端中使用 sacct
来获取分配给您的作业的资源,包括节点名称:
sacct -j JOB_ID --format=JobID,Start,End,Elapsed,NCPUS,NodeList,NTasks
在 bash/slurm 中有没有办法让脚本知道它 运行 在哪个节点上?
所以我批处理了一个名为 wrapCode.sh 的 bash 脚本,我正在监视脚本时间以及它 运行 在哪个节点上。我知道如何监控脚本时间,但有没有办法在最后回显我在哪个节点上?
sstat 执行此操作,但我需要知道我的工作 ID 是什么,脚本似乎也不知道(或者至少我没能找到它)。
当您向网格提交作业时,您总是会收到一条消息,告诉您 JobID。如果您以交互方式执行此操作,您将看到类似这样的内容:
$ sbatch wrapCode.sh
Submitted batch job 106
因此,您可以编写一个简单的包装器 bash 脚本来完成作业提交并为您获取 JobID。之后,您可以使用 scontrol
命令获取有关作业(包括节点)的详细信息,如下所示:
#!/bin/bash
Command="sbatch wrapCode.sh"
Submit_Output="$($Command 2>&1)"
JobId=`echo $Submit_Output | grep 'Submitted batch job' | awk '{print }'`
echo $JobId
# --> Sleep here for a few seconds to wait until the job is actually launched
Host=`scontrol show job $JobId | grep ' NodeList' | awk -F'=' '{print }'`
echo $Host
一种简单但有效且经常使用的方法,用于在作业输出中写入 运行 要在哪个节点上添加
srun hostname
给它。作业 ID 也可以通过环境变量 SLURM_JOB_ID 从作业脚本中获得;所以你可以使用
sstat -j $SLURM_JOB_ID
在你的 slurm 脚本中获取你想要的信息。
您的作业的 jobid 可以在环境变量 SLURM_JOBID 中找到。 此变量在您提交作业时由 SLURM 自动设置。
至于查找节点的名称 运行ning 你的工作,这可以在环境变量 SLURMD_NODENAME 中找到。
变量SLURM_NODELIST会给你一个分配给作业的节点列表(除非你运行跨多个节点的作业,这将只包含一个名称)。
有很多变量包含您的工作信息,请参阅https://slurm.schedmd.com/sbatch.html#lbAH
从之前的答案中知道作业 ID,您还可以在终端中使用 sacct
来获取分配给您的作业的资源,包括节点名称:
sacct -j JOB_ID --format=JobID,Start,End,Elapsed,NCPUS,NodeList,NTasks