请求时间的 Slurm 环境变量

问题描述 投票:0回答:2

对于 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
2个回答
4
投票

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

0
投票

作为补充说明,即使接受的解决方案工作得很好,也可以在 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(":")]
© www.soinside.com 2019 - 2024. All rights reserved.