作业提交与管理(HPC二期)
在HPC二期平台中,作业可以通过Slurm调度器提交至集群,并根据一定规则分配资源调度计算。
更多关于Slurm命令用法请参考官方文档:Slurm Documentation
作业提交
作业默认最长运行7天,到期前可手动在平台延长7天。操作参考:作业延长
提交普通作业(命令行模式)
用户可以使用sbatch <params> <job_name>
命令提交作业,并指定参数
$sbatch -p acd_u --input=input.sh -o output_%j.txt -e err_%j.txt -n 8 --gres=gpu:1 job_script.sh
常用params :
-p acd_u:指定acd_u队列,全部队列信息请查看:集群队列/分区
--input input.sh:指定作业输入文件
-o output_%j.txt:指定作业标准输出文件,%j为作业号
-e err_%j.txt:指定作业标准错误输出文件
-n 8:指定CPU总核心数
--gres 1:指定GPU卡数
-w cpu1-1,cpu1-2:指定cpu1-1和cpu1-2节点,节点信息请使用sinfo
查看
-x "~cpu1-1":排除cpu1-1节点
-D /apps:指定作业执行路径为/apps;默认情况下,没有-D 选项时,作业的执行路径为作业的提交路径
提交普通作业(脚本模式)
除命令行提交外,用户可以通过脚本提交模式提交作业,方便用户管理作业提交参数和相关作业参数配置。将提交时需要指定的参数写到脚本中,用户可以批量重复使用该脚本,不用每次都指定参数。
-
脚本提交:
sbatch my_job.sh
-
脚本格式(my_job.sh):
#!/bin/bash
#SBATCH -p acd_u # 指定GPU队列
#SBATCH -o output_%j.txt # 指定作业标准输出文件,%j为作业号
#SBATCH -e err_%j.txt # 指定作业标准错误输出文件
#SBATCH -n 8 # 指定CPU总核心数
#SBATCH --gres=gpu:1 # 指定GPU卡数
#SBATCH -D /apps # 指定作业执行路径为/apps
# 以下是作业要执行的命令
echo "Job started at $(date)"
python your_script.py # 假设要运行一个Python脚本
echo "Job ended at $(date)"
提交数组作业
用户可提交数组作业,以共享相同的可执行文件和资源需求,但是具有不同的输入文件和输出文件。
-
脚本提交:
sbatch my_job.sh
-
脚本格式(my_job.sh):
#!/bin/bash
#SBATCH -p normal # 指定队列
#SBATCH -o output_%A_%a.txt # 指定标准输出文件,%A 是数组作业的主作业 ID,%a 是当前子作业的索引
#SBATCH -e error_%A_%a.txt # 指定标准错误输出文件
#SBATCH -n 1 # 指定每个子作业所需的 CPU 核心数
#SBATCH --array=1-10 # 指定数组作业的范围,这里表示从 1 到 10 的 10 个子作业
# 根据子作业索引设置不同的参数
PARAM=$SLURM_ARRAY_TASK_ID
# 执行作业命令,这里以打印参数为例
echo "Running task $PARAM"
python your_script.py $PARAM # 假设要运行一个 Python 脚本并传入参数
参数说明:
- #SBATCH --array=1-10: 这行指令定义了数组作业的范围,1-10 表示将创建 10 个子作业,子作业的索引从 1 到 10。你也可以使用逗号分隔不同的索引值,如 --array=1,3,5 表示只创建索引为 1、3、5 的子作业;还可以使用步长,如 --array=1-10:2 表示索引为 1、3、5、7、9 的子作业。
- $SLURM_ARRAY_TASK_ID: 这是一个环境变量,在每个子作业中,它的值等于该子作业的索引。你可以根据这个索引来设置不同的参数或输入文件。
- %A 和 %a: 在输出文件的命名中,%A 代表数组作业的主作业 ID,%a 代表当前子作业的索引。这样可以确保每个子作业的输出文件不会相互覆盖。
提交交互式作业
交互式作业是一种类前端作业,虽然作业在后端(某一计算节点)执行,但执行的过程和输出会实时呈现到用户提交端,在这一过程中用户也可以参与其中,进行必要的人机交互。
用户可使用srun
提交交互式作业
$ srun -p acd_u -n 4 --mem=8G --gres=gpu:1 --time=01:00:00 --pty bash
参数说明:
- --time=01:00:00: 设置作业的最长运行时间为 1 小时。当达到这个时间限制时,作业会被自动终止。
- -pty bash: 分配一个伪终端并启动 bash shell
作业查看与管理(命令行)
查看用户作业(等待、运行、挂起)
$ squeue -u <username> [-t PENDING,RUNNING,SUSPENDED]
查看用户历史作业
$ sacct -u <username> [--array]
查看作业详情
$ scontrol show job <jobid>
查看数组作业
$ scontrol show job <jobid_$task_id>
查看作业PENDING原因
$ scontrol show job <jobid>
挂起作业
$ scontrol suspend <jobid>
恢复作业
$ scontrol resume <jobid>
终止作业
$ scancel <jobid>
作业查看与管理(WEB)
查看用户作业
登录HPC平台门户 --- 我的作业 --- 选择HPC-X86_NVIDIA (slurm)
查看作业详情
点击作业号,查看对应作业详情
终止作业
选择对应作业,查看对应作业详情