对于 slurm 作业,环境变量
$SLURM_JOB_NUM_NODES
给出请求的节点数量。
是否有类似的变量可以给出请求的运行时间?我找不到答案,我尝试了
$SLURM_JOB_TIME
、$SLURM_TIME
和$SLURM_SUBMIT_TIME
,但这些都不起作用。
最终目标是让我运行的脚本知道运行了多少时间,请参阅下面的示例:
#!/bin/bash
#SBATCH --account=abc
#SBATCH --time=1:00:00
#SBATCH --job-name=xyz
#SBATCH --nodes=2
#SBATCH --tasks-per-node=1
python my_python_script.py --run_time $SLURM_JOB_TIME --run_nodes $SLURM_JOB_NUM_NODES
Slurm 作业中设置的环境变量称为 输出环境变量 ;它们列在 sbatch 手册页中。
在请求的时间内不存在此类变量。
在提交脚本中,您可以使用
squeue
查询 Slurm 控制器的信息。你的脚本可能看起来像
TIME=$(squeue -j $SLURM_JOB_ID -h --Format TimeLimit)
python my_python_script.py --run_time $TIME --run_nodes $SLURM_JOB_NUM_NODES
作为补充说明,即使接受的解决方案工作得很好,也可以在 slurm 启动器中执行以下操作:
export grepScontrol=$(scontrol show job $SLURM_JOB_ID | grep "TimeLimit")
job_time_limit=$(echo ${grepScontrol} | awk -F'[ =]' '{for(i=1; i<=NF; i++) if($i=="TimeLimit") print $(i+1)}')
在 python 中,您可以像这样访问环境变量:
import os
time_limit = os.environ.get('time_limit')
hours, minutes, seconds = [int(part) for part in duration_str.split(":")]