跳到主要内容

作业提交运行

推荐通过 sbatch 在后台运行作业。使用这种方式时,需要将整个计算过程写入作业脚本,再通过 sbatch 命令提交到计算节点执行。

计算资源使用要求

不要在登录节点直接运行计算任务。示例中的分区、节点数、核心数和路径必须按当前账号权限及实际算例修改。

不要在登录节点运行计算程序
  • 登录集群后,不要在登录节点直接执行计算程序;
  • 必须通过批处理作业或交互作业申请计算资源。

演示视频:作业提交运行操作演示

一、准备算例

将算例文件上传到集群账号。以下示例假设二进制程序名为 binary,并存放在家目录下的 test 目录中。

文件上传方法请参阅文件传输页面。

二、编写作业脚本

下面的示例在 1 个节点上使用 56 个 CPU 核心运行 binary。软件环境的加载方法请参阅相应的软件使用页面。

如需调整资源,请修改脚本中的节点数、每节点核心数和总核心数。每节点可用核心数以集群实际配置和分区限制为准。

submit.sh
#!/bin/bash
#SBATCH --nodes=1 # 机器节点数量
#SBATCH --ntasks-per-node=56 # 每个机器上的核心数量
#SBATCH --ntasks=56 # 总核心数(总运行核心)
### #SBATCH --partition=g3_share # 队列分区且必须指定正确分区(会被告知)
#SBATCH --job-name=hello # 作业名称(推荐修改一下,以便区分)
#SBATCH --output=hello.%j.out # 正常日志输出 (%j 参数值为 jobId)
#SBATCH --error=hello.%j.err # 错误日志输出 (%j 参数值为 jobId)

##############################################
# Software Envrironment #
##############################################
unset I_MPI_PMI_LIBRARY # 取消默认mpi库,使用intel自带
export I_MPI_JOB_RESPECT_PROCESS_PLACEMENT=0 # intel 多节点作业所需修改参数
module load intel/2022 intelmpi/2022 # intel 环境加载

##############################################
# Run job #
##############################################
mpirun -np $SLURM_NPROCS ./binary # 选项-np指定 $SLURM_NPROCS 参数为总核心数,即nodes*tasks

三、保存作业脚本

通过文件上传或在线编辑,将脚本保存为 run.slurm。脚本与算例文件应放在同一算例目录中;本例使用家目录下的 test 目录。

四、提交作业

进入算例目录后,执行以下命令提交后台作业:

sbatch run.slurm

附录:监控作业内存与 CPU 占用

submit.sh
#!/bin/bash
#SBATCH --nodes=1 # 节点数量
#SBATCH --ntasks-per-node=56 # 每个节点核心数量
#SBATCH --ntasks=56 # 总核心数
#SBATCH --partition=g3_share # 队列分区且必须指定正确分区
#SBATCH --job-name=hello # 作业名称
#SBATCH --output=hello.%j.out # 正常日志输出 (%j 参数值为 jobId)
#SBATCH --error=hello.%j.err # 错误日志输出 (%j 参数值为 jobId)

##############################################
# memeory total calculate #
##############################################
mkdir ./memory_total # ben
nameflag=`scontrol show hostname $SLURM_JOB_NODELIST`
jobflag=`squeue | grep $SLURM_JOB_ID | wc -l`

function gather_job(){
while [[ "$jobflag" -eq 1 ]]
do
for line in $nameflag
do
meminfo=`scontrol show node $line | grep Real | sed 's/.\{3\}//' | sed 's/.\{17\}.$//'`
hostinfo=`scontrol show node $line | grep NodeName | awk '{print $1}'`
cpuinfo=`scontrol show node $line | grep CPULoad | awk '{print $1}'`
echo -e "$hostinfo\n$meminfo\n$cpuinfo\n" >> ./memory_total/`date '+%Y%m%d-%T' | sed 's/.\{2\}.$//'`
done
sleep 1m
done
}
gather_job &

##############################################
# Software Envrironment #
##############################################
unset I_MPI_PMI_LIBRARY # 取消默认mpi库,使用intel自带
export I_MPI_JOB_RESPECT_PROCESS_PLACEMENT=0 # intel 多节点作业所需修改参数
module load intel/2022 intelmpi/2022 # intel 环境加载

##############################################
# Run job #
##############################################
mpirun -np $SLURM_NPROCS ./binary # 选项-np指定 $SLURM_NPROCS 参数为总核心数,即nodes*tasks