超算小站 超算小站
首页
  • 注册账号
  • 登录系统
  • 熟悉系统
  • 配置环境
  • 数据管理
  • 作业管理
  • 集群软件环境:

    • 01.编译环境
    • 02.基础库
    • 03.应用软件
    • 04.工具软件
    • 05.常用语言环境
    • 06.使用进阶
  • 入门课程

    • 01.超算历史
    • 02.VPN登录
    • 03.Mobaxterm工具
    • 04.Linux基本命令
    • 05.Module环境变量管理工具
    • 06.Vim文本编辑器使用
    • 07.Slurm作业管理系统
HPC&AI
  • 01.登录问题
  • 02.编译问题
  • 03.作业问题
  • 04.存储和数据问题
  • 05.GPU问题
资料下载
归档
关于我
🚀试用
首页
  • 注册账号
  • 登录系统
  • 熟悉系统
  • 配置环境
  • 数据管理
  • 作业管理
  • 集群软件环境:

    • 01.编译环境
    • 02.基础库
    • 03.应用软件
    • 04.工具软件
    • 05.常用语言环境
    • 06.使用进阶
  • 入门课程

    • 01.超算历史
    • 02.VPN登录
    • 03.Mobaxterm工具
    • 04.Linux基本命令
    • 05.Module环境变量管理工具
    • 06.Vim文本编辑器使用
    • 07.Slurm作业管理系统
HPC&AI
  • 01.登录问题
  • 02.编译问题
  • 03.作业问题
  • 04.存储和数据问题
  • 05.GPU问题
资料下载
归档
关于我
🚀试用
  • 登陆问题

  • 编译问题

  • 作业问题

    • 作业提交常见问题汇总
    • SLURM作业计算顺序的调整方法
    • slurm作业管理:一次提交运行多个任务
    • slurm作业管理:一行yhrun命令加载多个作业步
    • slurm的内置环境变量
      • 常用内置变量
      • 使用yhcontrol获得节点列表
      • 使用yhrun获得节点列表
    • 如何设置环境变量
  • 存储和数据问题

  • GPU问题

  • 常见问题
  • 作业问题
mrzhenggang
2020-11-18
目录

slurm的内置环境变量

# slurm的内置环境变量

# 常用内置变量

通过slurm作业调度系统提交的任务,会分配一个jobid号,与这个任务相关的SLURM环境变量,可以通过以SLURM_*开头的一些内置变量进行查看和使用。

常用内置变量如下:

变量名 含义 备注
SLURM_JOB_NAME 任务名 默认为提交时的脚本名, 可以用-J参数进行设置
SLURM_NNODES 分配的节点数 常用,与-N参数含义相同
SLURM_JOBID 分配的任务编号
SLURM_NTASKS 分配的task数
SLURM_TASKS_PER_NODE 每个节点分配的task数
SLURM_JOB_ID 分配的任务编号
SLURM_SUBMIT_DIR 提交作业时的工作目录
SLURM_NPROCS 加载的进程数 常用,与-n参数含义相同
SLURM_CPUS_ON_NODE 节点的CPU核心数
SLURM_JOB_NODELIST 任务的节点列表 常用,使用yhq命令查询到的节点列表
SLURM_JOB_CPUS_PER_NODE 每个节点的CPU核心数
SLURM_SUBMIT_HOST 提交任务的节点名 通常为某个登录节点,如ln2
SLURM_JOB_NUM_NODES 节点的任务数量

我们可以尝试编写一个脚本文件slurm-env.sh来测试一下看看:

#!/bin/bash
echo $SLURM_JOB_NAME
echo $SLURM_NNODES
echo $SLURM_JOBID
echo $SLURM_NTASKS
echo $SLURM_TASKS_PER_NODE
echo $SLURM_JOB_ID
echo $SLURM_SUBMIT_DIR
echo $SLURM_NPROCS
echo $SLURM_CPUS_ON_NODE
echo $SLURM_JOB_NODELIST
echo $SLURM_JOB_CPUS_PER_NODE
echo $SLURM_SUBMIT_HOST
echo $SLURM_JOB_NUM_NODES
1
2
3
4
5
6
7
8
9
10
11
12
13
14

然后使用 yhbatch 命令提交任务:

yhbatch -N 2 -n 4 -p debug slurm-env.sh
1

然后检查 slurm-jobid.out 文件,应该与下方内容相似:

SLURM_JOB_NAME=slurm-env.sh
SLURM_NNODES=2
SLURM_JOBID=17603587
SLURM_NTASKS=4
SLURM_TASKS_PER_NODE=2(x2)
SLURM_JOB_ID=17603587
SLURM_SUBMIT_DIR=/vol-th/home/zhenggang/workdir/slurm
SLURM_NPROCS=4
SLURM_CPUS_ON_NODE=12
SLURM_JOB_NODELIST=cn[13-14]
SLURM_JOB_CPUS_PER_NODE=12(x2)
SLURM_SUBMIT_HOST=ln3
SLURM_JOB_NUM_NODES=2
1
2
3
4
5
6
7
8
9
10
11
12
13

这样,我们就可以在任务脚本中直接使用这些内置变量进行相关操作了。

# 使用yhcontrol获得节点列表

默认使用yhrun命令运行程序时,用户并不需要关心所使用的节点编号。

当用户需要节点编号,或者使用如mpirun等命令需要配置如hostfile文件时,可以在编写的脚本中,使用相关命令生成节点编号文件,进而使用。举例如下:

# get hostname list 
yhcontrol show hostname $SLURM_NODELIST | sort > SLURM_NODEFILE
# run job
mpirun -np $SLURM_NPROCS -machinefile SLURM_NODEFILE $EXEC
1
2
3
4

说明:

  1. 第一行:yhcontrol show hostnames $SLURM_NODELIST 是将 SLURM_NODELIST 变量中的节点名展开显示, sort 命令是进行排序, > SLURM_NODEFILE 用于定向输出到 SLURM_NODEFILE 文件中
  2. 第二行:mpirun命令运行,使用-np $SLURM_NPROCS 个进程,指明-machinefile SLURM_NODEFILE 文件为节点信息文件

这样就可以自动获得节点编号配置文件,并设置给mpirun命令使用了。

警告

我们发现:SLURM_NODELIST 变量在 csh 环境下未定义,因此下面给出另一种方法,适用于各种 shell 环境

# 使用yhrun获得节点列表

有用户反映,在csh下,yhcontrol 命令无法正确获得节点列表,我们可以使用yhrun命令获得。

例如:

# get hostname list 
yhrun -N $SLURM_NNODES -n $SLURM_NNODES hostname | sort > SLURM_NODEFILE
# run job
mpirun -np $SLURM_NPROCS -machinefile SLURM_NODEFILE $EXEC
1
2
3
4

说明:

  1. 第一行:使用yhrun命令并行执行hostname命令,会显示各个节点的主机名,进行排序后,定向输出到 SLURM_NODEFILE 文件中即可
  2. 第二行:与yhcontrol方法相同(见上一节)
slurm作业管理:一行yhrun命令加载多个作业步
如何设置环境变量

← slurm作业管理:一行yhrun命令加载多个作业步 如何设置环境变量→

Theme by Vdoing | Copyright © 2015-2024 Zheng Gang | MIT License | 津ICP备2021008634号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×